Arduino
Code
Um ganz einfach zu beginnen nehme ich 3 LEDs in unterschiedlichen Farben.
Wie gesagt, es sind meine Aufzeichnungen, die mir als Notiz helfen. Einfache Sachen.
Ich nutze PIN 12, 8, 7.
Die Widerstände sind je 220 Ohm – 1/4W.
int rot = 12;
int gruen = 8;
int blau = 7;
int wartezeit = 1500;
void roteLed() {
for (int zaehlerRot = 0; zaehlerRot < 5; zaehlerRot++) {
digitalWrite(rot, HIGH);
delay(wartezeit);
digitalWrite(rot, LOW);
delay(wartezeit);
}
}
void grueneLed() {
digitalWrite(gruen, HIGH);
delay(wartezeit);
digitalWrite(gruen, LOW);
delay(wartezeit);
}
void blaueLed() {
digitalWrite(blau, HIGH);
delay(wartezeit);
digitalWrite(blau, LOW);
delay(wartezeit);
}
void setup() {
pinMode(rot, OUTPUT);
pinMode(gruen, OUTPUT);
pinMode(blau, OUTPUT);
}
void loop() {
roteLed();
delay(wartezeit);
grueneLed();
delay(wartezeit);
blaueLed();
delay(wartezeit);
}
Mit int erzeuge ich Variablen vom Typ Ganzzahl (Fließkomma, Buchstaben, … haben ein anderes Kürzel).
Denen gebe ich einen Namen. Dabei habe ich mir angewöhnt, Variablen immer mit einem Kleinbuchstaben zu beginnen, keine Umlaute zu nutzen und bei einem zusammenhängenden Wort das folgende mit einem Großbuchstaben zu beginnen:
lampeGruen
motorRechts
…
Mit dem = weise ich den Wert zu (in diesem Fall eine Ganzzahl).
Befehle schließe ich mit einem ; Semikolon ab.
Eine Funktion beginnt in diesem Fall mit void und dem Namen der Funktion.
Funktionen sind extrem praktisch. Man gibt ihr einen Namen und schreib eine Vielzahl von Befehlen und Abläufen rein, die man später mit dem Funktionsnamen aufrufen kann. Braucht man eine Funktion nur ein mal, dann kann man sich das auch mal sparen. Bei häufiger verwendeten Abläufen ist es aber praktisch und eigentlich auch übersichtlicher.
Innerhalb der geschweiften Klammern kommen die Befehle. Für den Anfang reicht das an Erklärung, da auch in den runden Klammern Dinge stehen können, die momentan aber nicht gebraucht werden.
Die for Schleife besteht aus drei Teilen. Variable, Bedingung der Variablen und Veränderung der Variablen. (Wer Programmieren richtig gelernt hat, der schlägt bei meinen Bezeichnungen die Hände über den Kopf zusammen).
In meinem Fall wird die Variable in der for Schleife in der Klammer erzeugt und mit einem Wert versehen. Das kann man aber auch schon außerhalb machen und dann nur den Variablen-Namen eintragen. Allerdings führt das zu einem anderen Ergebnis. Das sollte man im Vorfeld beachten.
for (int zaehlerRot = 0; zaehlerRot < 5; zaehlerRot++)
oder
int zaehlerRot = 0;
for (zaehlerRot; zaehlerRot < 5; zaehlerRot++)
Ablauf der Version, wo innerhalb der for Schleife deklariert wird:
Rote LED blinkt 5 mal für 1,5 Sekunden mit je Pause von 1,5 Sekunden. Dann die grüne LED für 1,5 Sekunden und anschließend die blaue LED.
Danach wieder die rote LED 5 mal und die grüne und blaue LED je 1 mal. Das immer im loop.
In der Version, wo die Variable außerhalb der for Schleife erzeugt wird, läuft folgendes ab:
Rote LED blinkt 5 mal für je 1,5 Sekunden mit je 1,5 Sekunden Pause dazwischen. Dann geht 1,5 Sekunden später die grüne LED für 1,5 Sekunden an. Anschließend wieder 1,5 Sekunden Pause, bevor die blaue LED für 1,5 Sekunden leuchtet.
Dann ist das Programm fertig und beginnt „vermeintlich“ von vorne.
Grüne LED leuchtet für 1,5 Sekunden, Pause für 1,5 Sekunden und dann leuchtet die blaue LED für 1,5 Sekunden.
Was ist mit der Roten? Warum blinkt sie nicht mehr?
Das hat mit der ausgelagerten Variablen zu tun.
Im zweiten Aufruf wird „nur“ die Funktion roteLed aufgerufen, nicht aber die Variable zuvor. Dadurch hat die Variable noch den Wert 4 aus dem ersten Durchlauf und ist false zur Bedingung zaehlerRot < 5;
Somit wird die Funktion geprüft und für erfüllt beurteilt, weil die Variable nicht mehr kleiner als 5 ist.
Die nächste Funktion ist dann wieder die grüne und blaue LED aufrufen.
Soll die Rote LED auch wieder leuchten, dann müssen wir die Variable zaehlerRot am Ende wieder auf 0 setzen, wie es auf der nächsten Seite mit der WHILE Abfrage getan wird.
int rot = 12;
int gruen = 8;
int blau = 7;
int pause = 1500;
int zaehlerRot = 0;
void roteLed() {
for (zaehlerRot; zaehlerRot < 5; zaehlerRot++) {
digitalWrite(rot, HIGH);
delay(pause);
digitalWrite(rot, LOW);
delay(pause);
}
}
void grueneLed() {
digitalWrite(gruen, HIGH);
delay(pause);
digitalWrite(gruen, LOW);
delay(pause);
}
void blaueLed() {
digitalWrite(blau, HIGH);
delay(pause);
digitalWrite(blau, LOW);
delay(pause);
}
void setup() {
pinMode(rot, OUTPUT);
pinMode(gruen, OUTPUT);
pinMode(blau, OUTPUT);
}
void loop() {
roteLed();
delay(pause);
grueneLed();
delay(pause);
blaueLed();
delay(pause);
}