Aktion in Loop nur ein mal ausführen

Hey Leute...

ich komme im moment einfach nicht weiter.

Ich habe einen Schrittmotor, welcher in der Loop nach Tastendruck einen bestimmten Weg fahren soll. Jedoch soll die Aktion nur einmalig ausgeführt werden.

hier der auszug aus meinem Quellcode:

int p=0;
void loop()
{

      if (digitalRead(BUTTON_PIN5) == LOW && p == 0)  //referenzfahrt
   {
      while (l<=3000)
      {
          for(j=0;j<=1;j++)
          {
          digitalWrite(M1dirpin,HIGH);  
          digitalWrite(M1steppin,LOW);
          delayMicroseconds(667);
          digitalWrite(M1steppin,HIGH);
          delayMicroseconds(667);
          }
          l++;  
    } 
    l=0;  
    p++;
   }
}

Vielen Dank!

Schau dir blinkwithoutdelay an. Der Taster wird andernfalls lange nicht abgefragt.

Wo wird j defeniert?

j wird am anfang des programmes definiert.
aber die entprellung dürfte damit doch eigentlich nichts zu tun haben, oder?

benelli92:
Ich habe einen Schrittmotor, welcher in der Loop nach Tastendruck einen bestimmten Weg fahren soll. Jedoch soll die Aktion nur einmalig ausgeführt werden.

#define BUTTON_PIN5 5
#define INPUTMODE INPUT_PULLUP  // INPUT or INPUT_PULLUP

void referenzFahrt()
{
  // was auch immer
}  

void setup() 
{
  pinMode(BUTTON_PIN5,INPUTMODE);
}

boolean done=false;

void loop()
{
  if (!done) // Nur ausführen, wenn noch nicht ausgeführt
  {
    boolean pressed= digitalRead(BUTTON_PIN5);
    if (INPUTMODE==INPUT_PULLUP) pressed=!pressed; // vertauschte Logik bei PullUp-Widerstand
    if (pressed) 
    {
      referenzFahrt();
      done=true;
    }
  }
  // weiterer Code hier
}

Hey, vielen Dank,

leider funktioniert der Code leider auch nicht, sodass sich bei Knopfdruck gar nichts tut :confused:

Der Code ist auch nicht vollständig. Arbeite dich lieber erst einmal in den Basics ein. Die scheinen doch noch etwas zu fehlen.

Referenzfahrt musst du schon selber schreiben und das sollte wenn möglich dann auch direkt ohne blockierenden Code geschrieben werden.

benelli92:
Hey, vielen Dank,

leider funktioniert der Code leider auch nicht, sodass sich bei Knopfdruck gar nichts tut :confused:

Dann prüfe mal, ob der in meinem Beispielcode definierte Buttonpin auch der ist, den Du verwendest, und trage vielleicht auch mal in die Funktion:

void referenzFahrt()
{
  // was auch immer
}

genau das ein, was passieren soll.

Wenn eine Funktion aufgerufen wird, die im Funktionsrumpf nur einen Kommentar stehen hat, passiert natürlich auch nichts, wenn diese Funktion genau einmal ausgeführt wird.

Was mach ich falsch
ich möchte ein Schrittmotor 4 mal pro Tag von einen Zeitschltuhrsketch ansteuern .Der Ausgang bleibt 2mim auf ein,
Der Schrittmotor soll aber nur 2 Umdrehungen machen.
Ich habe versucht den Sketch von Jurs in ein Test Sketch (nur für den Schrittmotor )einzubinden,läuft nicht.

Dann lern die Basics und übe erst einmal das Programmieren. Wie oben beschrieben ist jurs Code nur ein Wegweiser, aber nicht vollständig.