For 24bar graph support
Dependents: toastboard_integrated
Fork of Adafruit_LEDBackpack_2 by
Adafruit_LEDBackpack.cpp@2:0491b3f9a639, 2014-11-18 (annotated)
- Committer:
- ddrew73
- Date:
- Tue Nov 18 01:19:49 2014 +0000
- Revision:
- 2:0491b3f9a639
- Parent:
- 1:f066d5347c60
Edited to include the Adafruit 24 bicolor bargraph functionality.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
luizhespanha | 0:e81a6274acce | 1 | /*************************************************** |
luizhespanha | 0:e81a6274acce | 2 | This is a library for our I2C LED Backpacks |
luizhespanha | 0:e81a6274acce | 3 | |
luizhespanha | 0:e81a6274acce | 4 | Designed specifically to work with the Adafruit LED Matrix backpacks |
luizhespanha | 0:e81a6274acce | 5 | ----> http://www.adafruit.com/products/ |
luizhespanha | 0:e81a6274acce | 6 | ----> http://www.adafruit.com/products/ |
luizhespanha | 0:e81a6274acce | 7 | |
luizhespanha | 0:e81a6274acce | 8 | These displays use I2C to communicate, 2 pins are required to |
luizhespanha | 0:e81a6274acce | 9 | interface. There are multiple selectable I2C addresses. For backpacks |
luizhespanha | 0:e81a6274acce | 10 | with 2 Address Select pins: 0x70, 0x71, 0x72 or 0x73. For backpacks |
luizhespanha | 0:e81a6274acce | 11 | with 3 Address Select pins: 0x70 thru 0x77 |
luizhespanha | 0:e81a6274acce | 12 | |
luizhespanha | 0:e81a6274acce | 13 | Adafruit invests time and resources providing this open source code, |
luizhespanha | 0:e81a6274acce | 14 | please support Adafruit and open-source hardware by purchasing |
luizhespanha | 0:e81a6274acce | 15 | products from Adafruit! |
luizhespanha | 0:e81a6274acce | 16 | |
luizhespanha | 0:e81a6274acce | 17 | Written by Limor Fried/Ladyada for Adafruit Industries. |
luizhespanha | 0:e81a6274acce | 18 | BSD license, all text above must be included in any redistribution |
luizhespanha | 0:e81a6274acce | 19 | ****************************************************/ |
luizhespanha | 1:f066d5347c60 | 20 | |
luizhespanha | 1:f066d5347c60 | 21 | /* |
luizhespanha | 1:f066d5347c60 | 22 | * Modified by Luiz Hespanha (http://www.d3.do) 8/16/2013 for use in LPC1768 |
luizhespanha | 1:f066d5347c60 | 23 | */ |
ddrew73 | 2:0491b3f9a639 | 24 | |
ddrew73 | 2:0491b3f9a639 | 25 | /* |
ddrew73 | 2:0491b3f9a639 | 26 | * Modified by Daniel Drew 11/13/2014 for use with 24ledbar backpack |
ddrew73 | 2:0491b3f9a639 | 27 | */ |
luizhespanha | 0:e81a6274acce | 28 | |
luizhespanha | 0:e81a6274acce | 29 | #include "mbed.h" |
luizhespanha | 0:e81a6274acce | 30 | #include "Adafruit_LEDBackpack.h" |
luizhespanha | 0:e81a6274acce | 31 | #include "Adafruit_GFX.h" |
luizhespanha | 0:e81a6274acce | 32 | |
ddrew73 | 2:0491b3f9a639 | 33 | #ifndef _BV |
ddrew73 | 2:0491b3f9a639 | 34 | #define _BV(bit) (1<<(bit)) |
ddrew73 | 2:0491b3f9a639 | 35 | #endif |
ddrew73 | 2:0491b3f9a639 | 36 | |
luizhespanha | 0:e81a6274acce | 37 | void Adafruit_LEDBackpack::setBrightness(uint8_t b) { |
luizhespanha | 0:e81a6274acce | 38 | if (b > 15) b = 15; |
luizhespanha | 0:e81a6274acce | 39 | uint8_t c = 0xE0 | b; |
luizhespanha | 0:e81a6274acce | 40 | char foo[1]; |
luizhespanha | 0:e81a6274acce | 41 | foo[0] = c; |
luizhespanha | 0:e81a6274acce | 42 | _i2c->write(i2c_addr, foo, 1); |
luizhespanha | 0:e81a6274acce | 43 | } |
luizhespanha | 0:e81a6274acce | 44 | |
luizhespanha | 0:e81a6274acce | 45 | void Adafruit_LEDBackpack::blinkRate(uint8_t b) { |
luizhespanha | 0:e81a6274acce | 46 | if (b > 3) b = 0; // turn off if not sure |
luizhespanha | 0:e81a6274acce | 47 | uint8_t c = HT16K33_BLINK_CMD | HT16K33_BLINK_DISPLAYON | (b << 1); |
luizhespanha | 0:e81a6274acce | 48 | char foo[1]; |
luizhespanha | 0:e81a6274acce | 49 | foo[0] = c; |
luizhespanha | 0:e81a6274acce | 50 | _i2c->write(i2c_addr, foo, 1); |
luizhespanha | 0:e81a6274acce | 51 | } |
luizhespanha | 0:e81a6274acce | 52 | |
luizhespanha | 0:e81a6274acce | 53 | Adafruit_LEDBackpack::Adafruit_LEDBackpack(I2C *i2c): _i2c(i2c) { |
luizhespanha | 0:e81a6274acce | 54 | } |
luizhespanha | 0:e81a6274acce | 55 | |
luizhespanha | 0:e81a6274acce | 56 | void Adafruit_LEDBackpack::begin(uint8_t _addr = 0x70) { |
luizhespanha | 0:e81a6274acce | 57 | i2c_addr = _addr << 1; |
luizhespanha | 0:e81a6274acce | 58 | |
luizhespanha | 0:e81a6274acce | 59 | char foo[1]; |
luizhespanha | 0:e81a6274acce | 60 | foo[0] = 0x21; |
luizhespanha | 0:e81a6274acce | 61 | |
luizhespanha | 0:e81a6274acce | 62 | _i2c->write(i2c_addr, foo, 1); // turn on oscillator |
luizhespanha | 0:e81a6274acce | 63 | |
luizhespanha | 0:e81a6274acce | 64 | blinkRate(HT16K33_BLINK_OFF); |
luizhespanha | 0:e81a6274acce | 65 | |
luizhespanha | 0:e81a6274acce | 66 | setBrightness(15); // max brightness |
luizhespanha | 0:e81a6274acce | 67 | } |
luizhespanha | 0:e81a6274acce | 68 | |
luizhespanha | 0:e81a6274acce | 69 | void Adafruit_LEDBackpack::writeDisplay(void) { |
luizhespanha | 0:e81a6274acce | 70 | char foo[17]; |
luizhespanha | 0:e81a6274acce | 71 | foo[0] = 0x00; |
luizhespanha | 0:e81a6274acce | 72 | int j = 0; |
luizhespanha | 0:e81a6274acce | 73 | for (uint8_t i=1; i<=16; i+=2) { |
luizhespanha | 0:e81a6274acce | 74 | int x = displaybuffer[j] & 0xFF; |
luizhespanha | 0:e81a6274acce | 75 | foo[i] = x; |
luizhespanha | 0:e81a6274acce | 76 | int x2 = displaybuffer[j] >> 8; |
luizhespanha | 0:e81a6274acce | 77 | foo[i+1] = x2; |
luizhespanha | 0:e81a6274acce | 78 | j++; |
luizhespanha | 0:e81a6274acce | 79 | } |
luizhespanha | 0:e81a6274acce | 80 | _i2c->write(i2c_addr, foo, 17); |
luizhespanha | 0:e81a6274acce | 81 | } |
luizhespanha | 0:e81a6274acce | 82 | |
luizhespanha | 0:e81a6274acce | 83 | void Adafruit_LEDBackpack::clear(void) { |
luizhespanha | 0:e81a6274acce | 84 | for (uint8_t i=0; i<8; i++) { |
luizhespanha | 0:e81a6274acce | 85 | displaybuffer[i] = 0; |
luizhespanha | 0:e81a6274acce | 86 | } |
luizhespanha | 0:e81a6274acce | 87 | } |
luizhespanha | 0:e81a6274acce | 88 | |
luizhespanha | 0:e81a6274acce | 89 | Adafruit_8x8matrix::Adafruit_8x8matrix(I2C *i2c) : Adafruit_LEDBackpack(i2c), Adafruit_GFX(8, 8) { |
luizhespanha | 0:e81a6274acce | 90 | } |
luizhespanha | 0:e81a6274acce | 91 | |
luizhespanha | 0:e81a6274acce | 92 | void Adafruit_8x8matrix::drawPixel(int16_t x, int16_t y, uint16_t color) { |
luizhespanha | 0:e81a6274acce | 93 | if ((y < 0) || (y >= 8)) return; |
luizhespanha | 0:e81a6274acce | 94 | if ((x < 0) || (x >= 8)) return; |
luizhespanha | 0:e81a6274acce | 95 | |
luizhespanha | 0:e81a6274acce | 96 | // check rotation, move pixel around if necessary |
luizhespanha | 0:e81a6274acce | 97 | switch (getRotation()) { |
luizhespanha | 0:e81a6274acce | 98 | case 1: |
luizhespanha | 0:e81a6274acce | 99 | swap(x, y); |
luizhespanha | 0:e81a6274acce | 100 | x = 8 - x - 1; |
luizhespanha | 0:e81a6274acce | 101 | break; |
luizhespanha | 0:e81a6274acce | 102 | case 2: |
luizhespanha | 0:e81a6274acce | 103 | x = 8 - x - 1; |
luizhespanha | 0:e81a6274acce | 104 | y = 8 - y - 1; |
luizhespanha | 0:e81a6274acce | 105 | break; |
luizhespanha | 0:e81a6274acce | 106 | case 3: |
luizhespanha | 0:e81a6274acce | 107 | swap(x, y); |
luizhespanha | 0:e81a6274acce | 108 | y = 8 - y - 1; |
luizhespanha | 0:e81a6274acce | 109 | break; |
luizhespanha | 0:e81a6274acce | 110 | } |
luizhespanha | 0:e81a6274acce | 111 | |
luizhespanha | 0:e81a6274acce | 112 | // wrap around the x |
luizhespanha | 0:e81a6274acce | 113 | x += 7; |
luizhespanha | 0:e81a6274acce | 114 | x %= 8; |
luizhespanha | 0:e81a6274acce | 115 | |
luizhespanha | 0:e81a6274acce | 116 | |
luizhespanha | 0:e81a6274acce | 117 | if (color) { |
luizhespanha | 0:e81a6274acce | 118 | displaybuffer[y] |= 1 << x; |
luizhespanha | 0:e81a6274acce | 119 | } else { |
luizhespanha | 0:e81a6274acce | 120 | displaybuffer[y] &= ~(1 << x); |
luizhespanha | 0:e81a6274acce | 121 | } |
ddrew73 | 2:0491b3f9a639 | 122 | } |
ddrew73 | 2:0491b3f9a639 | 123 | |
ddrew73 | 2:0491b3f9a639 | 124 | |
ddrew73 | 2:0491b3f9a639 | 125 | /******************************* 24 BARGRAPH OBJECT */ |
ddrew73 | 2:0491b3f9a639 | 126 | |
ddrew73 | 2:0491b3f9a639 | 127 | Adafruit_24bargraph::Adafruit_24bargraph(I2C *i2c): Adafruit_LEDBackpack(i2c) { |
ddrew73 | 2:0491b3f9a639 | 128 | } |
ddrew73 | 2:0491b3f9a639 | 129 | |
ddrew73 | 2:0491b3f9a639 | 130 | void Adafruit_24bargraph::setBar(uint8_t bar, uint8_t color) { |
ddrew73 | 2:0491b3f9a639 | 131 | uint16_t a, c; |
ddrew73 | 2:0491b3f9a639 | 132 | |
ddrew73 | 2:0491b3f9a639 | 133 | if (bar < 12) |
ddrew73 | 2:0491b3f9a639 | 134 | c = bar / 4; |
ddrew73 | 2:0491b3f9a639 | 135 | else |
ddrew73 | 2:0491b3f9a639 | 136 | c = (bar - 12) / 4; |
ddrew73 | 2:0491b3f9a639 | 137 | |
ddrew73 | 2:0491b3f9a639 | 138 | a = bar % 4; |
ddrew73 | 2:0491b3f9a639 | 139 | if (bar >= 12) |
ddrew73 | 2:0491b3f9a639 | 140 | a += 4; |
ddrew73 | 2:0491b3f9a639 | 141 | |
ddrew73 | 2:0491b3f9a639 | 142 | //Serial.print("Ano = "); Serial.print(a); Serial.print(" Cath = "); Serial.println(c); |
ddrew73 | 2:0491b3f9a639 | 143 | if (color == LED_RED) { |
ddrew73 | 2:0491b3f9a639 | 144 | // Turn on red LED. |
ddrew73 | 2:0491b3f9a639 | 145 | displaybuffer[c] |= _BV(a); |
ddrew73 | 2:0491b3f9a639 | 146 | // Turn off green LED. |
ddrew73 | 2:0491b3f9a639 | 147 | displaybuffer[c] &= ~_BV(a+8); |
ddrew73 | 2:0491b3f9a639 | 148 | } else if (color == LED_YELLOW) { |
ddrew73 | 2:0491b3f9a639 | 149 | // Turn on red and green LED. |
ddrew73 | 2:0491b3f9a639 | 150 | displaybuffer[c] |= _BV(a) | _BV(a+8); |
ddrew73 | 2:0491b3f9a639 | 151 | } else if (color == LED_OFF) { |
ddrew73 | 2:0491b3f9a639 | 152 | // Turn off red and green LED. |
ddrew73 | 2:0491b3f9a639 | 153 | displaybuffer[c] &= ~_BV(a) & ~_BV(a+8); |
ddrew73 | 2:0491b3f9a639 | 154 | } else if (color == LED_GREEN) { |
ddrew73 | 2:0491b3f9a639 | 155 | // Turn on green LED. |
ddrew73 | 2:0491b3f9a639 | 156 | displaybuffer[c] |= _BV(a+8); |
ddrew73 | 2:0491b3f9a639 | 157 | // Turn off red LED. |
ddrew73 | 2:0491b3f9a639 | 158 | displaybuffer[c] &= ~_BV(a); |
ddrew73 | 2:0491b3f9a639 | 159 | } |
ddrew73 | 2:0491b3f9a639 | 160 | } |