diff --git a/adafruit_ht16k33/bargraph.py b/adafruit_ht16k33/bargraph.py new file mode 100644 index 0000000..b3fedd0 --- /dev/null +++ b/adafruit_ht16k33/bargraph.py @@ -0,0 +1,64 @@ +# The MIT License (MIT) +# +# Copyright (c) 2018 Carter Nelson for Adafruit Industries +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +`adafruit_ht16k33.bargraph` +=========================== + +* Authors: Carter Nelson for Adafruit Industries + +""" + +from adafruit_ht16k33.ht16k33 import HT16K33 + +class Bicolor24(HT16K33): + """Bi-color 24-bar bargraph display.""" + + LED_OFF = 0 + LED_RED = 1 + LED_GREEN = 2 + LED_YELLOW = 3 + + def __getitem__(self, key): + # map to HT16K33 row (x) and column (y), see schematic + x = key % 4 + 4 * (key // 12) + y = key // 4 - 3 * (key // 12) + # construct the color value and return it + return self._pixel(x, y) | self._pixel(x+8, y) << 1 + + def __setitem__(self, key, value): + # map to HT16K33 row (x) and column (y), see schematic + x = key % 4 + 4 * (key // 12) + y = key // 4 - 3 * (key // 12) + # conditionally turn on red LED + self._pixel(x, y, value & 0x01) + # conditionally turn on green LED + self._pixel(x+8, y, value >> 1) + + def fill(self, color): + """Fill the whole display with the given color.""" + what_it_was = self.auto_write + self.auto_write = False + for i in range(24): + self[i] = color + self.show() + self.auto_write = what_it_was diff --git a/examples/bicolor24.py b/examples/bicolor24.py new file mode 100644 index 0000000..90b9a52 --- /dev/null +++ b/examples/bicolor24.py @@ -0,0 +1,40 @@ +# Basic example of using the Bi-color 24 segment bargraph display. +# This example and library is meant to work with Adafruit CircuitPython API. +# Author: Carter Nelson +# License: Public Domain + +import time + +# Import board related modules +import board +import busio + +# Import the Bicolor24 driver from the HT16K33 module +from adafruit_ht16k33.bargraph import Bicolor24 + +# Create the I2C interface +i2c = busio.I2C(board.SCL, board.SDA) + +# Create the LED bargraph class. +bc24 = Bicolor24(i2c) + +# Set individual segments of bargraph +bc24[0] = bc24.LED_RED +bc24[1] = bc24.LED_GREEN +bc24[2] = bc24.LED_YELLOW + +time.sleep(2) + +# Turn them all off +bc24.fill(bc24.LED_OFF) + +# Turn them on in a loop +for i in range(24): + bc24[i] = bc24.LED_RED + time.sleep(0.1) + bc24[i] = bc24.LED_OFF + +time.sleep(1) + +# Fill the entrire bargraph +bc24.fill(bc24.LED_GREEN)