IHS1.1-STM32F303K8

Dependents:   Nucleo_IHS11a

Files at this revision

API Documentation at this revision

Comitter:
maro
Date:
Thu Jul 16 08:20:57 2020 +0000
Child:
1:62baf2ea5573
Commit message:
IHS1.1-STM32F303K8

Changed in this revision

CLED.cpp Show annotated file Show diff for this revision Revisions of this file
CLED.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CLED.cpp	Thu Jul 16 08:20:57 2020 +0000
@@ -0,0 +1,53 @@
+#include "mbed.h"
+#include "CLED.h"
+// *************************** CLED ********************************
+const byte CLED::c10[7] = {0, 4, 5, 1, 3, 2, 6};//IHS10:none, red, yellow, green, lightBlue, bule, purple
+const byte CLED::c11[7] = {0, 1, 3, 2, 6, 4, 5};//IHS11:none, red, yellow, green, lightBlue, bule, purple
+const byte CLED::INDI_COLOR = 12;
+// *************************** SPI ********************************
+extern SPI spi;
+extern DigitalOut ss;
+extern Serial uart;
+// *************************** GPIO ********************************
+extern DigitalOut sel_sen;
+extern DigitalOut fix_cled;
+extern DigitalOut oe_cled;
+// ************************* object ********************************
+Ticker indiTic;
+
+CLED::CLED(int ver) : indVal(0) {
+    if (ver == 10) color = c10;
+    if (ver == 11) color = c11;
+    indiTic.attach(callback(this, &CLED::indiBlink), 400e-3);
+    
+}
+
+void CLED::set(byte* ary12, bool indi) {        // 1-12[8]:{7, 3,..}
+    int val24 = 0;
+    for (int col = 0; col < COL_LEN; col++) {   // LED number is opposit direction
+        byte cVal = (indi && (col == COL_LEN - 1) ? indVal : ary12[col]) >> 1;
+        val24 += color[cVal] << col * 3;
+    }
+    sel_sen = 0;                                //digitalWrite(sel_sen, LOW);
+    oe_cled = 0;                                //digitalWrite(oe_cled, LOW);        
+    ss = 0;                                     //digitalWrite(ss, LOW);
+    for (int b = 2; b>=0; b--) {
+        spi.write((val24 >> b * COL_LEN) & 0xff);
+    }
+    fix_cled = 1;       //digitalWrite(FIX_LED, HIGH);
+    fix_cled = 0;       //digitalWrite(FIX_LED, LOW);      
+    ss = 1;             //digitalWrite(ss, HIGH);
+    oe_cled = 1;        //digitalWrite(oe_cled, HIGH);
+}
+
+void CLED::set(byte val12) {
+    byte ary[COL_LEN];
+    for (int i=0; i<COL_LEN; i++)
+        ary[i] = val12;
+    set(ary);
+}
+
+// *************** PWM callback function ****************
+void CLED::indiBlink() {          // indicator blink
+    indVal = (indVal > 0) ? 0 : INDI_COLOR;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/CLED.h	Thu Jul 16 08:20:57 2020 +0000
@@ -0,0 +1,21 @@
+#ifndef CLED_H
+#define CLED_H
+#include "Sensor.h"
+
+// *************************** CLED ********************************
+class CLED {
+  public:
+    CLED(int ver=10);
+    void set(byte* ary12, bool indi = false);
+    void set(byte val12);
+
+  private:
+    void indiBlink();
+    const byte* color;
+    static const byte c10[7];
+    static const byte c11[7];
+    static const byte INDI_COLOR;
+    byte indVal;
+};
+
+#endif