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