Nathan Yonkee / Mbed OS Seeed_Grove_4_Digit_Display_Clock

Dependencies:   Data_Clock_Pair Seeed_Chainable_LED Seeed_Four_Digit_Disp Seeed_IR_Temp_Sensor Seeed_Led_Bar

Fork of Seeed_Grove_4_Digit_Display_Clock by Seeed

Revision:
7:b16b9733d859
Child:
12:a16d86fac131
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SeeedLedBar.h	Fri Apr 21 07:34:25 2017 -0600
@@ -0,0 +1,67 @@
+#ifndef SEEED_LED_BAR_H
+#define SEEED_LED_BAR_H
+#include "mbed.h"
+
+class SeeedLedBar {
+  private:
+    DigitalOut datPin_;
+    DigitalOut clkPin_;
+    void pin_delay(int delay_us = 2);
+    static const int glbCmdMode_ = 0x00;
+    void send_sixtn_bits(int sixtnBits);
+    void set_leds(int ledPower[]);
+  public:
+    SeeedLedBar(PinName dataOut, PinName clockOut);
+    void ten_on();
+    void ten_off();
+    void ten_set(int ledPower[]);
+};
+
+SeeedLedBar::SeeedLedBar(PinName dataOut, PinName clockOut) : datPin_(dataOut), clkPin_(clockOut) { }
+
+void SeeedLedBar::pin_delay(int delay_us) {
+    wait_us(delay_us);
+}
+
+void SeeedLedBar::send_sixtn_bits(int sixtnBits) {
+    for (int i = 0; i < 16; i++) {
+        pin_delay();
+        datPin_ = sixtnBits & 0x8000;
+        pin_delay();
+        clkPin_ = !clkPin_;
+        sixtnBits <<= 1;
+    }
+}
+
+void SeeedLedBar::set_leds(int ledPower[]) {
+    send_sixtn_bits(glbCmdMode_);
+    for (int i = 0; i < 10; i++) send_sixtn_bits(ledPower[i]);
+    // Two extra empty bits for padding the command to the correct length
+    send_sixtn_bits(0x00);
+    send_sixtn_bits(0x00);
+    pin_delay();
+    datPin_ = 0;
+    pin_delay();
+    for (int i = 0; i < 4; i++) {
+        pin_delay();
+        datPin_ = 1;
+        pin_delay();
+        datPin_ = 0;
+    }
+}
+
+void SeeedLedBar::ten_on() {
+    int all_on[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+    set_leds(all_on);
+}
+
+void SeeedLedBar::ten_off() {
+    int all_off[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+    set_leds(all_off);
+}
+
+void SeeedLedBar::ten_set(int ledPower[]) {
+    set_leds(ledPower);
+}
+
+#endif