from machine import Pin, I2C
import ssd1306
import time
import random
SCREEN_WIDTH = 128
SCREEN_HEIGHT = 64
OLED_ADDR = 0x3C
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
display = ssd1306.SSD1306_I2C(SCREEN_WIDTH, SCREEN_HEIGHT, i2c)
eyes = [
[[eye4, eye4], [eye5, eye5], [eye6, eye6]],
[[eye1, eye1], [eye2, eye2], [eye3, eye3]],
[[eye0, eye0], [eye0, eye0], [eye0, eye0]],
[[eye10d, eye10i], [eye11d, eye11i], [eye12d, eye12i]],
[[eye7, eye7], [eye8, eye8], [eye9, eye9]],
[[eye13d, eye13i], [eye14d, eye14i], [eye15d, eye15i]]
]
xp = 16
yp = 16
mood = 1
x1, x2 = 0, 0
y1, y2 = 0, 0
def read_key():
ret = 0
if Pin(2).value() == 1:
ret += 1 # izquierda
if Pin(3).value() == 1:
ret += 2 # derecha
if Pin(4).value() == 1:
ret += 3 # arriba
if Pin(5).value() == 1:
ret += 4 # abajo
if Pin(6).value() == 1:
ret += 5 # cambio ojos
return ret
def show_eye():
global x1, x2, y1, y2
x1 = xp + (16 if xp > 16 else 2 * (xp - 16))
x2 = 64 + xp + (-16 if xp < 16 else xp * 2)
y1 = yp
y2 = yp
display.fill(0)
if xp < 6:
display.blit(eyes[mood][2][0], x1, y1)
display.blit(eyes[mood][1][1], x2, y2)
elif xp < 26:
display.blit(eyes[mood][0][0], x1, y1)
display.blit(eyes[mood][0][1], x2, y2)
else:
display.blit(eyes[mood][1][0], x1, y1)
display.blit(eyes[mood][2][1], x2, y2)
display.show()
Pin(2, Pin.IN)
Pin(3, Pin.IN)
Pin(4, Pin.IN)
Pin(5, Pin.IN)
Pin(6, Pin.IN)
display.fill(0)
display.show()
espera = 0
desplaza = 0
xd, yd = 0, 0
while True:
if espera > 0:
espera -= 1
time.sleep_ms(1)
else:
x1 = xd + (xp if xp > 16 else (xp * 2))
x2 = 64 + xd + (xp if xp < 16 else (xp * 2))
y1 = yd + yp
y2 = yd + yp
if desplaza == 0:
show_eye()
espera = random.randint(250, 1000)
n = random.randint(0, 7)
if n == 6:
desplaza = 1
else:
desplaza = 2
elif desplaza == 1:
display.fill(0)
display.show()
time.sleep_ms(100)
desplaza = 0
elif desplaza == 2:
n = random.randint(0, 10)
if n < 5:
xd -= 1
elif n > 5:
xd += 1
xd = max(-4, min(4, xd))
espera = 0
desplaza = 0
n = read_key()
if n == 1:
xp = max(0, xp - 1)
elif n == 2:
xp = min(32, xp + 1)
elif n == 3:
yp = max(0, yp - 1)
elif n == 4:
yp = min(32, yp + 1)
elif n == 5:
mood = (mood + 1) % 6
while read_key() != 0:
pass
if n != 0:
espera = 0
desplaza = 0