BERTL17 WS2812B Test

Dependencies:   mbed WS2812 PixelArray

Committer:
EliasN
Date:
Fri Mar 29 09:33:07 2019 +0000
Revision:
0:2536675f1748
Child:
1:c2876522bf56
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EliasN 0:2536675f1748 1 #include "mbed.h"
EliasN 0:2536675f1748 2 #include "stdlib.h"
EliasN 0:2536675f1748 3 #include "string"
EliasN 0:2536675f1748 4 #include "WS2812.h"
EliasN 0:2536675f1748 5 #include "PixelArray.h"
EliasN 0:2536675f1748 6
EliasN 0:2536675f1748 7 // Anzahl der LEDs
EliasN 0:2536675f1748 8 #define WS2812_BUF 3
EliasN 0:2536675f1748 9
EliasN 0:2536675f1748 10 // Serielle Verbindung mit PC herstellen
EliasN 0:2536675f1748 11 Serial pc(USBTX, USBRX, 9600);
EliasN 0:2536675f1748 12 // Buffer mit 3 Pixeln erstellen (vgl. Grafikspeicher einer Grafikkarte)
EliasN 0:2536675f1748 13 PixelArray px(WS2812_BUF);
EliasN 0:2536675f1748 14 // WS2812 Libraryobjekt erstellen, an P1_22 hängen die LEDs, die letzen 4 Ziffern sind das Timing
EliasN 0:2536675f1748 15 WS2812 ws(P1_22, WS2812_BUF, 0, 5, 5, 0);
EliasN 0:2536675f1748 16
EliasN 0:2536675f1748 17 // Lesen einer Farbe aus dem Buffer
EliasN 0:2536675f1748 18 int getCol(int index) {
EliasN 0:2536675f1748 19 return px.getBuf()[index];
EliasN 0:2536675f1748 20 }
EliasN 0:2536675f1748 21
EliasN 0:2536675f1748 22 // Die Led an "index" auf "color" setzen, "color" im format 0xRRGGBB
EliasN 0:2536675f1748 23 void setCol(int index, unsigned int color) {
EliasN 0:2536675f1748 24 // Farbe in den Buffer setzen
EliasN 0:2536675f1748 25 px.Set(index, color);
EliasN 0:2536675f1748 26 // Buffer an LEDs sendern
EliasN 0:2536675f1748 27 ws.write(px.getBuf());
EliasN 0:2536675f1748 28 }
EliasN 0:2536675f1748 29
EliasN 0:2536675f1748 30 // Wie setCol, nur wechselnd (ein wenn aus, aus wenn ein)
EliasN 0:2536675f1748 31 void toggleCol(int index, unsigned int color) {
EliasN 0:2536675f1748 32 if (getCol(index) == 0) setCol(index, color);
EliasN 0:2536675f1748 33 else setCol(index, 0);
EliasN 0:2536675f1748 34 }
EliasN 0:2536675f1748 35
EliasN 0:2536675f1748 36 // String vom Serial Port lesen
EliasN 0:2536675f1748 37 string readString(char * prompt) {
EliasN 0:2536675f1748 38 string str = "";
EliasN 0:2536675f1748 39 char readc;
EliasN 0:2536675f1748 40 pc.printf("%s> ", prompt);
EliasN 0:2536675f1748 41 while (true) {
EliasN 0:2536675f1748 42 readc = pc.getc(); // Einen Charakter lesen
EliasN 0:2536675f1748 43 if (readc == '\r' || readc == '\n') break; // Aufhöhren zu lesen bei Enter
EliasN 0:2536675f1748 44 pc.printf("%c", readc); // Rückgabe jedes Buchstabens
EliasN 0:2536675f1748 45 str += readc;
EliasN 0:2536675f1748 46 }
EliasN 0:2536675f1748 47 pc.printf("\n");
EliasN 0:2536675f1748 48 return str;
EliasN 0:2536675f1748 49 }
EliasN 0:2536675f1748 50
EliasN 0:2536675f1748 51 int main()
EliasN 0:2536675f1748 52 {
EliasN 0:2536675f1748 53 pc.printf("Hello world!\n");
EliasN 0:2536675f1748 54
EliasN 0:2536675f1748 55 unsigned int col = 0xff0000; // Standardfarbe = rot
EliasN 0:2536675f1748 56 string s;
EliasN 0:2536675f1748 57 while (true) {
EliasN 0:2536675f1748 58 char c = pc.getc(); // Charakter lesen
EliasN 0:2536675f1748 59 pc.printf("-> %c\n", c);
EliasN 0:2536675f1748 60
EliasN 0:2536675f1748 61 switch (c) {
EliasN 0:2536675f1748 62 case '1': // Erste LED schalten
EliasN 0:2536675f1748 63 toggleCol(0, col);
EliasN 0:2536675f1748 64 break;
EliasN 0:2536675f1748 65 case '2': // Zweite LED schalten
EliasN 0:2536675f1748 66 toggleCol(1, col);
EliasN 0:2536675f1748 67 break;
EliasN 0:2536675f1748 68 case '3': // Dritte LED schalten
EliasN 0:2536675f1748 69 toggleCol(2, col);
EliasN 0:2536675f1748 70 break;
EliasN 0:2536675f1748 71 case 's': // Farbe ändern
EliasN 0:2536675f1748 72 s = readString("R"); // Rot einlesen
EliasN 0:2536675f1748 73 col = atoi(s.c_str()) * 256 * 256; // String in integer wandeln
EliasN 0:2536675f1748 74
EliasN 0:2536675f1748 75 s = readString("G"); // Grün einlesen
EliasN 0:2536675f1748 76 col += atoi(s.c_str()) * 256;
EliasN 0:2536675f1748 77
EliasN 0:2536675f1748 78 s = readString("B"); // Blau einlesen
EliasN 0:2536675f1748 79 col += atoi(s.c_str());
EliasN 0:2536675f1748 80
EliasN 0:2536675f1748 81 pc.printf("Success!\n");
EliasN 0:2536675f1748 82 break;
EliasN 0:2536675f1748 83 default:
EliasN 0:2536675f1748 84 pc.printf("Unbekannter Befehl!\n");
EliasN 0:2536675f1748 85 break;
EliasN 0:2536675f1748 86 }
EliasN 0:2536675f1748 87 }
EliasN 0:2536675f1748 88 }