117 lines
2.8 KiB
Python
117 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2017-18 Richard Hull and contributors
|
|
# See LICENSE.rst for details.
|
|
|
|
"""
|
|
Example for seven segment displays.
|
|
"""
|
|
|
|
import time
|
|
from datetime import datetime
|
|
|
|
from luma.led_matrix.device import max7219
|
|
from luma.core.interface.serial import spi, noop
|
|
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
|
|
serial = spi(port=0, device=0, gpio=noop())
|
|
device = max7219(serial, cascaded=1)
|
|
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()
|