PiClock project
This commit is contained in:
162
ht16k33/ht16k33segmentbig.py
Normal file
162
ht16k33/ht16k33segmentbig.py
Normal file
@@ -0,0 +1,162 @@
|
||||
# Import the base class
|
||||
from ht16k33.ht16k33 import HT16K33
|
||||
|
||||
class HT16K33SegmentBig(HT16K33):
|
||||
"""
|
||||
Micro/Circuit Python class for the Adafruit 1.2-in 4-digit,
|
||||
7-segment LED matrix backpack and equivalent Featherwing.
|
||||
|
||||
Bus: I2C
|
||||
Author: Tony Smith (@smittytone)
|
||||
License: MIT
|
||||
Copyright: 2023
|
||||
"""
|
||||
|
||||
# *********** CONSTANTS **********
|
||||
|
||||
HT16K33_SEGMENT_COLON_ROW = 0x04
|
||||
HT16K33_SEGMENT_MINUS_CHAR = 0x10
|
||||
HT16K33_SEGMENT_DEGREE_CHAR = 0x11
|
||||
HT16K33_SEGMENT_SPACE_CHAR = 0x13
|
||||
|
||||
COLON_CENTRE = 0x02
|
||||
COLON_LEFT_UPPER = 0x04
|
||||
COLON_LEFT_LOWER = 0x08
|
||||
COLON_LEFT = 0x0C
|
||||
DECIMAL_POINT = 0x10
|
||||
|
||||
# The positions of the segments within the buffer
|
||||
POS = (0, 2, 6, 8)
|
||||
|
||||
# Bytearray of the key alphanumeric characters we can show:
|
||||
# 0-9, A-F, minus, degree
|
||||
CHARSET = b'\x3F\x06\x5B\x4F\x66\x6D\x7D\x07\x7F\x6F\x5F\x7C\x58\x5E\x7B\x71\x40\x63\x00'
|
||||
|
||||
# *********** CONSTRUCTOR **********
|
||||
|
||||
def __init__(self, i2c, i2c_address=0x70):
|
||||
self.buffer = bytearray(16)
|
||||
self.point_pattern = 0x00
|
||||
super(HT16K33SegmentBig, self).__init__(i2c, i2c_address)
|
||||
|
||||
# *********** PUBLIC METHODS **********
|
||||
|
||||
def set_colon(self, pattern=0x02):
|
||||
"""
|
||||
Set or unset the segment LED display's colon and decimal point lights.
|
||||
|
||||
This method updates the display buffer, but does not send the buffer to the display itself.
|
||||
Call 'draw()' to render the buffer on the display.
|
||||
|
||||
Args:
|
||||
patter (int) An integer indicating which elements to light (OR the values required). Default: 0x00
|
||||
0x00: no colon
|
||||
0x02: centre colon
|
||||
0x04: left colon, lower dot
|
||||
0x08: left colon, upper dot
|
||||
0x10: decimal point (upper)
|
||||
|
||||
Returns:
|
||||
The instance (self)
|
||||
"""
|
||||
# Bail on incorrect pattern values
|
||||
assert 0 <= pattern < 0x1F, "ERROR - bad patter passed to set_colon()"
|
||||
|
||||
self.point_pattern = pattern
|
||||
self.buffer[self.HT16K33_SEGMENT_COLON_ROW] = pattern
|
||||
return self
|
||||
|
||||
def set_glyph(self, glyph, digit=0):
|
||||
"""
|
||||
Present a user-defined character glyph at the specified digit.
|
||||
|
||||
Glyph values are 8-bit integers representing a pattern of set LED segments.
|
||||
The value is calculated by setting the bit(s) representing the segment(s) you want illuminated.
|
||||
Bit-to-segment mapping runs clockwise from the top around the outside of the matrix; the inner segment is bit 6:
|
||||
|
||||
0
|
||||
_
|
||||
5 | | 1
|
||||
| |
|
||||
- <----- 6
|
||||
4 | | 2
|
||||
| _ |
|
||||
3
|
||||
|
||||
This method updates the display buffer, but does not send the buffer to the display itself.
|
||||
Call 'update()' to render the buffer on the display.
|
||||
|
||||
Args:
|
||||
glyph (int): The glyph pattern.
|
||||
digit (int): The digit to show the glyph. Default: 0 (leftmost digit).
|
||||
|
||||
Returns:
|
||||
The instance (self)
|
||||
"""
|
||||
# Bail on incorrect row numbers or character values
|
||||
assert 0 <= digit < 4, "ERROR - Invalid digit (0-3) set in set_glyph()"
|
||||
assert 0 <= glyph < 0x80, "ERROR - Invalid glyph (0x00-0xFF) set in set_glyph()"
|
||||
|
||||
self.buffer[self.POS[digit]] = glyph & 0x7F
|
||||
return self
|
||||
|
||||
def set_number(self, number, digit=0):
|
||||
"""
|
||||
Present single decimal value (0-9) at the specified digit.
|
||||
|
||||
This method updates the display buffer, but does not send the buffer to the display itself.
|
||||
Call 'update()' to render the buffer on the display.
|
||||
|
||||
Args:
|
||||
number (int): The number to show.
|
||||
digit (int): The digit to show the number. Default: 0 (leftmost digit).
|
||||
|
||||
Returns:
|
||||
The instance (self)
|
||||
"""
|
||||
# Bail on incorrect row numbers or character values
|
||||
assert 0 <= digit < 4, "ERROR - Invalid digit (0-3) set in set_number()"
|
||||
assert 0 <= number < 10, "ERROR - Invalid value (0-9) set in set_number()"
|
||||
|
||||
return self.set_character(str(number), digit)
|
||||
|
||||
def set_character(self, char, digit=0):
|
||||
"""
|
||||
Present single alphanumeric character at the specified digit.
|
||||
|
||||
Only characters from the class' character set are available:
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d ,e, f, -.
|
||||
Other characters can be defined and presented using 'set_glyph()'.
|
||||
|
||||
This method updates the display buffer, but does not send the buffer to the display itself.
|
||||
Call 'draw()' to render the buffer on the display.
|
||||
|
||||
Args:
|
||||
char (string): The character to show.
|
||||
digit (int): The digit to show the number. Default: 0 (leftmost digit).
|
||||
has_dot (bool): Whether the decimal point to the right of the digit should be lit. Default: False.
|
||||
|
||||
Returns:
|
||||
The instance (self)
|
||||
"""
|
||||
# Bail on incorrect row numbers
|
||||
assert 0 <= digit < 4, "ERROR - Invalid digit set in set_character()"
|
||||
|
||||
char = char.lower()
|
||||
char_val = 0xFF
|
||||
if char == "deg":
|
||||
char_val = self.HT16K33_SEGMENT_DEGREE_CHAR
|
||||
elif char == '-':
|
||||
char_val = self.HT16K33_SEGMENT_MINUS_CHAR
|
||||
elif char == ' ':
|
||||
char_val = self.HT16K33_SEGMENT_SPACE_CHAR
|
||||
elif char in 'abcdef':
|
||||
char_val = ord(char) - 87
|
||||
elif char in '0123456789':
|
||||
char_val = ord(char) - 48
|
||||
|
||||
# Bail on incorrect character values
|
||||
assert char_val != 0xFF, "ERROR - Invalid char string set in set_character()"
|
||||
|
||||
self.buffer[self.POS[digit]] = self.CHARSET[char_val]
|
||||
return self
|
||||
Reference in New Issue
Block a user