Hallo,
es funktioniert. Musste nur noch die beiden runden Klammern nach dem "if" einfügen. Hab vielen Dank für Deine Hilfe![]()
Andi
Hallo,
es funktioniert. Musste nur noch die beiden runden Klammern nach dem "if" einfügen. Hab vielen Dank für Deine Hilfe![]()
Andi
Hallo,
möchte hier nochmal nachhaken. Der Sketch funktioniert, dass hatte ich schon geschrieben. Nochmals danke für die Hilfe.
Im Moment arbeitet das so, dass die Einschaltsequenz dann startet, wenn ich den Button drücke. Wenn ich denselben Button dann nochmals drücke, schaltet sich das wieder entsprechend der vorgemerkten Einstellungen aus (Ausschaltsequenz).
Was muss ich ändern im Sketch, wenn ich folgende Funktion möchte:
Die Einschaltsequenz soll starten, sobald der Arduino mit Strom versorgt wird, bzw. 5 Sekunden, nachdem der Arduino mit dem Strom verbunden wurde, soll die Einschaltsequenz automatisch starten, ohne dass ich also den "Start"-Button drücken muss. Das Ausschalten soll dann jedoch wieder geregelt als Ausschaltsequenz über den Button erfolgen.
Geht das?
Andi
Die Einschaltsequenz und Verzögerung vor dem loop einfügen.
Ich würde es etwas anders machen. Auch wenn es so funktioniert.
Ich würde es mit Switch Case machen. Es ist so leichter wartbar bzw änderbar.
Mfg Hannes
Danke für die Antworten. Ich hab es vor dem Loop eingesetzt (Switch/Case... soweit bin ich noch nicht). Das sieht dann so aus:
__________________________________________________ ____
int button = 2;
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int status = false;
void setup()
{
pinMode(button, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
delay(5000);
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led3, HIGH);
delay(1000);
digitalWrite(led4, HIGH);
delay(1000);
digitalWrite(led5, HIGH);
}
void loop()
{
if (digitalRead(button) == true)
{
status = !status;
if (status == true)
{
delay(1000);
digitalWrite(led1, status);
delay(1000);
digitalWrite(led2, status);
delay(1000);
digitalWrite(led3, status);
delay(1000);
digitalWrite(led4, status);
delay(1000);
digitalWrite(led5, status);
}
else
{
delay(1000);
digitalWrite(led5, LOW);
delay(500);
digitalWrite(led3, LOW);
delay(500);
digitalWrite(led4, LOW);
delay(500);
digitalWrite(led2, LOW);
delay(500);
digitalWrite(led1, LOW);
}
}
while(digitalRead(button) == true);
delay(50);
}
__________________________________________________ ____
(sorry, ich finde wieder mal nicht das Symbol für "Code-Einfügen", deshalb nur per Linie optisch abgegrenzt)
Nun schaltet das zwar an wie gewünscht (5 Sek nach Stromzufuhr), aber ich kann es nicht mehr ausschalten. Wo muss ich da ansetzen?
Andi
Wenn du einen Code einfügen willst, schreibst du vor dem Code einfach [ c o d e ] und nach dem Code [ / c o d e ] (Leerzeichen entfernen).
Dann sieh es so aus.
Der Switch Befehl ist relativ einfach.Code:Hier steht dein Code
Du benötigst eine Zählvariable (Integer), mehr nicht.
Ich habe in der Arduino Referenz geschaut wie es funktioniert (Verwende das Atmel Studio und nicht die Arduino IDE).
https://www.arduino.cc/reference/de/...re/switchcase/
Aber im Prinzip schaut die Schleife so aus:
Der Default Zweig sollte immer eingefügt werden. Der Default Zweig wird immer verwendet, wenn es für den aktuellen Wert der Zählvariable keinen Case gibt.Code:switch (Zählvariable) { case 0: // Statement(s) digitalWrite(led1, HIGH); delay(1000); // Wichtig: Die Zählvariable muss auf den nächsten Wert geschalten werden Zählvariable = 1; break; case 1: // Statement(s) digitalWrite(led2, HIGH); delay(1000); // Wichtig: Die Zählvariable muss auf den nächsten Wert geschalten werden Zählvariable = 2; break; ................. ................. ................. default: // Statement(s) break; // Wird nicht benötigt, wenn Statement(s) vorhanden sind }
Also wenn du im oberen Beispiel z.B. "3" schreibst.
Ich habe oben nur 2 Cases geschrieben, du musst es noch erweitern.
Wenn der Ein- Ausschaltvorgang unterschiedlich sein soll, benötigst du 2 Switch Case Strukturen.
Was du bei der Switch Case Anweisung wissen musst ist, das immer der Case bearbeitet wird und danach unter dem Case weiterläuft. Das steht aber in dem Link.
Die Zählvariable zählst du einfach hoch oder runter. Je nachdem ob du Ein- oder Aus schaltest.
Wenn du Hilfe benötigst helfe ich gerne weiter.
Warum dein Programm nicht funktioniert weiß ich nicht.
Du könntest aber versuchen statt
"status = !status" in
"status = ~status" zu ändern.
Edit: Was ich an der Arduino IDE richtig sch..... finde ist, das es nicht einmal einen Simulator gibt. Bei dem Atmel Studio ist das schon eine richtig gute Funktion. Wenn man einen Debugger hat, ist das natürlich viel besser, den gibt es aber in der Arduino IDE ebenfalls nicht.
MfG Hannes
Geändert von 021aet04 (28.05.2022 um 16:54 Uhr)
Danke
Diesen Artikel zu Switch/Case hatte ich mir schon angeschaut nach Deiner ersten Antwort. Dazu gibt es auch Videos in YT, eines fand ich ganz aufschlussreich. Ich melde mich wieder, sobald ich damit weitergekommen bin.
Nochmals Danke.
Andi
Lesezeichen