If schleife verzögerung

Sei nicht beleidigt.
Dir hat niemand was getan.
Siehe #10 - das ist alles drin.
Und nu schau, ob der Schnipsel das macht, was Du willst.

hat leider nicht geklappt verstehe auch leider 0 was der code bewirken soll baue ich ihn ein hab ich ein konflickt mit int sammy vermutlich muss ich einfach damit leben und den timer auf 1 min stellen da dann ja alles genau so leuft wie es soll trotzdem vilen dank werde es noch etwas weiter versuchen aber in 3 4 h gebe ichs auf xd

Nein, nicht einbauen.
Der Code soll allein laufen und im Seriellen Monitor sollst Du drauf achten was passiert, wenn Du Auf die Taste drückst, diese wieder loslässt bzw. die Taste sehr laange drückst usw.

ah ok das krige ich hin

Starte Timer!
Reset des Merker ohne Zeitablauf
Starte Timer!
Reset des Merker ohne Zeitablauf
Starte Timer!
Timer ist abgelaufen!
Starte Timer!
Timer ist abgelaufen!
Starte Timer!
Timer ist abgelaufen!
Starte Timer!

Im serMon unten links den Haken setzen, bei "Zeitstempel anzeigen" Und dann die Ausgabe hier hinein.
Bitte in CodeTags! Wie das geht, den Link hab ich Dir oben geliefert.

hoffe ich hab's nun mit den tags die abfrage klappt würde ich sagen

18:45:58.982 -> T
18:45:58.982 -> Start...
18:45:58.982 -> Starte Timer!
18:46:05.967 -> Timer ist abgelaufen!
18:46:05.967 -> Starte Timer!
18:46:10.419 -> Reset des Merker ohne Zeitablauf
18:46:12.669 -> Starte Timer!
18:46:16.312 -> Reset des Merker ohne Zeitablauf
18:46:24.982 -> Starte Timer!
18:46:31.954 -> Timer ist abgelaufen!
18:46:31.954 -> Starte Timer!
18:46:38.975 -> Timer ist abgelaufen!

Ok, wenn Du das mit den Codetags nicht willst, dann bin ich auch hier raus.
Der Code funktioniert und macht was Du erwartest.

18:45:58.982 -> Start...                           // Kommt vom Setup
18:45:58.982 -> Starte Timer!                      // Taste gedrückt
18:46:05.967 -> Timer ist abgelaufen!              // Zeit abgelaufen bei gedrückter Taste
18:46:05.967 -> Starte Timer!                      // Taste war noch immer gedrückt
18:46:10.419 -> Reset des Merker ohne Zeitablauf   // Taste losgelassen
18:46:12.669 -> Starte Timer!                      // Taste gedrückt
18:46:16.312 -> Reset des Merker ohne Zeitablauf   // Taste losgelassen
18:46:24.982 -> Starte Timer!                      // Taste gedrückt
18:46:31.954 -> Timer ist abgelaufen!              // Zeit abgelaufen bei gedrückter Taste

Hallo,
nachdem auf Post#6 kein Sketch veröffentlicht worden ist, habe ich das IDE auf meinem Rechner wieder dicht gemacht.

verstehe das nicht mit codetags bin legasteniker glaube aber ich kann mir mit deinem code helfen vielen dank

Ich habe den Eindruck, dass das immer mehr als Ausrede benutzt wird.
Um die Codetags zu benutzen, musst Du nur den oben angepinnten Artikel lesen und anwenden. Wenn das schon zu hoch ist, dürfte es die Programmierung erst Recht sein.
Da das wohl nicht so ganz der Fall ist, gehe ich von einer Faulheitsausrede aus. Du willst Dich nicht damit beschäftigen, da die Hinweise, die Du brauchst, auch ohne das von einigen Teilnehmern nur so sprudeln.

Gruß Tommy

Jeah habs hinbekommen vielen dank und sorry für meine miese Rechtschreibung

mega dank einfach geilo :star_struck:

Ja ?
Was denn und wo denn ?
Ich sehe keine Code-Tags.

