BERTL17 WS2812B Test
Dependencies: mbed WS2812 PixelArray
main.cpp@0:2536675f1748, 2019-03-29 (annotated)
- 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?
User | Revision | Line number | New 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 | } |