-
Notifications
You must be signed in to change notification settings - Fork 0
/
lcd_char.py
71 lines (67 loc) · 2.15 KB
/
lcd_char.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# Subscriber list, displayed on rotation on a character LCD
import board
import digitalio
import adafruit_character_lcd.character_lcd as character_lcd
import time
# Init LCD
lcd_rs = digitalio.DigitalInOut(board.D16)
lcd_en = digitalio.DigitalInOut(board.D20)
lcd_d4 = digitalio.DigitalInOut(board.D6)
lcd_d5 = digitalio.DigitalInOut(board.D13)
lcd_d6 = digitalio.DigitalInOut(board.D19)
lcd_d7 = digitalio.DigitalInOut(board.D26)
lcd_columns = 16
lcd_rows = 2
lcd_backlight = digitalio.DigitalInOut(board.D21) # Works but doesn't supply enough power
lcd = character_lcd.Character_LCD_Mono(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, lcd_columns, lcd_rows, lcd_backlight)
lcd.backlight = True
lcd.blink = False
# Load sub data
subs = []
with open('Subs.txt') as f:
for line in f:
partial_lines = line.split('|')
new_partial = []
for s in partial_lines:
stripped = s.strip()
new_partial.append(stripped)
subs.append(new_partial)
# Rotation of displayed sub
def rotate_sub():
while True:
for sub in subs:
lcd.clear()
first_line = sub[0]
try:
second_line = sub[1]
except IndexError:
second_line = "" # There is no second line
lcd.message = first_line + "\n" + second_line
if len(first_line) > lcd_columns or len(second_line) > lcd_columns: # Is EITHER line too wide
maxlen = max(len(first_line), len(second_line)) + 1
# Pad lines as necessary, including 1 space for scrolled lines
if len(first_line) > lcd_columns:
first_line = first_line.ljust(maxlen)
if len(second_line) > lcd_columns:
second_line = second_line.ljust(maxlen)
# Build 'frames' for scrolled messages
for frame in range(maxlen):
if len(first_line) > lcd_columns:
first_line = first_line[1:] + first_line[0]
if len(second_line) > lcd_columns:
second_line = second_line[1:] + second_line[0]
lcd.clear()
lcd.message = first_line + "\n" + second_line
time.sleep(0.1)
try:
time.sleep(5 - (maxlen * 0.1))
except ValueError:
time.sleep(1) # Probably scrolled for longer than 5 seconds
else:
time.sleep(5)
if __name__ == '__main__':
try:
rotate_sub()
finally:
lcd.clear()
lcd.backlight = False