BERTL17 WS2812B Test

Dependencies:   mbed WS2812 PixelArray

main.cpp

Committer:
EliasN
Date:
2019-03-29
Revision:
0:2536675f1748
Child:
1:c2876522bf56

File content as of revision 0:2536675f1748:

#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 letzen 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öhren 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);
        
        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
                
                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;
        }
    }
}