from machine import Pin
from utime import sleep, ticks_us
from math import sqrt
import framebuf
import ssd1306
WIDTH = 128
# bit shifting only works when the numbers are a power of 2
HALF_WIDTH = WIDTH >> 1
QUARTER_WIDTH = HALF_WIDTH >> 1
HEIGHT = 64
HALF_HEIGHT = HEIGHT >> 1
QUARTER_HEIGHT = HALF_HEIGHT >> 1
ONE_THIRD_HEIGHT = int(HEIGHT/3)
# draw readability
ON = 1
OFF = 0
NO_FILL = 0
FILL = 1
clock=Pin(2) #SCL
data=Pin(3) #SDA
RES = machine.Pin(4)
DC = machine.Pin(5)
CS = machine.Pin(6)
spi=machine.SPI(0, sck=clock, mosi=data)
oled = ssd1306.SSD1306_SPI(WIDTH, HEIGHT, spi, DC, RES, CS)
phm = 18 # pupal horizontal movement range
eye_dist_from_top = 21
eyeWidth = 27
eyeHeight = 10
mouth_vpos = 45
mouth_width = 40
def draw_face(eye_direction):
oled.fill(0)
# left eye
oled.ellipse(32, eye_dist_from_top, eyeWidth, eyeHeight, ON, FILL)
oled.ellipse(32+i, eye_dist_from_top, 5, 5, OFF, FILL)
# right eye
oled.ellipse(94, eye_dist_from_top, eyeWidth, eyeHeight, ON, FILL)
oled.ellipse(94+i, eye_dist_from_top, 5, 5, OFF, FILL)
# draw mouth
# draw bottom half by doing a bitwise and of 8 and 4
oled.ellipse(HALF_WIDTH, mouth_vpos, mouth_width, 10, ON, NO_FILL, 12)
oled.show()
delay = .02
while True:
for i in range(-phm, phm):
draw_face(i)
sleep(delay)
for i in range(phm, -phm, -1):
draw_face(i)
sleep(delay)