ich bin noch ein ziemlicher Neuling in der Programmierung und versuche gerade eine Art Schlummerfunktion zu programmieren, zunächst im Kleinen mit einer LED. Dabei soll die LED am Anfang leuchten und nachdem man den Taster betätigt hat für einen definierten Zeitraum ausgehen bevor sie sich erneut anschaltet und erst nachdem man den Taster ein zweites mal betätigt hat, völlig ausbleiben.
Dabei bin ich bis jetzt soweit, wobei die LED jedoch nur einmal ganz aus geht:
int x=0;
int pinlrot=5;
bool rot=true;
int stat1;
int schaltr=9;
long Los;
long Start;
void setup() {
Serial.begin(9600);
pinMode(schaltr,INPUT_PULLUP);
pinMode(pinlrot,OUTPUT);
}
void loop() {
stat1=digitalRead(schaltr);
//---------------------------------------------------------
if(rot==true){
digitalWrite(pinlrot, HIGH);
}
if(rot==false){
digitalWrite(pinlrot, LOW);
}
//---------------------------------------------------------
Los=millis();
if((stat1==HIGH)&&(x==0))
{
Start=millis();
rot=false;
if(Los-Start>1000){
rot=true;
x=1;
}
}
if((stat1==HIGH)&&(x==1)){
rot=false;
Start=millis();
x=2
}
}
Hallo bukzi
Das Zauberwort lautet "Schrittkette".
Die Schrittkette durchläuft die von dir aufgeführten Schritte. Diese ist formuliert in einer Switch/Case Struktur und kann die folgenden Schritte durchlaufen:
Ich denke, vor größeren Umbauten am Sketch (Bravo - Lob - erster Beitrag und kein delay() drin!!!) ist noch ein klitzekleines anderes Problem mit großer Auswirkung zu beseitigen:
Bei jedem Durchlauf der loop() wird rot gesetzt.
Eigentlich sollte das doch bestimmt weiter unten aufgrund der Werte von stat1 und x passieren (die genaue Logik habe ich mir noch nicht zu Gemüte geführt).
In anderen Worten: Alles was da unten gerechnet und geschaltet wird ist für die Katz.
...
rot = true;
//---------------------------------------------------------
if (rot == true)
{
// HIER kommt das Programm immer hin!
...
Hallo
Hast du dich zum Thema Schrittkette oder Finite State Machine eingelesen?
Die Programmierung einer Schrittkette oder Finite State Machine wird durch die Verwendung der SWITCH/CASE Anweisung unterstützt.