Hallo zusammen,
ich versuche gerade den Fehler in folgendem Code zu finden. Vielleicht hat jemand von euch eine Idee was ich hier falsch programmiert habe:
#include <AFMotor.h>
AF_DCMotor motor(1); // M1=1 M2=2 M3=3 M4=4
int buttonPin = A0;
bool running = false;
bool forward = true; // Vorwärtsrichtung zu Beginn des Programms
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
motor.setSpeed(50); // 50
motor.run(RELEASE);
}
void loop() {
if (digitalRead(buttonPin) == LOW && !running) { // Starten bei Tastendruck
running = true;
uint8_t i;
if (forward) {
motor.run(FORWARD); // Vorwärts fahren
for (i = 0; i < 255; i++) {
motor.setSpeed(i);
delay(20); // Beschleunigungszeit
}
for (i = 255; i != 0; i--) {
motor.setSpeed(i);
delay(20); // Abbremszeit
}
forward = false; // Nächster Durchlauf in umgekehrter Richtung
} else {
motor.run(BACKWARD); // Rückwärts fahren
for (i = 0; i < 255; i++) {
motor.setSpeed(i);
delay(20); // Beschleunigungszeit
}
for (i = 255; i != 0; i--) {
motor.setSpeed(i);
delay(20); // Abbremszeit
}
forward = true; // Nächster Durchlauf in Vorwärtsrichtung
}
motor.run(RELEASE); // Pause
delay(500);
running = false;
}
}
Mein Ziel ist es, den Motor mit einem Tastendruck laufen zu lassen. Danach bleibt der Motor stehen und soll bei erneutem Tastendruck wieder zurücklaufen. Leider fährt der Motor aber nicht in umgekehrter Richtung zurück, sondern beginnt immer wieder von vorne.
Liegt das vielleicht daran, dass meine Idee mit der Abfrage true/false hier nicht anwendbar ist?
Mein Setup:
Arduino Uno mit MotoShield L293d
Taster an Pin A0 und Getriebemotor an M1
motor.run(RELEASE); // Pause
delay(500);
running = false;
forward = !forward; // <==***** Kehrt den Wert um
}
}
Danke für den Tipp - das habe ich verstanden. Wenn ich die Variablenumkehr so einbaue, dann passiert aber nichts. Nach meiner Auffassung muss die Umkehrung vorher erfolgen vor der else-Schleife. Klappt aber auch nicht.
motoshield L293d ist noch keine präzise Angabe was das für ein Motorshield ist.
Adafruit hat seine Motorshields von V1 auf V2 geändert und die neueren Version brauchen eine andere library als die alten Versionen weil da ganz andere chips verbaut sind.
Poste mal ein Foto von der Oberseite und der Unterseite von deinem shield
Oh nein, wie peinlich ! Durch die Bitte den Motorshield zu fotografieren ist mir aufgefallen, dass ich den Motor an den falschen Pin angelegt habe (GND). Umgelegt und siehe da, jetzt arbeitet er korrekt mit dem Hinweis von my_xy_projekt
Vielen Dank für eure Geduld!