If schleife verzögerung

hey hi

ich hab mir eine Schiebetür gebaut nun habe ich das Problem das der Sensor immer nach 3 sek aus geht und die tür sich schließt hier hätte ich gerne ein timer der erst wen 7 sekunden der status auf 0 ist die Tür schließt und jedes mal wen status 1 ist der timer wieder auf 0 geht

geht um diesen abschnit

Sammy = digitalRead(10);   //anfang 
     Serial.println(Sammy,DEC);
     if (Sammy == 0)             // hier muss ein teimer hin 7 sekunden reset wen sammy auf 1 ist
    {if(Status == 2) {

hier der ganze code

#define EN        8       
#define X_DIR     5           
#define X_STP     2       
 int Sammy;
 int Status;


 
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{digitalWrite(dirPin, dir);
  delay(0);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(130 -i/110);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(130-i/110); }}
void step2(boolean dir, byte dirPin, byte stepperPin, int steps)
{digitalWrite(dirPin, dir);
  delay(0);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(35+i/120);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(35+i/120); }}
void step3(boolean dir, byte dirPin, byte stepperPin, int steps)
{digitalWrite(dirPin, dir);
  delay(0);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(31);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(31); }}
    void step6(boolean dir, byte dirPin, byte stepperPin, int steps)
    {digitalWrite(dirPin, dir);
  delay(0);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(150-i/100);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(150-i/100); }}
void step5(boolean dir, byte dirPin, byte stepperPin, int steps)
{digitalWrite(dirPin, dir);
  delay(0);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(44);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(44); }}
void step1(boolean dir, byte dirPin, byte stepperPin, int steps)
{digitalWrite(dirPin, dir);
  delay(0);
  for (int i = 0; i < steps; i++) {
    digitalWrite(stepperPin, HIGH);
    delayMicroseconds(20+i/100);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(20+i/100); }}



void setup(){
    Serial.begin(9600);
    pinMode(12,INPUT);    //taster innen
    pinMode(13,OUTPUT);   // led
    pinMode(10,INPUT);    // bewegungsmelder
    pinMode(11,INPUT);    //taster außen 
  pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
  pinMode(EN, OUTPUT);
  digitalWrite(EN, HIGH);
  digitalWrite(13, LOW );
}






//öffnen per taster außen

void loop(){
Sammy = digitalRead(11);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 0){
  digitalWrite(13, HIGH );
  delay(50);
  digitalWrite(EN, LOW);
  delay(50);
   step(false, X_DIR, X_STP, 12000);  
  step3(false, X_DIR, X_STP, 21000);  
  step1(false, X_DIR, X_STP, 12000); 
  delay(1000);
  digitalWrite(EN, HIGH);
  digitalWrite(13, HIGH );
  Status = 1;}}

  

Sammy = digitalRead(11);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 1){
     digitalWrite(13, LOW );delay(220);digitalWrite(13, HIGH );delay(210); digitalWrite(13, LOW );delay(200);digitalWrite(13, HIGH );delay(190);
     digitalWrite(13, LOW );delay(180);digitalWrite(13, HIGH ); delay(170);digitalWrite(13, LOW );delay(160); digitalWrite(13, HIGH );delay(150);digitalWrite(13, LOW );
     delay(140);digitalWrite(13, HIGH );delay(130);digitalWrite(13, LOW );delay(120);digitalWrite(13, HIGH );delay(110);digitalWrite(13, LOW ); 
     delay(100);digitalWrite(13, HIGH );delay(90);digitalWrite(13, LOW );delay(80);digitalWrite(13, HIGH );delay(70);digitalWrite(13, LOW );
     delay(60);digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(30);digitalWrite(13, LOW );
     delay(20);digitalWrite(13, HIGH );delay(10);digitalWrite(13, LOW );delay(9);digitalWrite(13, HIGH );delay(8); digitalWrite(13, LOW );
     delay(7);digitalWrite(13, HIGH );delay(6);digitalWrite(13, LOW );delay(5);digitalWrite(13, HIGH );delay(4);digitalWrite(13, LOW );
     delay(3);digitalWrite(13, HIGH );delay(2);digitalWrite(13, LOW );delay(1);digitalWrite(13, HIGH );delay(1);digitalWrite(13, LOW );
  digitalWrite(EN, LOW);
  delay(50);
  step6(true, X_DIR, X_STP, 12000);  
  step5(true, X_DIR, X_STP, 21000);  
  step2(true, X_DIR, X_STP, 12000);
  delay(1000);
  digitalWrite(EN, HIGH);
  Status = 4 ;}}


Sammy = digitalRead(11);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 2){
     digitalWrite(13, LOW );delay(50);digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );
     delay(1000);
     Status = 1;}}

     
Sammy = digitalRead(11);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 4){
     digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(30);digitalWrite(13, LOW );
     delay(1000);
     Status = 0;}}



//ab hier der sensor

