
BERTL17 WS2812B Test
Dependencies: mbed WS2812 PixelArray
main.cpp
- Committer:
- EliasN
- Date:
- 2019-04-04
- Revision:
- 3:8b5336449a8a
- Parent:
- 2:f85e3daacaa0
File content as of revision 3:8b5336449a8a:
/* Name: RGBertil Beschreibung: WS2812B am Bertl über serielle Schnittstelle kontrollieren Autor: Elias Nestl Für: Bulme BERTL17 Klasse: 3BHEL 2018/19 */ #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 letzten 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ören 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); // Gelesenen Charakter ausgeben 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 und an richtige Stelle bitshiften 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; } } }