Implemented first Hangar-Service

Dependencies:   CalibrateMagneto QuaternionMath

Fork of SML2 by TobyRich GmbH

Committer:
pvaibhav
Date:
Wed May 27 13:01:43 2015 +0000
Revision:
46:fd5a62296b12
Parent:
35:fb6e4601adf3
Code reformatted

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pvaibhav 0:943820483318 1 #include "LEDDriver.h"
pvaibhav 0:943820483318 2 #include "mbed.h"
pvaibhav 1:c279bc3af90c 3 #define DEBUG "LEDDriver"
pvaibhav 0:943820483318 4 #include "Logger.h"
pvaibhav 0:943820483318 5
pvaibhav 12:1632d7391453 6 LEDDriver::LEDDriver(I2C &i2c) : I2CPeripheral(i2c, 0x60 /* I2C address of the LED controller */)
pvaibhav 12:1632d7391453 7 {
pvaibhav 0:943820483318 8 // cf. LP5562TME/NOPB datasheet page 14
pvaibhav 0:943820483318 9 // Supply 3.6V to VDD (hardware - done)
pvaibhav 0:943820483318 10 // Supply 1.8V to EN (hardware - done)
pvaibhav 0:943820483318 11 wait_ms(1); // wait 1 ms
pvaibhav 0:943820483318 12 write_reg(0x00, 0xC0); // chip_en to 1, log_en to 1
pvaibhav 0:943820483318 13 wait_us(500); // wait 500 usec
pvaibhav 0:943820483318 14 write_reg(0x08, 0x61); // set PWM freq high, enable power save mode, start internal clock
pvaibhav 0:943820483318 15 write_reg(0x70, 0x00); // configure all LEDs to be controlled from I2C registers
pvaibhav 12:1632d7391453 16
pvaibhav 0:943820483318 17 setColor(Colors::black);
pvaibhav 12:1632d7391453 18
pvaibhav 4:e759b8c756da 19 INFO("LED driver ready");
pvaibhav 0:943820483318 20 }
pvaibhav 0:943820483318 21
pvaibhav 12:1632d7391453 22 void LEDDriver::setColor(const uint8_t r, const uint8_t g, const uint8_t b)
pvaibhav 12:1632d7391453 23 {
pvaibhav 25:abb0f208e6a9 24 write_reg(0x04, g);
pvaibhav 25:abb0f208e6a9 25 write_reg(0x03, r);
pvaibhav 0:943820483318 26 write_reg(0x02, b);
pvaibhav 0:943820483318 27 }
pvaibhav 0:943820483318 28
pvaibhav 0:943820483318 29 void LEDDriver::setColor(const float r, const float g, const float b)
pvaibhav 0:943820483318 30 {
pvaibhav 0:943820483318 31 setColor(r * 255, g * 255, b * 255);
pvaibhav 0:943820483318 32 }
pvaibhav 0:943820483318 33
pvaibhav 0:943820483318 34 void LEDDriver::setColor(const Color color)
pvaibhav 0:943820483318 35 {
pvaibhav 0:943820483318 36 const uint8_t r = (color >> 16) & 0xff;
pvaibhav 0:943820483318 37 const uint8_t g = (color >> 8) & 0xff;
pvaibhav 0:943820483318 38 const uint8_t b = (color >> 0) & 0xff;
pvaibhav 0:943820483318 39 setColor(r, g, b);
pvaibhav 0:943820483318 40 }
pvaibhav 0:943820483318 41
pvaibhav 33:bd56fc8aeb0a 42 void LEDDriver::setWhiteLed(const float w)
pvaibhav 33:bd56fc8aeb0a 43 {
pvaibhav 35:fb6e4601adf3 44 uint8_t value = (uint8_t) (w * 255);
pvaibhav 46:fd5a62296b12 45
pvaibhav 35:fb6e4601adf3 46 if (value > 255)
pvaibhav 35:fb6e4601adf3 47 value = 255;
pvaibhav 46:fd5a62296b12 48
pvaibhav 33:bd56fc8aeb0a 49 write_reg(0x0e, value);
pvaibhav 33:bd56fc8aeb0a 50 }
pvaibhav 33:bd56fc8aeb0a 51
pvaibhav 12:1632d7391453 52 LEDDriver& LEDDriver::operator=(const Color& c)
pvaibhav 12:1632d7391453 53 {
pvaibhav 0:943820483318 54 setColor(c);
pvaibhav 0:943820483318 55 return *this;
pvaibhav 0:943820483318 56 }
pvaibhav 0:943820483318 57
pvaibhav 18:f51b1a94a6e2 58 void LEDDriver::setOutputCurrent(float mA)
pvaibhav 12:1632d7391453 59 {
pvaibhav 18:f51b1a94a6e2 60 if (mA < 0.1)
pvaibhav 18:f51b1a94a6e2 61 mA = 0.1;
pvaibhav 18:f51b1a94a6e2 62 if (mA > 25.5)
pvaibhav 18:f51b1a94a6e2 63 mA = 25.5;
pvaibhav 0:943820483318 64 write_reg(0x05, mA * 10);
pvaibhav 0:943820483318 65 write_reg(0x06, mA * 10);
pvaibhav 0:943820483318 66 write_reg(0x07, mA * 10);
pvaibhav 33:bd56fc8aeb0a 67 write_reg(0x0f, mA * 10);
pvaibhav 1:c279bc3af90c 68 INFO("Output current => %0.1f mA", mA);
pvaibhav 0:943820483318 69 }