Sammy = digitalRead(10);
     Serial.println(Sammy,DEC);
     if (Sammy == 1){
     if(Status == 0){
  digitalWrite(13, HIGH );
  delay(50);
  digitalWrite(EN, LOW);
  delay(50);
  step(false,  X_DIR, X_STP, 12000);  
  step3(false, X_DIR, X_STP, 21000);  
  step1(false, X_DIR, X_STP, 12000); 
  delay(1000);
  digitalWrite(EN, HIGH);
  Status = 2 ; }}






Sammy = digitalRead(10);   //anfang 
     Serial.println(Sammy,DEC);
     if (Sammy == 0)             // hier muss ein teimer hin 7 sekunden reset wen sammy auf 1 ist
    {if(Status == 2)
    {digitalWrite(13, LOW );delay(220);digitalWrite(13, HIGH );delay(210); digitalWrite(13, LOW );delay(200);digitalWrite(13, HIGH );delay(190);
     digitalWrite(13, LOW );delay(180);digitalWrite(13, HIGH ); delay(170);digitalWrite(13, LOW );delay(160); digitalWrite(13, HIGH );delay(150);digitalWrite(13, LOW );
     delay(140);digitalWrite(13, HIGH );delay(130);digitalWrite(13, LOW );delay(120);digitalWrite(13, HIGH );delay(110);digitalWrite(13, LOW ); 
     delay(100);digitalWrite(13, HIGH );delay(90);digitalWrite(13, LOW );delay(80);digitalWrite(13, HIGH );delay(70);digitalWrite(13, LOW );
     delay(60);digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(30);digitalWrite(13, LOW );
     delay(20);digitalWrite(13, HIGH );delay(10);digitalWrite(13, LOW );delay(9);digitalWrite(13, HIGH );delay(8); digitalWrite(13, LOW );
     delay(7);digitalWrite(13, HIGH );delay(6);digitalWrite(13, LOW );delay(5);digitalWrite(13, HIGH );delay(4);digitalWrite(13, LOW );
     delay(3);digitalWrite(13, HIGH );delay(2);digitalWrite(13, LOW );delay(1);digitalWrite(13, HIGH );delay(1);digitalWrite(13, LOW );
  digitalWrite(EN, LOW);
  delay(50);
  step6(true, X_DIR, X_STP, 12000);  
  step5(true, X_DIR, X_STP, 21000);  
  step2(true, X_DIR, X_STP, 12000);
  delay(1000);
  digitalWrite(EN, HIGH);
  digitalWrite(13, LOW );
  Status = 0 ;}}



Sammy = digitalRead(10);
     Serial.println(Sammy,DEC);
     if (Sammy == 1)
    {if(Status == 1)
    {   if (millis() % 1000 > 200)
    {
     digitalWrite(13, LOW );
     } else {
     digitalWrite(13, HIGH );
     
        
     }
     }
     }


//ab hier ist alles taster innen

Sammy = digitalRead(12);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 2){
     digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );
     delay(1000);
     Status = 1;}}



Sammy = digitalRead(12);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 3){
     digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(30);digitalWrite(13, LOW );
     delay(1000);
     Status = 0;}}


   
Sammy = digitalRead(12);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 0){
  digitalWrite(13, HIGH );
  delay(50);
  digitalWrite(EN, LOW);
  delay(50);
   step(false, X_DIR, X_STP, 12000);  
  step3(false, X_DIR, X_STP, 21000);  
  step1(false, X_DIR, X_STP, 12000); 
  delay(1000);
  digitalWrite(EN, HIGH);
  digitalWrite(13, HIGH );
  Status = 1;}}



Sammy = digitalRead(12);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 1){
     digitalWrite(13, LOW );delay(220);digitalWrite(13, HIGH );delay(210); digitalWrite(13, LOW );delay(200);digitalWrite(13, HIGH );delay(190);
     digitalWrite(13, LOW );delay(180);digitalWrite(13, HIGH ); delay(170);digitalWrite(13, LOW );delay(160); digitalWrite(13, HIGH );delay(150);digitalWrite(13, LOW );
     delay(140);digitalWrite(13, HIGH );delay(130);digitalWrite(13, LOW );delay(120);digitalWrite(13, HIGH );delay(110);digitalWrite(13, LOW ); 
     delay(100);digitalWrite(13, HIGH );delay(90);digitalWrite(13, LOW );delay(80);digitalWrite(13, HIGH );delay(70);digitalWrite(13, LOW );
     delay(60);digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(30);digitalWrite(13, LOW );
     delay(20);digitalWrite(13, HIGH );delay(10);digitalWrite(13, LOW );delay(9);digitalWrite(13, HIGH );delay(8); digitalWrite(13, LOW );
     delay(7);digitalWrite(13, HIGH );delay(6);digitalWrite(13, LOW );delay(5);digitalWrite(13, HIGH );delay(4);digitalWrite(13, LOW );
     delay(3);digitalWrite(13, HIGH );delay(2);digitalWrite(13, LOW );delay(1);digitalWrite(13, HIGH );delay(1);digitalWrite(13, LOW );
  digitalWrite(EN, LOW);
  delay(50);
  step6(true, X_DIR, X_STP, 12000);  
  step5(true, X_DIR, X_STP, 21000);  
  step2(true, X_DIR, X_STP, 12000);
  delay(1000);
  digitalWrite(EN, HIGH);
  Status = 3 ;}}



  Sammy = digitalRead(12);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 4){
     digitalWrite(13, HIGH );delay(50);digitalWrite(13, LOW );delay(40);digitalWrite(13, HIGH );delay(30);digitalWrite(13, LOW );
     delay(1000);
     Status = 0;}}
    
}

