Variablen Wert weiterführen

Hallo !

Mein Problem ist folgendes das ich nach einer Zeitfunktion if(millis() - temps1 >= 1300) eine Variable "lauf1" von dem Wert true auf false umschalte. Mit dem umschalten auf false möchte ich eine weitere Funktion ausführen lassen, aber hier liegt das Problem.

Denn wenn ich mir den Status der Variable im Monitor ansehe bekomme ich folgendes Muster:

11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110

Ich bräuchte aber das das der 0er weitergetrieben wird das ich meine Funktion vorsetzen könnte. Oder das man den Wert 1 oder 0 in eine Variable speichert und mit dieser dann weiter macht? Ich habe schon ein paar Sachen probiert aber bekomme es einfach nicht hin.

unsigned long temps1 = millis();

const int pinSchalterStellung6 = 13; //22
const int pinSchalterStellung5 = 12; //23
const int pinSchalterStellung4 = 11; //24
const int pinSchalterStellung3 = 10; //25
const int pinSchalterStellung2 = 9; //26
const int pinSchalterStellung1 = 8; //27

const int pinLed1 = 22; //Grün46
const int pinLed2 = 23; //Grün47
const int pinLed3 = 24; //Grün48
const int pinLed4 = 25; //Grün49
const int pinLed5 = 26; //Grün50
const int pinLed6 = 28;

float stufe;
int state;


void setup ()
{
  pinMode(pinSchalterStellung6,INPUT_PULLUP);
  pinMode(pinSchalterStellung5,INPUT_PULLUP);
  pinMode(pinSchalterStellung4,INPUT_PULLUP);
  pinMode(pinSchalterStellung3,INPUT_PULLUP);
  pinMode(pinSchalterStellung2,INPUT_PULLUP);
  pinMode(pinSchalterStellung1,INPUT_PULLUP);
  
  pinMode(pinLed1,OUTPUT);
  pinMode(pinLed2,OUTPUT); 
  pinMode(pinLed3,OUTPUT); 
  pinMode(pinLed4,OUTPUT); 
  pinMode(pinLed5,OUTPUT); 
  pinMode(pinLed5,OUTPUT);
  pinMode(pinLed6,OUTPUT);

  Serial.begin(9600);
  
}
 void loop()
 {

   static bool fertig1;
   static bool lauf1;

 if(digitalRead(pinSchalterStellung5) == LOW && !fertig1)
   {
    lauf1 = true;
    Serial.print(lauf1);
    delay(10);
    
    digitalWrite(pinLed1,LOW);
    digitalWrite(pinLed2,LOW);
    digitalWrite(pinLed3,LOW);
    digitalWrite(pinLed4,LOW);
    digitalWrite(pinLed5,LOW);
    digitalWrite(pinLed6,LOW);
    
    digitalWrite(pinLed1,HIGH);
    digitalWrite(pinLed2,HIGH);  
    digitalWrite(pinLed3,HIGH);
    digitalWrite(pinLed4,HIGH);
    digitalWrite(pinLed5,HIGH);
   
     if(millis() - temps1 >= 1300)
     {
      fertig1 = true;
      
      Serial.print(lauf1);
      delay(10);
      
      digitalWrite(pinLed1,LOW);
      digitalWrite(pinLed2,LOW);
      digitalWrite(pinLed3,LOW);
      digitalWrite(pinLed4,LOW);
      digitalWrite(pinLed5,LOW);
      temps1 = millis();
   
      lauf1 = false;
      Serial.print(lauf1);
      delay(10);
       }
     }
   if (digitalRead(pinSchalterStellung5) == HIGH) {    
       fertig1 = false;
       temps1 = millis();
       delay(10);
   }
}

LG

Was auch immer du willst, ich verstehs nicht. Aber die Ausgabe stimmt mit dem Programm überein.

Was sollen deine ganzen LEDs und Schalter/Taster denn tun?
Erkläre mal bitte den gewünschten Ablauf...

Speedcore016:
Mein Problem ist folgendes ...

Was auch immer Du möchtest, ich kapier‘s auch nicht.

Könntest Du das nochmal verständlich beschreiben?

Gruß

Gregor

Das was ich hier rauskopiert habe ist nur ein Teil meines ganzen Programmes. Ich will mit den Drehschalter gewisse LEDS am Ausgang sichtbar machen und nach einer Zeit wieder abschalten. Das macht das Programm bereits erfolgreich.

Aber ich will während noch die Leds an sind den Wert 1 in einer Variable speichern und wenn sie aus sind den Wert 0 in eine Variable. Und mit diesem 0 Wert dieser Variable dann möchte ich weiter machen.

Das heißt wenn diese Variable auf 1 ist will ich etwas blockieren und erst wenn sie auf 0 ist wieder fortfahren

Blockieren ist schon mal der falsche Weg. Entweder führt man etwas aus oder nicht. Das geht mit einer if-Abfrage

Und statt einen int mit 0/1 nimmt man da eher einen bool(ean). Der kann nur true oder false sein

Blockieren ist schon mal der falsche Weg.

Verriegeln!
Ich glaube verriegeln ist das richtige Wort.

Ja. Das verwende ich auch öfters dafür :slight_smile:

Ich glaube, dass, was du willst, passiert schon, du siehst es nur nicht.

Dein Pfad

if(millis() - temps1 >= 1300)
...
      temps1 = millis();

wird genau einmal durchlaufen. Dabei wird lauf1 auf false gesetzt und ausgegeben.
Deshalb siehst du nur eine Null.
Setze doch mal den Befehl "Serial.print(lauf1);" direkt in die loop, dann siehst du mehr.