BERTL17 WS2812B Test

Dependencies:   mbed WS2812 PixelArray

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002 Name: RGBertil
00003 Beschreibung: WS2812B am Bertl über serielle Schnittstelle kontrollieren
00004 Autor: Elias Nestl
00005 Für: Bulme BERTL17
00006 Klasse: 3BHEL 2018/19
00007 */
00008 
00009 #include "mbed.h"
00010 #include "stdlib.h"
00011 #include "string"
00012 #include "WS2812.h"
00013 #include "PixelArray.h"
00014 
00015 // Anzahl der LEDs
00016 #define WS2812_BUF 3
00017 
00018 // Serielle Verbindung mit PC herstellen
00019 Serial pc(USBTX, USBRX, 9600);
00020 // Buffer mit 3 Pixeln erstellen (vgl. Grafikspeicher einer Grafikkarte)
00021 PixelArray px(WS2812_BUF);
00022 // WS2812 Libraryobjekt erstellen, an P1_22 hängen die LEDs, die letzten 4 Ziffern sind das Timing
00023 WS2812 ws(P1_22, WS2812_BUF, 0, 5, 5, 0);
00024 
00025 // Lesen einer Farbe aus dem Buffer
00026 int getCol(int index) {
00027     return px.getBuf()[index];
00028 }
00029 
00030 // Die Led an "index" auf "color" setzen, "color" im format 0xRRGGBB
00031 void setCol(int index, unsigned int color) {
00032     // Farbe in den Buffer setzen
00033     px.Set(index, color);
00034     // Buffer an LEDs sendern
00035     ws.write(px.getBuf());
00036 }
00037 
00038 // Wie setCol, nur wechselnd (ein wenn aus, aus wenn ein)
00039 void toggleCol(int index, unsigned int color) {
00040     if (getCol(index) == 0) setCol(index, color);
00041     else setCol(index, 0);
00042 }
00043 
00044 // String vom Serial Port lesen
00045 string readString(char * prompt) {
00046     string str = "";
00047     char readc;
00048     pc.printf("%s> ", prompt);
00049     while (true) {
00050         readc = pc.getc(); // Einen Charakter lesen
00051         if (readc == '\r' || readc == '\n') break; // Aufhören zu lesen bei Enter
00052         pc.printf("%c", readc); // Rückgabe jedes Buchstabens
00053         str += readc;
00054     }
00055     pc.printf("\n");
00056     return str;
00057 }
00058 
00059 int main()
00060 {
00061     pc.printf("Hello world!\n");
00062  
00063     unsigned int col = 0xff0000; // Standardfarbe = rot
00064     string s;
00065     while (true) {
00066         char c = pc.getc(); // Charakter lesen
00067         pc.printf("-> %c\n", c); // Gelesenen Charakter ausgeben
00068         
00069         switch (c) {
00070             case '1': // Erste LED schalten
00071                 toggleCol(0, col);
00072                 break;
00073             case '2': // Zweite LED schalten
00074                 toggleCol(1, col);
00075                 break;
00076             case '3': // Dritte LED schalten
00077                 toggleCol(2, col);
00078                 break;
00079             case 's': // Farbe ändern
00080                 s = readString("R"); // Rot einlesen
00081                 col = atoi(s.c_str()) * 256 * 256; // String in integer wandeln und an richtige Stelle bitshiften
00082                 
00083                 s = readString("G"); // Grün einlesen
00084                 col += atoi(s.c_str()) * 256;
00085                 
00086                 s = readString("B"); // Blau einlesen
00087                 col += atoi(s.c_str());
00088                 
00089                 pc.printf("Success!\n");
00090                 break;
00091             default:
00092                 pc.printf("Unbekannter Befehl!\n");
00093                 break;
00094         }
00095     }
00096 }