ich versuche gerade einen Schrittmotor über meinen Arduino UNO anzusteuern.
Jetzt habe ich das Problem, dass der Schrittmotor nur vorwärts aber nicht rückwärts läuft.
Ich habe schon in einem extra Programm nur rückwärts laufen lassen, in dem es auch funktioniert hat.
Hier der Quellcode:
#include <Stepper.h>
int SPU = 2048;
int taster=7;
int i ;
int x=450 ;
int tasterstatus=0;
Stepper Motor(SPU, 3,4,5,6);
void setup()
{
Motor.setSpeed(5);
pinMode(taster, INPUT);
}
void loop()
{
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH) {
Motor.step(x);
for(i=0;i<1;i+0){
tasterstatus=digitalRead(taster);
if (tasterstatus == HIGH) {
Motor.step(-1*x);
i=1;
}
}
}
}
Das Problem liegt also darin, dass der Arduino, nur in diesem Programm, nicht auf auf das "-" reagiert.
das Programm funktioniert einwandfrei. Abgesehen davon, dass er nicht rückwärts laufen will.
Unser Plan ist es, bei einem Modell ein Auto aus- und einparken zu lassen. Auf Knopfdruck, so oft wie halt gedrückt wird.
Und weil das Auto erst auf das zweite Drücken wieder einparken soll, muss der Taster zweimal abgefragt werden. Das funktioniert auch super (ich habe es mit einem großen und einem kleinen Schritt getestet).
Was wäre Dein Verbesserungsvorschlag? Denn natürlich ist das nicht gerade schön programmiert.
Einsteinli:
Danke
aber mein Problem liegt darin, dass der Moter nicht rückwärts läuft und zwar nur in diesen Programm.
Irgendwelche Idean warum ?
Vermutlich weil du für beide Laufrichtungen den selben Taster verwendest.
Woher soll der Stepper wissen, welche Richtung du meinst ?
Was dir ja auch schon mitgeteilt wurde.
Und bitte setze deinen Sketch in Code-Tags, des ist so schlecht zu lesen.
Die Code-Tags kannst du selbst erstellen, am Anfang des Sketches [code] und am Ende [/code] jeweils ohne den Stern(*). Oder du nimmst die Schaltfläche </> im Editorfenster unter "Preview".
das nächste mal schreibe ich es in Code-Tags.
Das mit den Taster funktioniert (habe statt der Rückwärtsbewegung einfach eine deutlich kürzere Bewegung eigestellt als beim ersten Wert und dann bewegt er sich beim ersten mal drücken der Moter weiter als beim zweiten mal).
Ich verstehe nicht warum da Fehler auftreten sollten ?
Scheinbar weißt du nicht was dein wilder Code macht.
tasterstatus = digitalRead(taster);
if (tasterstatus == HIGH) {
Motor.step(x); // x = 450
for (i = 0; i < 1; i + 0) {
tasterstatus = digitalRead(taster);
if (tasterstatus == HIGH) {
Motor.step(-1 * x); // x = -450
i = 1;
}
}
}
dein tasterstatus wird durch drücken high,
if wird demzufolge ausgeführt,
Motor.step ist bestimmt blockierungsfrei,
for Schleife wird umgehend abgearbeitet,
tasterstatus ist immer noch high, weil der µC Sau schnell ist, bzw. du den Finger nicht so schnell runter bekommst,
nächste if wird ausgeführt,
und hier wette ich das die Stepper Lib noch beschäftigt ist mit auf Position +450 fahren,
im gleichen Atemzug wird i auf 1 gesetzt, das wars gewesen für mal -1, die for wird nie wieder ausgeführt
die loop kann im besten Fall nur noch um 450 nach + fahren lassen, je nachdem was die Funktion Motor.Step() macht.
Die for Schleife ist in der Form völlig sinnfrei. Eine if Abfrage notfalls mit Verriegelung wäre sinnvoller. Zudem du noch deine Taster entprellen musst.
Zu erst war da ein Fehlermeldung, da du "tasterPin" und "taster" (vermute ich) ausversehen für die selbe Sache genutzt hast.( habe einfach alle beide gleich genannt)
Doch bewegt er sich wieder nur vorwärts
mein letzter Hinweis, mach mal statt 3ms 30ms zum entprellen, lese den Thread und schau dir die Bsp. der Lib an, anstatt wild zu probieren wenn die Basics fehlen. Die muss du dir leider erarbeiten, da muss jeder durch. Ist leider so.
Einsteinli:
PS: Hir merkt man, dass es mehr oder weniger wertvolle Beiträge gibt.
Ehrlich, diesen Satz verstehe ich nicht .
Und das hättest du dir sparen können.
Unsere Beiträge sind immer so wertvoll wie deinen Antworten.
Z.B. "Geht immer noch nicht" ist keine Antwort mit der irgend jemand etwas anfangen kann.
Ein paar mehr Informationen von deiner Seite wären da besser.
Aber das passt zu deinem Sketch.
Du solltest den etwas aufräumen und selbst ein paar Debugging-Zeilen einfügen, damit du erkennen kannst, wo dein Sketch hakt.