Inhaltsverzeichnis

Digitaler Adventskranz

In diesem Experiment wird es recht eng auf unserem Steckbrett!

Wir wollen mit vier LEDs einen kleinen Adventskranz bauen. Dazu schliessen wir die LEDs über Vorwiderstände (je 220 Ohm) an die digitalen Ausgänge an. Ausserdem schliessen wir einen Taster über einen Pull-Down-Widerstand als digitalen Eingang an.

Bauteile

Für dieses Experiment benötigst Du die folgenden Bauteile

Aufbau

Adventskranz

Steckbrett Schaltung

Programm

/*
 * Adventskranz
 *
 * 4 leds an PINS 5, 7, 2, 3 (DIG0, 2, 3, 4) über 220 Ohm
 * Button (DIG1) an PIN 6 über Pull-Down 10kOhm (1,5kOhm?)
 *
 * TEIL  DIG  PIN
 * LED1  0    5
 * LED2  2    7
 * LED3  3    2
 * LED4  4    3
 * BTN   1    6
 */
const int LED1 = 0;
const int LED2 = 2;
const int LED3 = 3;
const int LED4 = 4;
const int buttonPin = 1;
 
 
// Variablen können sich ändern:
int buttonState = 0; 
 
// Anzahl der momentan eingeschalteten LEDs
int numLeds = 0;
 
// Die setup-Routine läuft genau einmal nach dem Start:
void setup() {                
  // Den Taster als Eingang belegen:
  pinMode(buttonPin, INPUT);
 
  // Die LED-Pins als Ausgänge belegen:
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);    
  pinMode(LED4, OUTPUT); 
 
  // Erstmal eine LED 4x blinken lassen (Advent!)
  for(int i=0; i<4; i++) {
    digitalWrite(LED2, HIGH);    // Die LED anschalten indem die Spannung HIGH geschaltet wird
    delay(300);                  // 300 msec warten
    digitalWrite(LED2, LOW);     // Die LED ausschalten indem die Spannung LOW geschaltet wird
    delay(200);
  }
 
  // Alle LEDs ausschalten
  digitalWrite(LED1, LOW);    
  digitalWrite(LED2, LOW); 
  digitalWrite(LED3, LOW); 
  digitalWrite(LED4, LOW); 
}
 
// Die loop-Routine läuft für immer:
void loop() {
  // Les den Zustand des Taster-Wertes:
  buttonState = digitalRead(buttonPin);
 
  // Prüfe ob der Taster gedrückt ist.
  // Wenn ja, ist buttonState HIGH:
  if (buttonState == HIGH) {
    // Erhöhe die Zahl der anzuschaltenden LEDs
    numLeds = numLeds + 1;
    // Wenn Zahl größer als 4, setze auf 0 (alle aus)
    if(numLeds>4)
      numLeds = 0;
    // Je nach Anzahl der LEDs
    switch(numLeds)
    {
      // alle aus
      case 0:
        digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW); 
        digitalWrite(LED3, LOW); 
        digitalWrite(LED4, LOW); 
        break;
      // Nr. 1 an
      case 1:
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, LOW); 
        digitalWrite(LED3, LOW); 
        digitalWrite(LED4, LOW); 
        break;
      // Nr.1+2 an
      case 2:
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, HIGH); 
        digitalWrite(LED3, LOW); 
        digitalWrite(LED4, LOW); 
        break;
      // Nrn. 1-3 an
      case 3:
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, HIGH); 
        digitalWrite(LED3, HIGH); 
        digitalWrite(LED4, LOW); 
        break;
      // Nrn. 1-4 an
      case 4:
        digitalWrite(LED1, HIGH);
        digitalWrite(LED2, HIGH); 
        digitalWrite(LED3, HIGH); 
        digitalWrite(LED4, HIGH); 
        break;
    }
  }
 
  delay(1000);   // Warte eine Sekunde
}

Funktion

Wenn alles klappt, blinkt eine LED nach dem einschalten viermal schnell, dann sind erstmal alle LEDs aus.

Drückt man nun den Taster (etwas länger, eine knappe Sekunde), werden nacheinander alle vier LEDs eingeschaltet - Advent Advent ein LEDchen brennt!

Ein weiterer Tastendruck schaltet die LEDs wieder aus.