BERTL17 WS2812B Test

Dependencies:   mbed WS2812 PixelArray

Files at this revision

API Documentation at this revision

Comitter:
EliasN
Date:
Fri Mar 29 09:33:07 2019 +0000
Child:
1:c2876522bf56
Commit message:
Initial Commit

Changed in this revision

PixelArray.lib Show annotated file Show diff for this revision Revisions of this file
WS2812.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PixelArray.lib	Fri Mar 29 09:33:07 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/chris/code/PixelArray/#b45a70faaa83
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/WS2812.lib	Fri Mar 29 09:33:07 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/bridadan/code/WS2812/#6e647820f587
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Mar 29 09:33:07 2019 +0000
@@ -0,0 +1,88 @@
+#include "mbed.h"
+#include "stdlib.h"
+#include "string"
+#include "WS2812.h"
+#include "PixelArray.h"
+
+// Anzahl der LEDs
+#define WS2812_BUF 3
+
+// Serielle Verbindung mit PC herstellen
+Serial pc(USBTX, USBRX, 9600);
+// Buffer mit 3 Pixeln erstellen (vgl. Grafikspeicher einer Grafikkarte)
+PixelArray px(WS2812_BUF);
+// WS2812 Libraryobjekt erstellen, an P1_22 hängen die LEDs, die letzen 4 Ziffern sind das Timing
+WS2812 ws(P1_22, WS2812_BUF, 0, 5, 5, 0);
+
+// Lesen einer Farbe aus dem Buffer
+int getCol(int index) {
+    return px.getBuf()[index];
+}
+
+// Die Led an "index" auf "color" setzen, "color" im format 0xRRGGBB
+void setCol(int index, unsigned int color) {
+    // Farbe in den Buffer setzen
+    px.Set(index, color);
+    // Buffer an LEDs sendern
+    ws.write(px.getBuf());
+}
+
+// Wie setCol, nur wechselnd (ein wenn aus, aus wenn ein)
+void toggleCol(int index, unsigned int color) {
+    if (getCol(index) == 0) setCol(index, color);
+    else setCol(index, 0);
+}
+
+// String vom Serial Port lesen
+string readString(char * prompt) {
+    string str = "";
+    char readc;
+    pc.printf("%s> ", prompt);
+    while (true) {
+        readc = pc.getc(); // Einen Charakter lesen
+        if (readc == '\r' || readc == '\n') break; // Aufhöhren zu lesen bei Enter
+        pc.printf("%c", readc); // Rückgabe jedes Buchstabens
+        str += readc;
+    }
+    pc.printf("\n");
+    return str;
+}
+
+int main()
+{
+    pc.printf("Hello world!\n");
+ 
+    unsigned int col = 0xff0000; // Standardfarbe = rot
+    string s;
+    while (true) {
+        char c = pc.getc(); // Charakter lesen
+        pc.printf("-> %c\n", c);
+        
+        switch (c) {
+            case '1': // Erste LED schalten
+                toggleCol(0, col);
+                break;
+            case '2': // Zweite LED schalten
+                toggleCol(1, col);
+                break;
+            case '3': // Dritte LED schalten
+                toggleCol(2, col);
+                break;
+            case 's': // Farbe ändern
+                s = readString("R"); // Rot einlesen
+                col = atoi(s.c_str()) * 256 * 256; // String in integer wandeln
+                
+                s = readString("G"); // Grün einlesen
+                col += atoi(s.c_str()) * 256;
+                
+                s = readString("B"); // Blau einlesen
+                col += atoi(s.c_str());
+                
+                pc.printf("Success!\n");
+                break;
+            default:
+                pc.printf("Unbekannter Befehl!\n");
+                break;
+        }
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Mar 29 09:33:07 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file