85 lines
2.1 KiB
Python
85 lines
2.1 KiB
Python
#! /usr/bin/python3
|
|
# -*- coding: utf8 -*-
|
|
|
|
# load needed modules from luma
|
|
from luma.core.interface.serial import i2c, spi
|
|
from luma.core.render import canvas
|
|
from luma.oled.device import sh1106
|
|
from luma.core import lib
|
|
from luma.core.sprite_system import framerate_regulator
|
|
|
|
# load needed modules from RPi.GPIO
|
|
import RPi.GPIO as GPIO
|
|
|
|
# load needed modules from PIL
|
|
from PIL import ImageFont, ImageDraw, Image
|
|
|
|
# load more needed modules
|
|
import time
|
|
import sys
|
|
|
|
# load randommodules
|
|
from random import randint, gauss
|
|
|
|
#GPIO define pins
|
|
RST_PIN = 25 #Reset
|
|
CS_PIN = 8
|
|
DC_PIN = 24
|
|
|
|
serial = spi(device=0, port=0, bus_speed_hz = 8000000, transfer_size = 4096, gpio_DC = DC_PIN, gpio_RST = RST_PIN)
|
|
device_used = sh1106(serial, rotate=2) #sh1106
|
|
|
|
def matrix(device):
|
|
wrd_rgb = [
|
|
(154, 173, 154),
|
|
(0, 255, 0),
|
|
(0, 235, 0),
|
|
(0, 220, 0),
|
|
(0, 185, 0),
|
|
(0, 165, 0),
|
|
(0, 128, 0),
|
|
(0, 0, 0),
|
|
(154, 173, 154),
|
|
(0, 145, 0),
|
|
(0, 125, 0),
|
|
(0, 100, 0),
|
|
(0, 80, 0),
|
|
(0, 60, 0),
|
|
(0, 40, 0),
|
|
(0, 0, 0)
|
|
]
|
|
|
|
clock = 0
|
|
blue_pilled_population = []
|
|
max_population = device.width * 8
|
|
regulator = framerate_regulator(fps=10)
|
|
|
|
def increase_poppulation():
|
|
blue_pilled_population.append([randint(0, device.width), 0, gauss(1.2, 0.6)])
|
|
|
|
while True:
|
|
clock += 1
|
|
with regulator:
|
|
with canvas(device, dither=True) as draw:
|
|
for person in blue_pilled_population:
|
|
x, y, speed = person
|
|
for rgb in wrd_rgb:
|
|
if 0 <= y < device.height:
|
|
draw.point((x, y), fill=rgb)
|
|
y -= 1
|
|
person[1] += speed
|
|
|
|
if clock % 5 == 0 or clock % 3 == 0:
|
|
increase_poppulation()
|
|
|
|
while len(blue_pilled_population) > max_population:
|
|
blue_pilled_population.pop(0)
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
matrix(device_used)
|
|
except KeyboardInterrupt:
|
|
pass
|
|
|
|
|
|
GPIO.cleanup() |