Even on a Wemos D1 Mini (ESP8266), MicroPython is amazingly fast!
# Chord Animated by Hari Wiguna, 2019
# ssd1306 library by AdaFruit
import machine, ssd1306, math, urandom
nFrames = 36
xMax = 64
yMax = 48
x0 = xMax / 2
y0 = yMax / 2
i2c = machine.I2C(scl=machine.Pin(5), sda=machine.Pin(4))
oled = ssd1306.SSD1306_I2C(xMax, yMax, i2c)
def randint(min, max): # ESP8266 does not have randint. Remove this if you're on the ESP32.'
span = max - min + 1
div = 0x3fffffff // span
offset = urandom.getrandbits(30) // div
val = min + offset
return val
def draw_chord(f, xOff, yOff):
node_count = 9
r_max = yMax * 2
r = f * r_max / nFrames
rot = f * math.pi * 2 / nFrames
x = []
y = []
for i in range(0, node_count):
a = -rot + math.pi * 2 * i / node_count
x.append(int(x0 + xOff + math.sin(a) * r))
y.append(int(y0 + yOff + math.cos(a) * r))
oled.fill(0)
for i in range(0, node_count - 1):
for j in range(i, node_count):
oled.line(x[i], y[i], x[j], y[j], 1)
oled.show()
def zoom_in(xOff, yOff):
for f in range(nFrames):
draw_chord(f, xOff, yOff)
def zoom_out(xOff, yOff):
for f in range(nFrames-1, -1, -1):
draw_chord(f, xOff, yOff)
def main():
while True:
xOff = randint(-x0, x0)
yOff = randint(-y0, y0)
zoom_in(xOff, yOff)
zoom_out(xOff, yOff)
main()
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.