-
Notifications
You must be signed in to change notification settings - Fork 152
/
Copy pathsevensegment_demo.py
executable file
·120 lines (92 loc) · 2.81 KB
/
sevensegment_demo.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright (c) 2017-2022 Richard Hull and contributors
# See LICENSE.rst for details.
"""
Example for seven segment displays.
"""
import sys
import time
from datetime import datetime
from demo_opts import get_device
from luma.core.virtual import viewport, sevensegment
def date(seg):
"""
Display current date on device.
"""
now = datetime.now()
seg.text = now.strftime("%y-%m-%d")
def clock(seg, seconds):
"""
Display current time on device.
"""
interval = 0.5
for i in range(int(seconds / interval)):
now = datetime.now()
seg.text = now.strftime("%H-%M-%S")
# calculate blinking dot
if i % 2 == 0:
seg.text = now.strftime("%H-%M-%S")
else:
seg.text = now.strftime("%H %M %S")
time.sleep(interval)
def show_message_vp(device, msg, delay=0.1):
# Implemented with virtual viewport
width = device.width
padding = " " * width
msg = padding + msg + padding
n = len(msg)
virtual = viewport(device, width=n, height=8)
sevensegment(virtual).text = msg
for i in reversed(list(range(n - width))):
virtual.set_position((i, 0))
time.sleep(delay)
def show_message_alt(seg, msg, delay=0.1):
# Does same as above but does string slicing itself
width = seg.device.width
padding = " " * width
msg = padding + msg + padding
for i in range(len(msg)):
seg.text = msg[i:i + width]
time.sleep(delay)
def main():
# create seven segment device
device = get_device()
if not hasattr(device, 'segment_mapper'):
sys.exit(f'sevensegment is not supported on a {device.__class__.__name__} device')
seg = sevensegment(device)
print('Simple text...')
for _ in range(8):
seg.text = "HELLO"
time.sleep(0.6)
seg.text = " GOODBYE"
time.sleep(0.6)
# Digit slicing
print("Digit slicing")
seg.text = "_" * seg.device.width
time.sleep(1.0)
for i, ch in enumerate([9, 8, 7, 6, 5, 4, 3, 2]):
seg.text[i] = str(ch)
time.sleep(0.6)
for i in range(len(seg.text)):
del seg.text[0]
time.sleep(0.6)
# Scrolling Alphabet Text
print('Scrolling alphabet text...')
show_message_vp(device, "HELLO EVERYONE!")
show_message_vp(device, "PI is 3.14159 ... ")
show_message_vp(device, "IP is 127.0.0.1 ... ")
show_message_alt(seg, "0123456789 abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ")
# Digit futzing
date(seg)
time.sleep(5)
clock(seg, seconds=10)
# Brightness
print('Brightness...')
for x in range(5):
for intensity in range(16):
seg.device.contrast(intensity * 16)
time.sleep(0.1)
device.contrast(0x7F)
if __name__ == '__main__':
main()