forked from embedded/micropython-ili9341
				
			Add animated sprite demo.
							parent
							
								
									4544b09b5e
								
							
						
					
					
						commit
						7890003b88
					
				@ -0,0 +1,51 @@
 | 
				
			|||||||
 | 
					"""ILI9341 demo (animated sprite).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    Note:  This demo requires a board with additional PSRAM.
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					from ili9341 import Display
 | 
				
			||||||
 | 
					from machine import Pin, SPI  # type: ignore
 | 
				
			||||||
 | 
					from micropython import const  # type: ignore
 | 
				
			||||||
 | 
					from utime import sleep_us, ticks_us, ticks_diff  # type: ignore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SPRITE_WIDTH = const(221)
 | 
				
			||||||
 | 
					SPRITE_HEIGHT = const(154)
 | 
				
			||||||
 | 
					SPRITE_COUNT = const(8)
 | 
				
			||||||
 | 
					SIZE = const(68068)  # width (221) x height (154) x bytes of color (2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def test():
 | 
				
			||||||
 | 
					    """Animated sprite."""
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        # Baud rate of 40000000 seems about the max
 | 
				
			||||||
 | 
					        spi = SPI(1, baudrate=40000000, sck=Pin(14), mosi=Pin(13))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        display = Display(spi, dc=Pin(4), cs=Pin(16), rst=Pin(17))
 | 
				
			||||||
 | 
					        display.clear()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Load sprite
 | 
				
			||||||
 | 
					        cat = display.load_sprite('images/Cat221x1232.raw',
 | 
				
			||||||
 | 
					                                  SPRITE_WIDTH, SPRITE_HEIGHT * 8)
 | 
				
			||||||
 | 
					        # Use memoryview to improve memory usage
 | 
				
			||||||
 | 
					        mv_cat = memoryview(cat)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        x = (display.width - SPRITE_WIDTH) // 2
 | 
				
			||||||
 | 
					        y = (display.height - SPRITE_HEIGHT) // 2
 | 
				
			||||||
 | 
					        index = 0  # Sprite frame index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while True:
 | 
				
			||||||
 | 
					            timer = ticks_us()
 | 
				
			||||||
 | 
					            offset = SIZE * index
 | 
				
			||||||
 | 
					            display.draw_sprite(mv_cat[offset: offset + SIZE], x, y,
 | 
				
			||||||
 | 
					                                SPRITE_WIDTH, SPRITE_HEIGHT)
 | 
				
			||||||
 | 
					            index = (index + 1) % 8  # Set current index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            # Attempt to set framerate to 30 FPS
 | 
				
			||||||
 | 
					            timer_dif = 33333 - ticks_diff(ticks_us(), timer)
 | 
				
			||||||
 | 
					            if timer_dif > 0:
 | 
				
			||||||
 | 
					                sleep_us(timer_dif)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    except KeyboardInterrupt:
 | 
				
			||||||
 | 
					        display.cleanup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test()
 | 
				
			||||||
											
												Binary file not shown.
											
										
									
								
					Loading…
					
					
				
		Reference in New Issue