Ciao Ragazzi, vi spiego il mio problema. Ho Arduino Uno, due servi e un joystick. Devo riuscire a muovere i due servi in base alle coordinate inviate dal joystick. In pratica esattamente questo: Controllo tramite Joystick di 2 servo con Arduino - YouTube
Il mio problema è che non riesco a trovare la soluzione per far "rimanere fermo" il servo. Cioè, muovendo il joystick riesco a far muovere i due servi, adesso come faccio a farli rimanere fermi in quella posizione? se lascio il joystick ovviamente rivela cmq la misura dell'asse x e y e mi modifica la posizione dei servi. Spero di essere stato chiaro. Posto il codice ke ho realizzato fin ora. Grazie in anticipo.
#include <Servo.h>
//assegnamento pin del joystick
const int buttonJoy1 = 4; //digitale
const int assexJoy1 = 4; //analogico
const int asseyJoy1 = 5; //analogico
//assegnamento pin di due servi (uno assex e l'altro assey)
const int servo1 = 2;
const int servo2 = 3;
//valori prelevati dal joystick
int statoAssexJoy1;
int statoAsseyJoy1;
int statoButtonJoy1;
//valore da passare ai servi
int radServoX = 90;
int radServoY = 90;
long int millisText, millisServo, time;
//dichiarazione dei due servi
Servo myServo1, myServo2;
void setup(){
pinMode(assexJoy1, INPUT);
pinMode(asseyJoy1, INPUT);
pinMode(buttonJoy1, INPUT);
//il servo asse X impostato inizialmente a 90 gradi
myServo1.attach(servo1);
myServo1.write(radServoX);
//il servo asse Y impostato inizialmente a 90 gradi
myServo2.attach(servo2);
myServo2.write(radServoY);
millisText = millis();
millisServo = millis();
Serial.begin(9600);
}
void loop(){
time = millis();
//lettura dato dall'analogico del joystick
statoAssexJoy1 = analogRead(assexJoy1);
statoAsseyJoy1 = analogRead(asseyJoy1);
statoButtonJoy1 = digitalRead(buttonJoy1);
//se il tasto viene premuto azzera i servi
if(statoButtonJoy1 == HIGH){
azzera();
}
//serve per calcolare ogni 100 millisecondi
if( (time == 0) || (time > millisServo + 100) ){
//calcolo in base ai gradi massimi (180°) e al valore massimo del joystick (1023)
statoAssexJoy1 = map(statoAssexJoy1, 0, 1023, 0, 179);
statoAsseyJoy1 = map(statoAsseyJoy1, 0, 1023, 0, 179);
//scrittura del valore calcolato sul servo (in gradi)
myServo1.write(statoAssexJoy1);
myServo2.write(statoAsseyJoy1);
millisServo = millis();
}
//serve per stampare a video ogni 1500 millisecondi
if( (time == 0) || (time > millisText + 1500) ){
stampaTime(statoAssexJoy1, statoAsseyJoy1, radServoX, radServoY);
}
}
void azzera(){
Serial.println("tasto premuto");
myServo1.write(90);
myServo2.write(90);
}
void stampaTime(int assex1, int assey1, int posServoX, int posServoY){
Serial.print("Asse x Joystick: ");
Serial.println(assex1);
Serial.print("Asse y Joystick: ");
Serial.println(assey1);
Serial.print("Posizione asse X del servo: ");
Serial.print(posServoX);
Serial.println(" gradi");
Serial.print("Posizione asse Y del servo: ");
Serial.print(posServoY);
Serial.println(" gradi");
Serial.println("--------------------------------");
millisText = millis();
}