Skip to content

Instantly share code, notes, and snippets.

@jthiem
Created November 1, 2017 19:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jthiem/e07ae8ed92d5b8e4397908eb62f1a472 to your computer and use it in GitHub Desktop.
Save jthiem/e07ae8ed92d5b8e4397908eb62f1a472 to your computer and use it in GitHub Desktop.
Raspberry Pi Zero Halloween project code: animate text on an OLED display and blink LEDs
import math
import time
import random
import Adafruit_GPIO.SPI as SPI
import Adafruit_SSD1306
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
import RPi.GPIO as GPIO
#import logging
#logging.basicConfig(level=logging.DEBUG)
class LEDS:
def __init__(self):
#LED_PINS = [11, 12, 13, 15, 16, 22, 29, 31, 32]
self.PINS = [17, 18, 27, 22, 23, 25, 5, 6, 12]
GPIO.setmode(GPIO.BCM)
GPIO.setup(self.PINS, GPIO.OUT)
self.state = 0
def random_pattern(self):
for n in self.PINS:
GPIO.output(n, random.randint(0,1))
class OLED:
def __init__(self):
self.RESET_PIN = 24
self.disp = Adafruit_SSD1306.SSD1306_128_32(rst=self.RESET_PIN)
self.font = ImageFont.truetype('c.ttf', 32)
self.disp.begin()
self.disp.clear()
self.disp.display()
self.setText('ERROR! Text not set!')
self.textpos = 0
def setText(self, text):
image = Image.new('1', (self.disp.width, self.disp.height))
draw = ImageDraw.Draw(image)
self.maxwidth, unused = draw.textsize(text, font=self.font)
self.FullTextImage = Image.new('1', (self.maxwidth+2*self.disp.width, self.disp.height))
self.FTIdraw = ImageDraw.Draw(self.FullTextImage)
self.FTIdraw.text((self.disp.width, 0), text, font=self.font, fill=255)
def animate(self, speed=2):
section = self.FullTextImage.crop((self.textpos, 0, self.textpos+self.disp.width, self.disp.height))
self.disp.image(section)
self.disp.display()
self.textpos = self.textpos+speed
if self.textpos>(self.maxwidth+self.disp.width):
self.textpos = 0
####### MAIN ###########
leds = LEDS()
disp = OLED()
disp.setText('Ich bin ROBOTER <add name here>’)
counter = 0
while True:
tstamp = time.time()
disp.animate()
if counter>9:
leds.random_pattern()
counter = 0
counter = counter+1
sleeptime = 0.01 - (time.time()-tstamp)
if sleeptime>0:
time.sleep(sleeptime)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment