@haiflosse: Anmerkungen zum Arduino-Code:
Im Gegensatz zu der Beschreibung im Beitrag ist das kein C sondern C++.
Kommentare sollten korrekt sein, weil der Leser sonst nicht weiss wer ”lügt”, der Code oder der Kommentar. Und wenn diese Inkonsistenzen häufig genug vorkommen, dann kann man sich Kommentare komplett sparen, weil der Leser anfängt sie zu ignorieren, wenn er gelernt hat, dass man ihnen nicht vertrauen kann, und sowieso immer im Code nachvollziehen muss was tatsächlich passiert.
Im Code betrifft das drei Viertel der Kommentare, nämlich den zweiten, dritten und vierten. Bei den ersten beiden wird die LED nicht auf Rot bzw. Blau gesetzt, sondern *ausgeschaltet* und beim vierten auf Blau und nicht auf Rot.
Am besten schreibt man den Code so, dass man keine Kommentare braucht. Zum Beispiel in dem man für ”magische” Zahlen Konstanten definiert. Im vorliegenden Code könnte man beispielsweise für die LED-Nummern Konstanten definieren an denen der Leser leicht ablesen kann ob es sich um die rechte oder linke LED handelt. Schon braucht man das nicht mehr zu kommentieren.
Code: Alles auswählen
#include <MeMCore.h>
#define RIGHT_LED_INDEX 0
#define LEFT_LED_INDEX 1
MeRGBLed leds;
void setup()
{
leds.setpin(13);
}
void loop()
{
leds.setColorAt(RIGHT_LED_INDEX, 0, 0, 255); // Set to Blue.
leds.setColorAt(LEFT_LED_INDEX, 0, 0, 0); // Set to Black.
leds.show();
delay(500);
leds.setColorAt(RIGHT_LED_INDEX, 0, 0, 0); // Set to Black.
leds.setColorAt(LEFT_LED_INDEX, 0, 0, 255); // Set to Blue.
leds.show();
delay(500);
}
Für die Farben kann man sich eine Datenstruktur definieren und konstante, nach den Farben benannte Werte, und eine Funktion die LED-Nummer und eine Farbstruktur entgegeben nimmt. Dann kann man sich den Rest des Kommentars wo die Farbe drin steht, auch noch sparen.
Code: Alles auswählen
#include <MeMCore.h>
#define RIGHT_LED_INDEX 0
#define LEFT_LED_INDEX 1
struct Color { uint8_t red, green, blue; };
static const Color BLACK = {0, 0, 0};
static const Color BLUE = {0, 0, 255};
MeRGBLed leds;
void setup()
{
leds.setpin(13);
}
static bool setLEDColor(uint8_t index, Color color)
{
return leds.setColorAt(index, color.red, color.green, color.blue);
}
void loop()
{
setLEDColor(RIGHT_LED_INDEX, BLUE);
setLEDColor(LEFT_LED_INDEX, BLACK);
leds.show();
delay(500);
setLEDColor(RIGHT_LED_INDEX, BLACK);
setLEDColor(LEFT_LED_INDEX, BLUE);
leds.show();
delay(500);
}
Jetzt könnte man die Wiederholung von fast identischem Code in `loop()` noch durch eine Funktion beseitigen:
Code: Alles auswählen
#include <MeMCore.h>
#define RIGHT_LED_INDEX 0
#define LEFT_LED_INDEX 1
struct Color { uint8_t red, green, blue; };
static Color BLACK = {0, 0, 0};
static Color BLUE = {0, 0, 255};
MeRGBLed leds;
void setup()
{
leds.setpin(13);
}
static bool setLEDColor(uint8_t index, Color color)
{
return leds.setColorAt(index, color.red, color.green, color.blue);
}
void showLEDColors(Color right, Color left)
{
setLEDColor(RIGHT_LED_INDEX, right);
setLEDColor(LEFT_LED_INDEX, left);
leds.show();
delay(500);
}
void loop()
{
showLEDColors(BLUE, BLACK);
showLEDColors(BLACK, BLUE);
}