Den Code tut sich keiner an, unübersichtlich, keine Einrückungen. Pack den bitte in Codetags, die sehen so aus </>
Das geht auch noch jetzt.

Was macht der Sketch noch außer eine Schiebetür zu steuern ?

Allerdings möchte ich dir einen Tipp geben.
Schmeiß die ganzen delay() raus und verwende dafür die Funktion mit millis.
Sieh dir dazu das Beispiel "BlinkWithoutDelay" an und baue deinen Bandwurmsketch damit auf.
Um weiterhin Hilfe zu erhalten, solltest du deinen Sketch mit guten Kommentaren versehen, damit aussenstehede auch erkennen können, was der machen soll.
Alles andere wurde zum Sketch ja schon geschrieben.

Er schaltet eine LED leiste an wen die Tür öffnet blinkt vorm schließen und geht aus. Die beiden Taster weckselnd den Status auf 3 2oder 4 um und setzen den sensor ausser Funktion.

Das eigentliche Problem ist das der sensor 3 sek oder 1 bis 5 Minuten einzustellen ist und der repeater Modus im 3 sek tak nicht funktioniert.

Dann zeige mal den Sketch gut kommentiert und formatiert mit CTRL T im IDE und hier in Codetags "</>" reinkopiert.

Was noch auffällt, es gibt keine if-Schleifen.

Na klar gibt´s die :nerd_face:

static bool fridayAfternoon;
  NotFridayAfternoon: if(fridayAfternoon^1) goto NotFridayAfternoon;

:rofl: :rofl: :rofl:

Vorab: Bitte lesen! Wie man dieses Forum benutzt - bitte lesen
Da ist erklärt, wie Du den Code richtig einbaust.
Das kannst Du auch noch jetzt ändern.

Dann ist Dein Konzept falsch.

Also Deine ganzen delays sind verwirrend und warum delay(0);?

Aber egal.
Vieleicht sowas hier?

bool Sammy = false;
bool sammyMerker = false;
unsigned long lastmillis = 0;
const unsigned long timer = 7000; // Zeit in ms
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));;
}

void loop()
{
  Sammy = digitalRead(10); //anfang
  if (!Sammy)
  {
    if (!sammyMerker) // hier muss ein teimer hin 7 sekunden reset wen sammy auf 1 ist
    {
      sammyMerker = true;
      lastmillis = millis();
      Serial.println(F("Starte Timer!"));
    }
    else
    {
      if (millis() - lastmillis >= timer)
      {
        Serial.println(F("Timer ist abgelaufen!"));
        sammyMerker = false;
      }
    }
  }
  else
  {
    if (sammyMerker)
    {
      Serial.println(F("Reset des Merker ohne Zeitablauf"));
      sammyMerker = false;
    }
  }
}

ok super werd es mal versuchen umzusetzen hab leider so gut wie keine Ahnung davon sollte alles ein freund machen naja nu versuche ich selbst seid 4 Wochen.

Also Deine ganzen delays sind verwirrend und warum delay(0);? verstehe die frage nicht was soll ich sonst schreiben wen ich eine pause will?

delay(0); würde eine Pause von 0 Millisekunden machen. Es macht also keine Pause. Also ist die Anweisung unsinnig.

Es ist auch besser Programme ohne Pausen zu schreiben.

Ich dachte immer
else if
schreibt man zusammen. Wozu der extra Block {}

Ja, super, das dich die ganzen Hinweise und Tipps überhaupt nicht interessieren.

Und ganz wichtig, setze dein Code bitte in Code Tags damit es besser lesbar ist.

Bitte zitiere richtig.

Naja, Du musst schon rein schreiben, wie lang Deine Pause sein soll. 0 ist keine Pause.

Weil noch nicht klar ist, ob es noch eine weitere Reaktion(en) geben muss, wenn Sammy HIGH. Bzw, wenn sammyMerker == LOW

In der endgültigen Fassung wird das runtergekürzt. Aber die Zeile kann man sich z.B. lassen um weitere debug-Ausgaben zu machen.

Ok, hab den Sinn verstanden. Danke

Block Klammern kosten nichts und erhöhen oftmals die Lesbarkeit .

kp wie das geht? ich bin LEGASTENIKER sorry war falsch um hilfe zu fragen

Einfach mal genau lesen was wir geschrieben haben.
Wenn man etwas nicht versteht, kann man nachfragen.