Zur Entschuldigung des To ist zu sagen daß er die CODE-Tags gemacht hat aber verschachtelt sodaß sie nicht funktionierten.
Habs gerichtet.
Grüße Uwe

1 Like

Alles klar, danke Uwe.

danke danke werd den code gleich nochmal versuchen richtig zu posten

hier nochmal der geänderte code hab noch nicht ganz verstanden warum es nun klappt aber es leuft alles richtig geil hier dann auch mal die ino hoffe diesmal alles richtig gepostet zu haben

auto.ino (11,3 KB)

const byte EN    = 8;
const byte X_DIR = 5;
const byte X_STP = 2;



     
 byte Sammy;
  byte Status;
bool Sammy1 = false;
bool sammyMerker = false;
unsigned long lastmillis = 0;
const unsigned long timer = 12000; // Zeit in ms

 
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(32);  
    digitalWrite(stepperPin, LOW);
    delayMicroseconds(32); }}
    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(115200);
  Serial.println(F("Start..."));;
    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(){
//öffnet und veriegelt die tür

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;}}

  //schlißt und veriegelt die tür

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 ;}}

//stopt den automatikmodus wen die tür geöffnet ist 
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;}}

     //löst die verigelung wen die tür geschloßen ist von außen und setzt die tür auf automatik
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    
// öffnet die tür und setzt den teimer auf 0 zurück

Sammy = digitalRead(10);
     Serial.println(Sammy,DEC);
     if (Sammy == 1){
     if(Status == 0){
  Serial.println(F("Reset des Merker ohne Zeitablauf"));
  sammyMerker = false; 
  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 ; 
     }}


//hier nochmal der teimer das die abfrage weiter leuft 



{
  Sammy1 = digitalRead(10); //anfang
  if (!Sammy1)
  {
    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;
    }}}





    /*
     ausklammern        // notizen
     */
Sammy = digitalRead(10);   //anfang 
     Serial.println(Sammy,DEC);
    if (sammyMerker == false){      //hier war das elend mit dem teimer sammymerker die lösung
      
     if (Sammy == 0)             // hier muss ein teimer hin 15 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 ;}}}




//lässt die led blinken leider ist sie danach mal an oder aus wen sich das lösen lässt nice wen nicht wird die funktion entfernt
 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
// umschalten auf status 1 wen automatik an ist
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;}}


//entrigeln der tür weksel von status 3 in 0
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;}}


   //öffnen  und in status 1 gehen tür schlißt nur noch über einen taster und verigelt dann
Sammy = digitalRead(12);
     Serial.println(Sammy,DEC);
     if (Sammy == 0){
     if(Status == 0){
  Serial.println(F("Reset des Merker ohne Zeitablauf"));
  sammyMerker = false;    
  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 = 2;
  }}


//schlißen und verigeln lässt sich nur durch taster innen lösen 

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 ;}}

//löst die verigelung wen der taster außen verigelt hat

  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;}}
    
}

Wunderschöne Code TAGs sehe ich. :rofl: :rofl: :rofl:
Uwe

Ich sehe Gesprächsbedarf.

Kann Status negativ werden?
Nein? Dann:
Kann es mehr als 254 werden?
Nein?
Dann byte.
Sammy liest doch nur zwei Stati... Warum verbratest Du dafür 2 bytes?

Warum #define?
Versuche zu ersetzen:
alt:

#define EN        8
#define X_DIR     5
#define X_STP     2

neu:

#define EN        8
#define X_DIR     5
#define X_STP     2

#define EN        9

Der kompiliert Fehlerfrei?

ersetze jetzt durch:

const byte EN    = 8;
const byte X_DIR = 5;
const byte X_STP = 2;

const byte EN    = 9;

kompiliere.
Was hast Du gelernt?
Na dann...

das war mir nicht bewusst hab wie gesagt 0 Ahnung hab mir alles in 2 wochen Googlen zusammen gesucht nachdem mein Technik Mann nicht meher konnte

:wink:
Jaja, so ist das.
Die Kopie eines guten pdf habe ich hier angehangen: Code ausfüren wen 2 Bedinungen erfült sind(if) - #14 by my_xy_projekt
ganz nach unten scrollen.