diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index f5965404..232c4ce0 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -13,21 +13,50 @@ class SevenSegment: disp = None + + # Some 7Segment-Display have several different colons, e.g. the + # 1,2" display. To seperately control such different colons + # use the following values where applicable: + # + # 0x00 - nothing + # 0x02 - center colon + # 0x04 - left colon - upper dot + # 0x08 - left colon - lower dot + # 0x10 - decimal point + # 0xFFFF - everything (default) + mask_colons = 0xFFFF # Hexadecimal character lookup table (row 1 = 0..9, row 2 = A..F) - digits = [ 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, \ - 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 ] - + DIGITS_NORMAL = [ 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, \ + 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71 ] + # inverted table from https://github.com/tomgidden/Adafruit-Raspberry-Pi-Python-Code/commit/87bed18ecc8e251f3c10433d8a31d363dbbd355c + # thx to tomgidden@github for this + DIGITS_INVERTED = [ 0x3F, 0x30, 0x5B, 0x79, 0x74, 0x6D, 0x6F, 0x38, 0x7F, 0x7D, \ + 0x7E, 0x67, 0x0F, 0x73, 0x4F, 0x4E ] + digits = DIGITS_NORMAL + display_inverted = False + # Constructor def __init__(self, address=0x70, debug=False): if (debug): print "Initializing a new instance of LEDBackpack at 0x%02X" % address self.disp = LEDBackpack(address=address, debug=debug) + def invertDisplay(self): + if (self.display_inverted): # we were inverted, so switch back to normal + self.digits = self.DIGITS_NORMAL + self.display_inverted = False + else: # we were displaying normally, so switch to inverted + self.digits = self.DIGITS_INVERTED + self.display_inverted = True + def writeDigitRaw(self, charNumber, value): "Sets a digit using the raw 16-bit value" if (charNumber > 7): return + if ((self.display_inverted) & (charNumber < 5)): + "if inverted we need to use reverse character positioning" + charNumber = 4 - charNumber # Set the appropriate digit self.disp.setBufferRow(charNumber, value) @@ -37,6 +66,9 @@ def writeDigit(self, charNumber, value, dot=False): return if (value > 0xF): return + if ((self.display_inverted) & (charNumber < 5)): + "if inverted we need to use reverse character positioning" + charNumber = 4 - charNumber # Set the appropriate digit self.disp.setBufferRow(charNumber, self.digits[value] | (dot << 7)) @@ -45,8 +77,9 @@ def setColon(self, state=True): # Warning: This function assumes that the colon is character '2', # which is the case on 4 char displays, but may need to be modified # if another display type is used + if (state): - self.disp.setBufferRow(2, 0xFFFF) + self.disp.setBufferRow(2, self.mask_colons) else: self.disp.setBufferRow(2, 0) diff --git a/Adafruit_LEDBackpack/ex_7segment_clock.py b/Adafruit_LEDBackpack/ex_7segment_clock.py index 99f00ab1..5b4875a3 100644 --- a/Adafruit_LEDBackpack/ex_7segment_clock.py +++ b/Adafruit_LEDBackpack/ex_7segment_clock.py @@ -23,7 +23,12 @@ # Set minutes segment.writeDigit(3, int(minute / 10)) # Tens segment.writeDigit(4, minute % 10) # Ones - # Toggle colon - segment.setColon(second % 2) # Toggle colon at 1Hz - # Wait one second - time.sleep(1) + + # Toggle colon(s) as configured in Adafruit_7Segment.py + # every second (by using even seconds vs. odd seconds) + if (second % 2 == 0): # reminder = 0 -> even second + segment.setColon(0) # turn colons off + else: # reminder != 0 -> odd second + segment.setColon(1) # turn colons on + + time.sleep(1) # Wait one second