library for m3Dpi robot, based on the Pololu 3pi and m3pi. m3Dpi has multiple distance sensors, gyroscope, compass and accelerometer sensor to be fully aware of its environment. With the addition of xbee or nrf24n01 module it has wireless communication capabilities.
Dependencies: m3pi ADXL345_I2C HMC5583L ITG3200 PCA9547 TLC59116 VL6180x RGB-fun xbee
lib/LedRing.cpp@12:4cb092df6958, 2016-01-20 (annotated)
- Committer:
- sillevl
- Date:
- Wed Jan 20 17:54:16 2016 +0000
- Revision:
- 12:4cb092df6958
- Parent:
- 10:4200a8140b10
update library to forked project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sillevl | 0:9f02ae958e20 | 1 | #include "LedRing.h" |
sillevl | 0:9f02ae958e20 | 2 | |
sillevl | 10:4200a8140b10 | 3 | LedRing::LedRing(I2C &i2c) : driver1(i2c, DRIVER_1_ADDRESS), driver2(i2c, DRIVER_2_ADDRESS) |
sillevl | 10:4200a8140b10 | 4 | { |
sillevl | 10:4200a8140b10 | 5 | initialize(); |
sillevl | 10:4200a8140b10 | 6 | } |
sillevl | 0:9f02ae958e20 | 7 | |
sillevl | 0:9f02ae958e20 | 8 | LedRing::LedRing(PinName sda, PinName scl): driver1(sda, scl, DRIVER_1_ADDRESS), driver2(sda, scl, DRIVER_2_ADDRESS) |
sillevl | 0:9f02ae958e20 | 9 | { |
sillevl | 10:4200a8140b10 | 10 | initialize(); |
sillevl | 10:4200a8140b10 | 11 | } |
sillevl | 10:4200a8140b10 | 12 | |
sillevl | 10:4200a8140b10 | 13 | void LedRing::initialize() |
sillevl | 10:4200a8140b10 | 14 | { |
sillevl | 0:9f02ae958e20 | 15 | driver1.enable(); |
sillevl | 0:9f02ae958e20 | 16 | driver2.enable(); |
sillevl | 0:9f02ae958e20 | 17 | |
sillevl | 0:9f02ae958e20 | 18 | setBrightness(0.05); |
sillevl | 0:9f02ae958e20 | 19 | } |
sillevl | 0:9f02ae958e20 | 20 | |
sillevl | 0:9f02ae958e20 | 21 | void LedRing::setColor(int led, Color* color) |
sillevl | 0:9f02ae958e20 | 22 | { |
sillevl | 0:9f02ae958e20 | 23 | led--; // zero indexed from now on |
sillevl | 0:9f02ae958e20 | 24 | led = led % 8; |
sillevl | 0:9f02ae958e20 | 25 | |
sillevl | 0:9f02ae958e20 | 26 | int channelMap[8] = {0, 3, 6, 0, 3, 6, 9, 9}; |
sillevl | 0:9f02ae958e20 | 27 | int driverMap[8] = {1, 1, 1, 2, 2, 2, 2, 1}; |
sillevl | 0:9f02ae958e20 | 28 | |
sillevl | 0:9f02ae958e20 | 29 | TLC59116* driver = (driverMap[led] == 1) ? &driver1 : &driver2; |
sillevl | 0:9f02ae958e20 | 30 | int startChannel = channelMap[led]; |
sillevl | 0:9f02ae958e20 | 31 | |
sillevl | 0:9f02ae958e20 | 32 | setLed(driver, startChannel, color); |
sillevl | 0:9f02ae958e20 | 33 | } |
sillevl | 0:9f02ae958e20 | 34 | |
sillevl | 0:9f02ae958e20 | 35 | void LedRing::setColor(int led, int color) |
sillevl | 0:9f02ae958e20 | 36 | { |
sillevl | 0:9f02ae958e20 | 37 | Color* _color = new Color(color); |
sillevl | 0:9f02ae958e20 | 38 | setColor(led, _color); |
sillevl | 0:9f02ae958e20 | 39 | delete _color; |
sillevl | 0:9f02ae958e20 | 40 | } |
sillevl | 0:9f02ae958e20 | 41 | |
sillevl | 0:9f02ae958e20 | 42 | void LedRing::setAll(Color* color) |
sillevl | 0:9f02ae958e20 | 43 | { |
sillevl | 0:9f02ae958e20 | 44 | for(int i = 0; i < 8; i++){ |
sillevl | 0:9f02ae958e20 | 45 | setColor(i+1, color); |
sillevl | 0:9f02ae958e20 | 46 | } |
sillevl | 0:9f02ae958e20 | 47 | } |
sillevl | 0:9f02ae958e20 | 48 | |
sillevl | 0:9f02ae958e20 | 49 | void LedRing::setAll(int color) |
sillevl | 0:9f02ae958e20 | 50 | { |
sillevl | 0:9f02ae958e20 | 51 | Color* _color = new Color(color); |
sillevl | 0:9f02ae958e20 | 52 | setAll(_color); |
sillevl | 0:9f02ae958e20 | 53 | delete _color; |
sillevl | 0:9f02ae958e20 | 54 | } |
sillevl | 0:9f02ae958e20 | 55 | |
sillevl | 0:9f02ae958e20 | 56 | void LedRing::setAll(int* colors) |
sillevl | 0:9f02ae958e20 | 57 | { |
sillevl | 0:9f02ae958e20 | 58 | for(int i = 0; i < 8; i++){ |
sillevl | 0:9f02ae958e20 | 59 | setColor(i+1, colors[i]); |
sillevl | 0:9f02ae958e20 | 60 | } |
sillevl | 0:9f02ae958e20 | 61 | } |
sillevl | 0:9f02ae958e20 | 62 | |
sillevl | 0:9f02ae958e20 | 63 | void LedRing::setLed(TLC59116* driver, int startChannel, Color* color) |
sillevl | 0:9f02ae958e20 | 64 | { |
sillevl | 0:9f02ae958e20 | 65 | driver->setChannel(startChannel + 0, color->getRed() / 255.0); |
sillevl | 0:9f02ae958e20 | 66 | driver->setChannel(startChannel + 1, color->getGreen() / 255.0); |
sillevl | 0:9f02ae958e20 | 67 | driver->setChannel(startChannel + 2, color->getBlue() / 255.0); |
sillevl | 0:9f02ae958e20 | 68 | } |
sillevl | 0:9f02ae958e20 | 69 | |
sillevl | 0:9f02ae958e20 | 70 | void LedRing::setBrightness(float brightness) |
sillevl | 0:9f02ae958e20 | 71 | { |
sillevl | 0:9f02ae958e20 | 72 | driver1.setBrightness(brightness); |
sillevl | 0:9f02ae958e20 | 73 | driver2.setBrightness(brightness); |
sillevl | 0:9f02ae958e20 | 74 | } |
sillevl | 0:9f02ae958e20 | 75 | |
sillevl | 0:9f02ae958e20 | 76 | void LedRing::greenRedGradient(int led, int value) |
sillevl | 0:9f02ae958e20 | 77 | { |
sillevl | 0:9f02ae958e20 | 78 | Color* _color = new Color(255 - value, value, 0); |
sillevl | 0:9f02ae958e20 | 79 | setColor(led, _color); |
sillevl | 0:9f02ae958e20 | 80 | delete _color; |
sillevl | 0:9f02ae958e20 | 81 | } |