
Bei dieser Anleitung lernst du ein neues Konzept für die Definition von Konstanten vom Typ int kennen.
enum kann die Definition einer größeren Anzahl Konstanten vom Typ int vereinfachen. Das erste Element erhält den Wert 0, jedes weitere wird um 1 hochgezählt.
Das Beispielprogramm definiert die Wochentage als Aufzählung.
enum Wochentage
{
Sonntag,
Montag,
Dienstag,
Mittwoch,
Donnerstag,
Freitag,
Samstag
};
void setup()
{
Serial.begin(9600);
// Startwert ⇒ Sonntag, Endwert ⇒ Samstag
for (int i = Sonntag; i <= Samstag; i++)
{
Serial.print(i); Serial.print("\t");
}
Serial.println();
Serial.print("So\tMo\tDi\tMi\tDo\tFr\tSa");
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}

Der Startwert des ersten Elements kann auch gesetzt werden:
enum Farben
{
// Startwert setzen
GRUEN = 3,
WEISS,
ROT,
BLAU,
GELB
};
void setup()
{
Serial.begin(9600);
// Startwert ⇒ GRUEN, Endwert ⇒ GELB
for (int i = GRUEN; i <= GELB; i++)
{
Serial.print(i);
Serial.print("\t");
}
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}


Außerdem benötigst du eine Erweiterung der ⇒for-Schleife.
for-Schleifen können mit dem Schlüsselwort break beendet werden:

Beispiel: die for-Schleife wird nach dem Wert 5 beendet.
void setup()
{
Serial.begin(9600);
for (int i = 0; i < 10; i++)
{
Serial.println("Zahl " + String(i));
if (i == 5)
{
Serial.println("Schleife wird nach " + String(i) + " beendet!");
break;
}
}
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}

Benötigte Bauteile:
- 5 LEDs
- 3 Widerstände 220 Ω (gelbe, rote und grüne LED)
- 2 Widerstände 100 Ω (blaue und weiße LED)
- Berührungssensor
- Leitungsdrähte

Beachte die ⇒Vorwiderstände verschiedener LEDs
Baue die Schaltung auf.
(Fahre mit der Maus über das Bild, um die Bezeichnungen der Bauteile zu sehen)
Beim Start des Programms sollen die LEDs nacheinander für 200 Millisekunden nacheinander leuchten. Eine Berührung des Sensors schaltet das Lauflicht aus, die nächste Berührung startet es von Neuem.
Definiere die LEDs als Aufzählung, der Sensor muss zwingend an Pin 2 oder 3 angeschlossen werden. Die Variable, deren Zustand für das Stopp und das Weiter des Lauflichtlichts verantwortlich ist, wird als bool definiert.
enum Farben
{
GRUEN = 3,
WEISS,
ROT,
BLAU,
GELB
};
int SENSOR = 2;
volatile bool Stopp = true;
Im setup-Teil wird der pinMode der LEDs definiert. Der Startwert ist die grüne LED, der Endwert die gelbe LED.
Außerdem wird die Funktion LEDSchalten als Interrupt-Routine definiert. Weil der beim Berühren des Sensors ausgelesenen Wert HIGH ist, reagiert der Interrupt auf RISING.
void setup()
{
// pinMode der LEDs definieren
for (int i = GRUEN; i < GELB; i++)
{
pinMode(i, OUTPUT);
}
// Funktion für das Auslösen des Interrupts definieren
attachInterrupt(digitalPinToInterrupt(SENSOR), LEDSchalten, RISING);
}

Der loop-Teil. Beachte die Kommentare.
void loop()
{
// solange Stopp den Wert true hat
while (Stopp)
{
for (int i = GRUEN; i <= GELB; i++)
{
// aktuelle LED i einschalten
digitalWrite(i, HIGH);
delay(200);
// aktuelle LED i ausschalten
digitalWrite(i, LOW);
// Schleifen-Durchlauf stoppen (break)
// wenn die Variable Stopp den Wert false hat
if (!Stopp) break;
}
}
}
Jetzt benötigst du nur noch
die Funktion LEDSchalten.
Sie tut nichts anderes als den Wert für
Stopp jeweils umzudrehen.
void LEDSchalten()
{
Stopp = !Stopp;
}
Verwandte Anleitungen:
- Interrupt - Lauflicht mit Drehgeber
- Interrupt: Licht ein- und ausschalten
- Interrupt: Licht schalten mit Bewegungsmelder
- Interrupt: Morsegerät
- Interrupt: Farbenspiel mit einem NeoPixel-Ring
- Interrupt: Lauflicht mit Fernbedienung
Letzte Aktualisierung: