Schrittmotor mit 2 Tastern steuern - zeigen gleiches Verhalten -Löt Fehler ?

Schrittmotor mit 2 Tastern steuern - gleiches Verhalten trotz unterschiedlicher Befehle:

Ziel:
Schrittmotor soll bei Taster1 10x drehen vorwärts , beim Taster 2. soll er 2x drehen rückwärts.
Das ganze entprellt, dass der Motor immer an der selbenstelle stehen bleibt.

Problem:
Kein Hexenwerk - dachte ich auch - aber der Schrittmotor zeigt bei beiden Tasten das gleiche Drehverhalten, und er dreht nicht immer wieder zu richtigen Position zurück. Wenn ich das ganze via serial monitor initiere funktioniert es.
Also irgenwas ist bei mir systematisch falsch.

Ich bin für jede Hilfe offen.

Fritzing, Foto, Sketch findet ihr im Anhang. - vielleicht geht meine Verkabellung auch einfach nicht.

Schon mal Danke für eure Hilfe

/*
  Button
 
 Turns on and off a light emitting diode(LED) connected to digital
 pin 13, when pressing a pushbutton attached to pin 2.
 
 
 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 
 * Note: on most Arduinos there is already an LED on the board
 attached to pin 13.
 
 */
 
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 8;     // the number of the pushbutton pin
const int buttonPin2 = 9;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin
 
// variables will change:
int buttonState = LOW;         // variable for reading the pushbutton status
int buttonread = 0;
int buttonState2 = LOW;         // variable for reading the pushbutton status
int buttonread2 = 0;


 
void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin2, INPUT);
  Serial.begin(9600);
}
 
void loop() {
  
  //--------------------- Button 1 ------------------------
  
  buttonread = digitalRead(buttonPin);
 
  if (buttonread == HIGH) { 
    delay(5);
    if (digitalRead(buttonPin)) { //Check button twice
 
      if (buttonState == LOW)
      {
        if (digitalRead(buttonPin)) {
          // turn LED on:
         // digitalWrite(ledPin, HIGH);
          buttonState = HIGH;
          Serial.println("Button pressed");
        }
      }
    }
  }
  else {
    if (buttonState == HIGH) {
      //digitalWrite(ledPin, LOW);
      buttonState = LOW;
    }
  }
  //-------------------
//--------------------- Button 2 ------------------------
  
  buttonread2 = digitalRead(buttonPin2);
 
  if (buttonread2 == HIGH) { 
    delay(5);
    if (digitalRead(buttonPin2)) { //Check button twice
 
      if (buttonState2 == LOW)
      {
        if (digitalRead(buttonPin2)) {
          // turn LED on:
        //  digitalWrite(ledPin, HIGH);
          buttonState2 = HIGH;
          Serial.println("Button 2 pressed");
        }
      }
    }
  }
  else {
    if (buttonState2 == HIGH) {
      //digitalWrite(ledPin, LOW);
      buttonState2 = LOW;
    }
  }

}

entprellter2taster_V00-4_E-APP.ino (2.2 KB)

Hi

Habe mir jetzt keine Deiner Anhänge angeschaut - sorry schon Mal dafür - habe aber eine Idee, was bei Dir falsch läuft:

Wenn Du den Taster drückst, beginnt der Stepper zu drehen - x Steps für gesamt 2(oder 10) Umdrehungen.
Leider prellt der Taster und die Zählung beginnt von Vorne - somit sind die bereits initiierten Schritte 'vergessen'.
Bei DIr ist akut nicht wichtig, wann der Letzte Tastendruck erkannt wurde, sondern der Erste.
Die Übrigen sollen in der Entprell-Zeit nur ignoriert werden.

Du schreibst, daß Du die Taster entprellt hast - wenn Das passt, würde Das diesen Gedanken natürlich direkt abwürgen :wink:

MfG

Bei deinem Aufbau-Foto ist leider nichts zu erkennen, auch kein Fehler.

Aber deine Fritzing-Schaltung ist fehlerhaft.
Wenn du die tatsächlich so geschaltet hast, ist es kein Wunder, dass der Motor bei beiden Tastern das Selbe macht. Du hast die ja zusammen geschaltet und gehst dann auf die Widerstände.

Auch das ist falsch, das sind keine Pullup bzw. Pulldown-Widerstände.
Ein Pullup geht gegen +VCC, ein Pulldown gegen GND.
Bei dir sind die in Reihe zu beiden Tastern.

So könnte es mit Pulldown-Widerstand aussehen:
Taster.png

@Hotsystems: Korrigierst Du das noch? Die Eingänge haben immer HIGH.
Sorry, ich habe nicht richtig hin geschaut. Deine Eingänge sind ja links.

Gruß Tommy

Wie wäre es, wenn Du erst einmal die Debounce Beispiele in der IDE anschaust, bevor Du unbrauchbaren eigenen oder fremden Code verwendest?

Gegen Fehler in der Logik hilft es nicht, einen Schalter dreimal hintereinander abzufragen, da hat jemand ganz verzweifelt versucht, einen falschen Ansatz zum Funktionieren zu bringen.

Tommy56:
@Hotsystems: Korrigierst Du das noch? Die Eingänge haben immer HIGH.

Gruß Tommy

Wenn ich etwas falsch gemacht haben sollte, werde ich es korrigieren.
Aber deine Aussage verstehe ich nicht.

War mein Fehler, ich habe es korrigiert.

Gruß Tommy

Tommy56:
War mein Fehler, ich habe es korrigiert.

Gruß Tommy

Oder liegt es daran, dass ich eine einfache Bleistift-Zeichnung gepostet habe ?
Für Eagle war ich zu müde.

Zum Entprellen und für mehr Funktionen von Tastern bietet sich die Bibliothek von Matthias Hertel an, welche man hier finden kann:

Damit hatte ich noch nie Prell-Probleme und der Funktionsumfang je Taster (OneClick, DoubleClick, LongClick) ist einfach Klasse.