12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import math
- import time
- import Adafruit_GPIO.SPI as SPI
- import Adafruit_SSD1306
- from PIL import Image
- from PIL import ImageFont
- from PIL import ImageDraw
- RST = 24
- # 128x64 display with hardware I2C:
- disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)
- # Initialize library.
- disp.begin()
- # Get display width and height.
- width = disp.width
- height = disp.height
- # Clear display.
- disp.clear()
- disp.display()
- # Create image buffer.
- # Make sure to create image with mode '1' for 1-bit color.
- image = Image.new('1', (width, height))
- # Load default font.
- font = ImageFont.load_default()
- # Alternatively load a TTF font. Make sure the .ttf font file is in the same directory as this python script!
- # Some nice fonts to try: http://www.dafont.com/bitmap.php
- # font = ImageFont.truetype('Minecraftia.ttf', 8)
- # Create drawing object.
- draw = ImageDraw.Draw(image)
- # Define text and get total width.
- text = 'Floppy Player'
- maxwidth, unused = draw.textsize(text, font=font)
- # Set animation and sine wave parameters.
- amplitude = height/4-10
- offset = height/2 - 4
- velocity = -2
- startpos = width
- # Animate text moving in sine wave.
- # print('Press Ctrl-C to quit.')
- pos = startpos
- while True:
- # Clear image buffer by drawing a black filled box.
- draw.rectangle((0,0,width,height), outline=0, fill=0)
- # Enumerate characters and draw them offset vertically based on a sine wave.
- x = pos
- for i, c in enumerate(text):
- # Stop drawing if off the right side of screen.
- if x > width:
- break
- # Calculate width but skip drawing if off the left side of screen.
- if x < -10:
- char_width, char_height = draw.textsize(c, font=font)
- x += char_width
- continue
- # Calculate offset from sine wave.
- y = offset+math.floor(amplitude*math.sin(x/float(width)*2.0*math.pi))
- # Draw text.
- draw.text((x, y), c, font=font, fill=255)
- # Increment x position based on chacacter width.
- char_width, char_height = draw.textsize(c, font=font)
- x += char_width
- # Draw the image buffer.
- disp.image(image)
- disp.display()
- # Move position for next frame.
- pos += velocity
- # Start over if text has scrolled completely off left side of screen.
- if pos < -maxwidth:
- break
- # Pause briefly before drawing next frame.
- time.sleep(0.1)
|