For 24bar graph support

Dependents:   toastboard_integrated

Fork of Adafruit_LEDBackpack_2 by Daniel Drew

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?

UserRevisionLine numberNew 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 }