Hallo Zusammen,
ich habe mich jetzt in den letzten 4 Monaten in Arduino eingearbeitet.
Zur Zeit baue ich für mein DJI Ronin Kameragimbal einen Follow Focus, den ich via Joystick (Poti) ansteure.
Die Steuerung läuft über einen Arduino Uno
Zur Schrittmotorsteuerung nutze ich einen Easydriver von Schmalzhaus.
Nun zu meinem Problem:
Ich kann die Drehrichtung bestimmen & der Motor wird einwandfrei angesteuert. Jedoch dreht sich der Motor zurück sobald der Joystick in Nullstellung ist.
Könnt ihr mir vielleicht weiterhelfen und mir einen Denkansatz Richtung "IF - THEN" geben ?
Ich kann den genauen Wert über den Serialmotor leider nicht auslesen, da dieser sehr Sprunghaft ist..
Dementsprechend Weiß ich auch nicht so genau wie ich das im Programmcode anwende.
Zum Code muss ich sagen, dass ich mir diesen aus verschiedenen Quellen zusammengeschustert habe..
int direction; // Variable to set Rotation (CW-CCW) of the motor
int steps = 1025; // Assumes the belt clip is in the Middle
int val = 0;
void setup() {
Serial.begin(250000);
pinMode(MS1, OUTPUT);
pinMode(MS2, OUTPUT);
pinMode(dir_pin, OUTPUT);
pinMode(step_pin, OUTPUT);
pinMode(SLEEP, OUTPUT);
digitalWrite(SLEEP, HIGH); // Wake up EasyDriver
delay(5); // Wait for EasyDriver wake up
/* Configure type of Steps on EasyDriver:
// MS1 MS2
//
// LOW LOW = Full Step //
// HIGH LOW = Half Step //
// LOW HIGH = A quarter of Step //
// HIGH HIGH = An eighth of Step //
*/
digitalWrite(MS1, LOW); // Configures to Full Steps
digitalWrite(MS2, HIGH); // Configures to Full Steps
}
void loop() {
val = analogRead(X_pin);
Serial.print("xpin value= ");
Serial.println(val);
Serial.print("steps value= ");
Serial.println(steps);
//end serial
while (analogRead(X_pin) >= 0 && analogRead(X_pin) <= 100) {
if (steps > 0) {
digitalWrite(dir_pin, HIGH); // (HIGH = anti-clockwise / LOW = clockwise)
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 100 && analogRead(X_pin) <= 400) {
if (steps < 512) {
digitalWrite(dir_pin, LOW); // (HIGH = anti-clockwise / LOW = clockwise)
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
if (steps > 512) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 401 && analogRead(X_pin) <= 600) {
if (steps < 1025) {
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
if (steps > 1025) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 601 && analogRead(X_pin) <= 900) {
if (steps < 1535) {
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
if (steps > 1535) {
digitalWrite(dir_pin, HIGH);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps--;
}
}
while (analogRead(X_pin) > 900 && analogRead(X_pin) <= 1024) {
if (steps < 2050) {
digitalWrite(dir_pin, LOW);
digitalWrite(step_pin, HIGH);
delay(1);
digitalWrite(step_pin, LOW);
delay(1);
steps++;
}
}
}
Ich bedanke mich im Voraus! :o