ich möchte einen Servomotor mit einem Joystick steuern. Jedoch reagiert mein Servo nicht wenn ich den Joystick bewege. Ich vermute es liegt an dem If-Befehl, da mir im seriellen Monitor angezeigt wird, dass ich den Joystick bewege. Ich bin noch Anfänger also vielleicht ist es ein recht offensichtlicher Fehler, den ich nicht erkenne.
Danke schon im Vorraus für die Hilfe.
Code:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
// Arduino pin numbers
int pos = 90; // variable to store the servo position
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
}
void loop() {
Serial.print("pos = ");
Serial.print(pos);
Serial.print("\t\n");
Serial.print("Switch: ");
Serial.print(digitalRead(SW_pin));
Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y_pin));
Serial.print("\n\n");
myservo.write(pos); // Servo auf Position "pos" bewegen
if (500 > X_pin < 510){
pos = 90;
}
if (X_pin < 500){ // Wenn Joy nach Links <-
pos = --pos; // pos wird veringert
}
if (X_pin > 510){ // Wenn Joy nach Rechts
pos = ++pos; // pos wir erhöht
}
myservo.write(pos); // Servo auf Position "pos" bewegen
}
Dein Code bringt drei Warnungen, die sich auf Deine Berechnungen beziehen.
DATEI - VOREINSTELLUNGEN - Ausführliche Ausgabe währen -> Haken setzen bei Kompilierung
Darunter das Feld auswählen ALLE
Und Dein delay(1000) muss dringend weg.
Und dann: Gehe in Dein Post mit dem Bleistift unten und markiere Deinen Text Code .
Oben im Editor gibt es ein </> Symbol - das drückst Du dann und schon hast die Codetags drumrum.
Danke für die ganzen Antworten. Leider funktioniert es immer noch nicht. Der Servo bewegt sich am Anfang von 90 auf 0 runter, ohne dass ich den Joystick berühr habe, und bleibt dann stehen und reagiert nicht mehr. Der serielle Monitor zeigt aber an, dass X_pin bei 505 liegt, also nicht unter 500 oder über 510. Trotzdem bewegt sich der Servo zu 0. Der Code sieht jetzt folgendermaßen aus:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
// Arduino pin numbers
int pos = 90; // variable to store the servo position
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode(SW_pin, INPUT);
digitalWrite(SW_pin, HIGH);
Serial.begin(9600);
}
void loop() {
Serial.print("pos = ");
Serial.print(pos);
Serial.print("\t\n");
Serial.print("Switch: ");
Serial.print(digitalRead(SW_pin));
Serial.print("\n");
Serial.print("X-axis: ");
Serial.print(analogRead(X_pin));
Serial.print("\n");
Serial.print("Y-axis: ");
Serial.println(analogRead(Y_pin));
Serial.print("\n\n");
switch(X_pin)
{
case 0 ... 500: pos = pos - 1; break;
case 501 ... 510: pos = 90; break;
case 511 ... 1023: pos = pos + 1; break;
}
if (pos < 0){ // Damit pos nicht negativ wird
pos = 0;
}
if (pos > 180){ // Damit pos nicht über 180 geht
pos = 180;
}
myservo.write(pos); // Servo auf Position "pos" bewegen
}
Bei meinem Joystick sind die Koordinaten des Zentrums bei ca. P(505/505) und der Joystick liegt ohne Veränderung im Zentrum
Edit: P(0/0) wäre, wenn man den Joystick nach oben links drückt
Wobei ich normalerweise dazu tendiere, Werte erst zu lesen, aufzuheben und dann zu verarbeiten - wer weiß, ob man sie mal simulieren muss oder wo man sie sonst noch brauchen wird.
Der analoge Pin ( 0 und 1) ist etwas anderes als der analog gemessene Wert der Spannung die am analogen Pin anliegt ( Werte von 0 bis 1023 sind möglich).
Was in diesem Fall ja nicht gegeben ist:
Denn es scheint unerheblich, ob der auf der seriellen Schnittstelle verkündete Wert gleich dem ist, der zur Steuerung des Servos verwendet wird.