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;
}
}
}