BERTL17 WS2812B Test
Dependencies: mbed WS2812 PixelArray
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 }
Generated on Wed Jul 13 2022 02:28:22 by 1.7.2