Class to control the chainable RGB LED light from Seeed Studios

Dependents:   Nucleo_read_button_interrupt_copy Seeed_Grove_4_Digit_Display_Clock

Committer:
tulanthoar
Date:
Sun May 21 19:20:57 2017 +0000
Revision:
0:fab321797d4b
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tulanthoar 0:fab321797d4b 1 /**
tulanthoar 0:fab321797d4b 2 * @file SeeedChainableLED.h
tulanthoar 0:fab321797d4b 3 * @brief control the chainable LED module from Seeed Studios
tulanthoar 0:fab321797d4b 4 * @author Nathan Yonkee
tulanthoar 0:fab321797d4b 5 * @version 1.0
tulanthoar 0:fab321797d4b 6 * @date 2017-04-20
tulanthoar 0:fab321797d4b 7 */
tulanthoar 0:fab321797d4b 8 #ifndef SEEED_CHAINABLE_LED_H
tulanthoar 0:fab321797d4b 9 #define SEEED_CHAINABLE_LED_H
tulanthoar 0:fab321797d4b 10 #include "mbed.h"
tulanthoar 0:fab321797d4b 11 #include "DataClockPair.h"
tulanthoar 0:fab321797d4b 12
tulanthoar 0:fab321797d4b 13 class SeeedChainableLED {
tulanthoar 0:fab321797d4b 14 private:
tulanthoar 0:fab321797d4b 15 DigitalOut datPin_;
tulanthoar 0:fab321797d4b 16 DigitalOut clkPin_;
tulanthoar 0:fab321797d4b 17 void start_cmd();
tulanthoar 0:fab321797d4b 18 void stop_cmd();
tulanthoar 0:fab321797d4b 19 void pin_delay(int delay_us = 6);
tulanthoar 0:fab321797d4b 20 void send_byte(int byte);
tulanthoar 0:fab321797d4b 21 void send_color(int r, int g, int b);
tulanthoar 0:fab321797d4b 22 public:
tulanthoar 0:fab321797d4b 23 void set_color_rgb(int r, int g, int b, int led = 0);
tulanthoar 0:fab321797d4b 24 void clear_led();
tulanthoar 0:fab321797d4b 25 void turn_on();
tulanthoar 0:fab321797d4b 26 SeeedChainableLED (DataClockPair pins);
tulanthoar 0:fab321797d4b 27 };
tulanthoar 0:fab321797d4b 28
tulanthoar 0:fab321797d4b 29 SeeedChainableLED::SeeedChainableLED(DataClockPair pins) : datPin_(pins.dataPin), clkPin_(pins.clockPin) {
tulanthoar 0:fab321797d4b 30 clear_led();
tulanthoar 0:fab321797d4b 31 }
tulanthoar 0:fab321797d4b 32
tulanthoar 0:fab321797d4b 33 void SeeedChainableLED::start_cmd() {
tulanthoar 0:fab321797d4b 34 send_byte(0x00);
tulanthoar 0:fab321797d4b 35 send_byte(0x00);
tulanthoar 0:fab321797d4b 36 send_byte(0x00);
tulanthoar 0:fab321797d4b 37 send_byte(0x00);
tulanthoar 0:fab321797d4b 38 }
tulanthoar 0:fab321797d4b 39
tulanthoar 0:fab321797d4b 40 void SeeedChainableLED::stop_cmd() {
tulanthoar 0:fab321797d4b 41 start_cmd();
tulanthoar 0:fab321797d4b 42 }
tulanthoar 0:fab321797d4b 43
tulanthoar 0:fab321797d4b 44 void SeeedChainableLED::clear_led() {
tulanthoar 0:fab321797d4b 45 set_color_rgb(0,0,0);
tulanthoar 0:fab321797d4b 46 }
tulanthoar 0:fab321797d4b 47
tulanthoar 0:fab321797d4b 48 void SeeedChainableLED::turn_on() {
tulanthoar 0:fab321797d4b 49 set_color_rgb(255,255,255);
tulanthoar 0:fab321797d4b 50 }
tulanthoar 0:fab321797d4b 51
tulanthoar 0:fab321797d4b 52 void SeeedChainableLED::pin_delay(int delay_us) {
tulanthoar 0:fab321797d4b 53 wait_us(delay_us);
tulanthoar 0:fab321797d4b 54 }
tulanthoar 0:fab321797d4b 55
tulanthoar 0:fab321797d4b 56 void SeeedChainableLED::set_color_rgb(int r, int g, int b, int led) {
tulanthoar 0:fab321797d4b 57 start_cmd();
tulanthoar 0:fab321797d4b 58 send_color(r, g, b);
tulanthoar 0:fab321797d4b 59 stop_cmd();
tulanthoar 0:fab321797d4b 60 }
tulanthoar 0:fab321797d4b 61
tulanthoar 0:fab321797d4b 62 void SeeedChainableLED::send_color(int red, int green, int blue) {
tulanthoar 0:fab321797d4b 63 // Start by sending a byte with the format "1 1 /B7 /B6 /G7 /G6 /R7 /R6"
tulanthoar 0:fab321797d4b 64 int prefix = 0b11000000;
tulanthoar 0:fab321797d4b 65 if ((blue & 0x80) == 0) prefix|= 0b00100000;
tulanthoar 0:fab321797d4b 66 if ((blue & 0x40) == 0) prefix|= 0b00010000;
tulanthoar 0:fab321797d4b 67 if ((green & 0x80) == 0) prefix|= 0b00001000;
tulanthoar 0:fab321797d4b 68 if ((green & 0x40) == 0) prefix|= 0b00000100;
tulanthoar 0:fab321797d4b 69 if ((red & 0x80) == 0) prefix|= 0b00000010;
tulanthoar 0:fab321797d4b 70 if ((red & 0x40) == 0) prefix|= 0b00000001;
tulanthoar 0:fab321797d4b 71 send_byte(prefix);
tulanthoar 0:fab321797d4b 72 // Now send the 3 colors
tulanthoar 0:fab321797d4b 73 send_byte(blue);
tulanthoar 0:fab321797d4b 74 send_byte(green);
tulanthoar 0:fab321797d4b 75 send_byte(red);
tulanthoar 0:fab321797d4b 76 }
tulanthoar 0:fab321797d4b 77
tulanthoar 0:fab321797d4b 78 void SeeedChainableLED::send_byte(int byte) {
tulanthoar 0:fab321797d4b 79 for (int i = 0; i < 8; i++) {
tulanthoar 0:fab321797d4b 80 pin_delay();
tulanthoar 0:fab321797d4b 81 datPin_ = byte & 0x80;
tulanthoar 0:fab321797d4b 82 byte <<= 1;
tulanthoar 0:fab321797d4b 83 clkPin_ = 0;
tulanthoar 0:fab321797d4b 84 pin_delay();
tulanthoar 0:fab321797d4b 85 clkPin_ = 1;
tulanthoar 0:fab321797d4b 86 }
tulanthoar 0:fab321797d4b 87 }
tulanthoar 0:fab321797d4b 88
tulanthoar 0:fab321797d4b 89 #endif