Hallo liebes Arduino Forum,
ich bin ziemlich neu hier und beschäftige mich erst seit kurzem mit Arduino und versuche mich gerade an einer Steuerung für Schrittmotoren und bin nun auf das folgenden Problem gestoßen und komme nicht mehr weiter.
Erstmal eine kurze Erklärung zu meinem Projekt:
Ich möchte mit einem Joystick einen Schrittmotor ansteuern. Findet eine Auslenkung am Joystick statt, soll sich der Motor bewegen. Soweit so gut und dies funktioniert auch.
Jedoch möchte ich im nächsten Schritt die Position des Schrittmotors speichern und wenn ich den Schrittmotor weiterbewege, mit Hilfe eines Tasters zurück zu der gespeicherten Position zurückkehren.
Dafür benutze ich zwei Taster, wobei der eine Taster eigentlich ein Endtstop ist ( da es aber eigentlich auch ein Taster ist, denke ich nicht, dass es ein Problem darstellen sollte?). Der normale Taster ist sendet ein LOW signal aus wenn er betätigt wird.
Beim Betätigen des ersten Tasters soll die Position gespeichert werden und beim betätigen des zweiten Tasters soll die Position des Schrittmotors wieder zurückkehren.
Ich stehe nun vor dem Problem, dass es nur in eine Richtung funktioniert (für X > 562) für X < 462 funktioniert es gar nicht.
int stepPin1 = 6;
int dirPin1 = 7;
int stepPin2 = 8;
int dirPin2 = 9;
float joyStickX = A0;
float joyStickY = A1;
int taster = 12;
const int switchPin1 = 2;
float jsXValue = 0; //Variable zur Speicherung des X Wertes
float jsYValue = 0; // Variable zur Speicherung des Y Wertes
int tasterStatus;
int switchStatus = 0;
int steps1 = 0;
int steps2 = 0;
int steps1Value;
int steps2Value;
int stepSpeed = 5;
void setup()
{
pinMode(stepPin1, OUTPUT);
pinMode(dirPin1, OUTPUT);
pinMode(stepPin2, OUTPUT);
pinMode(dirPin2, OUTPUT);
pinMode(joyStickX, INPUT);
pinMode(joyStickY, INPUT);
pinMode(taster, INPUT_PULLUP);
pinMode(switchPin1, INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
tasterStatus = digitalRead(taster);
switchStatus = digitalRead(switchPin1);
if(tasterStatus == LOW){
steps1 = 0;
steps2 = 0;
}
if(switchStatus == HIGH){
steps1 = steps1Value;
for( int x = 0; x < steps1Value; x++){
digitalWrite (dirPin1, LOW); //Richtungsangabe, entgegen Urzeigersinn
digitalWrite(stepPin1, HIGH);
delay(stepSpeed);
digitalWrite(stepPin1, LOW);
delay(stepSpeed);
}
steps2 = steps2Value;
for( int x = 0; x < steps2Value; x++){
digitalWrite (dirPin1, HIGH); //Richtungsangabe, entgegen Urzeigersinn
digitalWrite(stepPin1, HIGH);
delay(stepSpeed);
digitalWrite(stepPin1, LOW);
delay(stepSpeed);
}
}
jsXValue = analogRead(joyStickX); // Auslesen der Spannung am JoyStick
if ( jsXValue > 562 ) // falls Wert größer 712. Bewegung nach Rechts
{ digitalWrite (dirPin1, HIGH); //Richtungsangabe, entgegen Urzeigersinn
digitalWrite(stepPin1, HIGH);
delay(stepSpeed);
digitalWrite(stepPin1, LOW);
delay(stepSpeed);
steps1Value = steps1++;
}
jsXValue = analogRead(joyStickX); // Auslesen der Spannung am Joystick
if ( jsXValue < 462) // falls Wert kleiner 462 Bewegung nach links
{ digitalWrite (dirPin1, LOW); // Richtungangabe, mit dem Urzeigersinn
digitalWrite(stepPin1, HIGH);
delay(stepSpeed);
digitalWrite( stepPin1, LOW);
delay(stepSpeed);
steps2Value = steps2++;
}
}
Das ist nebenbeibemerkt nur ein Ausschnitt meines Codes. Der komplette ist einfach nur für zwei Schrittmotoren, daher sind so viele Variablen benannt am Anfang.
Wenn ich die Reihenfolge der beiden for Schleifen vertausche funktioniert übrigens dann gar nichts mehr.
Die Taster funktlionieren auf jeden Fall. Wenn ich bei der selben Schaltung einen anderen Code drauflade (z.B. wenn der Taster berührt wird, sollen sich die Schrittmotoren aufhören zu drehen), funktioniert alles.
Ich wäre euch sehr dankbar, wenn ihr mir bei diesem Problem helfen könntet oder Ideen habt, was ich vändern könnte.
Liebe Grüße
GlitzerFee
EDIT: okay ich nehme es zurück. Der code ist sicherlich total fehlerhaft, da im Fall ( x> 562) es auch nur (gefühlt) zufällig funktioniert.