From e2d234d495f93d296fe7bc2c6f07cad9a101b448 Mon Sep 17 00:00:00 2001 From: improti Date: Sat, 10 Oct 2015 03:59:26 +0200 Subject: [PATCH 1/9] Update Adafruit_7Segment.py Added comments to point out how to control the different colons seperately --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index f5965404..c7d596a6 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -45,6 +45,14 @@ 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 + + # To seperately control the different colons, use the following values: + # 0x02 - center colon + # 0x04 - left colon - upper dot + # 0x08 - left colon - lower dot + # 0x10 - decimal point + # 0xFFFF - everything + if (state): self.disp.setBufferRow(2, 0xFFFF) else: From 910aa854adc0ba414b23511882791967bd8f3e30 Mon Sep 17 00:00:00 2001 From: improti Date: Sun, 11 Oct 2015 17:47:45 +0200 Subject: [PATCH 2/9] Update ex_7segment_clock.py Added explanations to colon-toggling --- Adafruit_LEDBackpack/ex_7segment_clock.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Adafruit_LEDBackpack/ex_7segment_clock.py b/Adafruit_LEDBackpack/ex_7segment_clock.py index 99f00ab1..4e841822 100644 --- a/Adafruit_LEDBackpack/ex_7segment_clock.py +++ b/Adafruit_LEDBackpack/ex_7segment_clock.py @@ -23,7 +23,8 @@ # Set minutes segment.writeDigit(3, int(minute / 10)) # Tens segment.writeDigit(4, minute % 10) # Ones - # Toggle colon + # Toggle colon as configured in Adafruit_7Segment.py + # (by using even seconds vs. odd seconds) segment.setColon(second % 2) # Toggle colon at 1Hz # Wait one second time.sleep(1) From bb4dfcb82186d68a737d33f205b234da728c8024 Mon Sep 17 00:00:00 2001 From: improti Date: Mon, 12 Oct 2015 13:15:12 +0200 Subject: [PATCH 3/9] Documented setup of different colons as well as how the toggle works --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 6 +++++- Adafruit_LEDBackpack/ex_7segment_clock.py | 14 +++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index c7d596a6..6d9b4e66 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -46,7 +46,11 @@ def setColon(self, state=True): # which is the case on 4 char displays, but may need to be modified # if another display type is used - # To seperately control the different colons, use the following values: + # 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 diff --git a/Adafruit_LEDBackpack/ex_7segment_clock.py b/Adafruit_LEDBackpack/ex_7segment_clock.py index 4e841822..05fdbf49 100644 --- a/Adafruit_LEDBackpack/ex_7segment_clock.py +++ b/Adafruit_LEDBackpack/ex_7segment_clock.py @@ -23,8 +23,12 @@ # Set minutes segment.writeDigit(3, int(minute / 10)) # Tens segment.writeDigit(4, minute % 10) # Ones - # Toggle colon as configured in Adafruit_7Segment.py - # (by using even seconds vs. odd seconds) - 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 + self.segment.setColon(0) # turn colons off + else: # reminder != 0 -> odd second + self.segment.setColon(1) # turn colons on + + time.sleep(1) # Wait one second From 4997d8bdca450d7e0a96287629c3e0a57322ba39 Mon Sep 17 00:00:00 2001 From: improti Date: Mon, 12 Oct 2015 13:18:51 +0200 Subject: [PATCH 4/9] Documented setup of different colons as well as how the toggle works --- Adafruit_LEDBackpack/ex_7segment_clock.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Adafruit_LEDBackpack/ex_7segment_clock.py b/Adafruit_LEDBackpack/ex_7segment_clock.py index 05fdbf49..5b4875a3 100644 --- a/Adafruit_LEDBackpack/ex_7segment_clock.py +++ b/Adafruit_LEDBackpack/ex_7segment_clock.py @@ -27,8 +27,8 @@ # 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 - self.segment.setColon(0) # turn colons off + segment.setColon(0) # turn colons off else: # reminder != 0 -> odd second - self.segment.setColon(1) # turn colons on + segment.setColon(1) # turn colons on time.sleep(1) # Wait one second From 8583a29ba31edc1a591b533a0ae86de095602a22 Mon Sep 17 00:00:00 2001 From: improti Date: Mon, 12 Oct 2015 19:08:10 +0200 Subject: [PATCH 5/9] moved the hexadecimal mask for what colons to display to a variable to allow modification during runtime --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index 6d9b4e66..dbfd84e9 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -13,6 +13,18 @@ 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, \ @@ -58,7 +70,7 @@ def setColon(self, state=True): # 0xFFFF - everything if (state): - self.disp.setBufferRow(2, 0xFFFF) + self.disp.setBufferRow(2, self.mask_colons) else: self.disp.setBufferRow(2, 0) From b9a724a7bac0ed965bb52f8699a840186922473a Mon Sep 17 00:00:00 2001 From: improti Date: Mon, 12 Oct 2015 19:18:31 +0200 Subject: [PATCH 6/9] removed redundant comments --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index dbfd84e9..c3c9c55e 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -58,17 +58,6 @@ def setColon(self, state=True): # which is the case on 4 char displays, but may need to be modified # if another display type is used - # 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 - if (state): self.disp.setBufferRow(2, self.mask_colons) else: From 3b91186443f9b27e713fa94240eaa703ebe16d53 Mon Sep 17 00:00:00 2001 From: improti Date: Mon, 12 Oct 2015 20:09:48 +0200 Subject: [PATCH 7/9] added function to invert the display --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 24 ++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index c3c9c55e..51237fc8 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -27,19 +27,34 @@ class SevenSegment: 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 ] + 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) @@ -49,6 +64,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)) From 34e18acbff6ea2f3982809bf1ec8de7c971e8e67 Mon Sep 17 00:00:00 2001 From: improti Date: Tue, 13 Oct 2015 14:17:34 +0200 Subject: [PATCH 8/9] fixed wrong intendation --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index 51237fc8..80a3c30d 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -52,7 +52,7 @@ 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 ((self.display_inverted) & (charNumber < 5)): "if inverted we need to use reverse character positioning" charNumber = 4 - charNumber # Set the appropriate digit From 8cc59594f55d668914b1a443c38e5acad55faf90 Mon Sep 17 00:00:00 2001 From: improti Date: Thu, 15 Oct 2015 17:39:06 +0200 Subject: [PATCH 9/9] added comment to credit @tomgidden for his contribution on which the invert function is based --- Adafruit_LEDBackpack/Adafruit_7Segment.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Adafruit_LEDBackpack/Adafruit_7Segment.py b/Adafruit_LEDBackpack/Adafruit_7Segment.py index 80a3c30d..232c4ce0 100644 --- a/Adafruit_LEDBackpack/Adafruit_7Segment.py +++ b/Adafruit_LEDBackpack/Adafruit_7Segment.py @@ -29,6 +29,8 @@ class SevenSegment: # Hexadecimal character lookup table (row 1 = 0..9, row 2 = A..F) 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