Greifi55:
Ich komme nicht klar. Morgen kommt mein Sohn der kann das.
Wenn Du nur ganz einfach sequentiell nacheinander mit delay schalten möchtest, kannst Du es einfach mit beiliegendem Code machen. In der loop wird ein Button abgefragt (und dabei entprellt), wenn der Button gedrückt wird, startet das Schaltprogramm.
// Pin definieren, an dem der Tastschalter angeschlossen wird
#define BUTTONPIN 2
#define DEBOUNCETIME 10
// Pins definieren, an die die LEDs angeschlossen werden
byte ledPins[]={3,5,9,12,13};
void LEDsSchalten()
{
// Einschalten der 5 LEDs mit verschiedenen Pausen dazwischen
digitalWrite(ledPins[0], HIGH); // Erste LED ein
delay(1000);
digitalWrite(ledPins[1], HIGH); // Zweite LED ein
delay(1500);
digitalWrite(ledPins[2], HIGH); // Dritte LED ein
delay(2000);
digitalWrite(ledPins[3], HIGH); // Vierte LED ein
delay(3000);
digitalWrite(ledPins[4], HIGH); // Fünfte LED ein
delay(15000); // 15 Sekunden alles an lassen
// Ausschalten der 5 LEDs mit verschiedenen Pausen dazwischen
digitalWrite(ledPins[4], LOW); // Fünfte LED aus
delay(3000);
digitalWrite(ledPins[3], LOW); // Vierte LED aus
delay(2000);
digitalWrite(ledPins[2], LOW); // Dritte LED aus
delay(1500);
digitalWrite(ledPins[1], LOW); // Zweite LED aus
delay(1000);
digitalWrite(ledPins[0], LOW); // Erste LED ein
// Schaltsequenz beendet, wieder zurück zur loop-Funktion
}
boolean buttonPressed()
{
// einen "high active" geschalteten Button an BUTTONPIN abfragen
// liefert "true" nach Statusänderung von nicht gerdrückt zu gedrückt
// liefert false sonst
static boolean buttonFired;
static long buttonDownSince;
boolean State=digitalRead(BUTTONPIN);
if (State==LOW)
{ // this button is not pressed at this time
buttonFired=false;
buttonDownSince=0;
}
else if (State==HIGH && buttonDownSince==0)
{ // button is pressed but DEBOUNCETIME did not yet started counting
buttonFired=false;
buttonDownSince=millis();
}
if (State==HIGH && millis()-buttonDownSince>=DEBOUNCETIME && buttonFired==false)
{ // button is pressed and DEBOUNCETIME passed, so fire the button
buttonFired=true;
return(true); // return pin number of button
}
return(false); // no button fired this time, return invalid pin number
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
// Button auf INPUT setzen
pinMode(BUTTONPIN, INPUT);
// LED Ausgänge auf OUTPUT setzen
for (int i=0;i<sizeof(ledPins);i++)
pinMode(ledPins[i],OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if (buttonPressed()) LEDsSchalten();
}
ABER: Der Controller kann innerhalb der Schaltsquenz nichts anderes machen! Also insbesondere kann die Schaltsequenz nicht abgebrochen werden (außer durch Ziehen des Steckers oder Reset).
Wenn die Schaltsequenz abbrechbar sein soll ("Not-Aus"), benötigst Du ein komplett anderes und wesentlich komplexeres Design für die Programmschrittsteuerung, so wie sie in Waschmaschinen und Geschirrspüler eingebaut ist. Da kannst Du jederzeit die Aus-Taste drücken und das Gerät geht aus, oder beim Geschirrspüler im laufenden Programm die Tür aufreißen und es findet sofort eine Notfall-Unterbrechung des Spülprogramms statt. Das ist dann nicht so einfach zu realisieren.
BTW: Wenn Du später mal statt der LEDs Relais anschließen möchtest, bitte beachten, dass Relais oft eine vertauschte Logik haben, also "active LOW" sind (Relais schaltet auf LOW).