controllo servomotore a rotazione continua

Buongiorno a tutti, oggi stavo provando a controllare con un joystick un servomotore a rotazione continua, tenendo il centro del joystick come 0, e poi sponstandolo avanti e indietro il servomotore dovrebbe andare a destra o a sinistra.il problema è che quando lo faccio a andare in un verso poi non riesco più a fermarlo e continua ad andare avanti. qualcuno saprebbe trova re una soluzione?

servoVal = analogRead(joyX1);
servoVal = map(servoVal, 0, 1023, 0, 180);
if (servoVal > 95) {
pos1++;
servoBase.write(pos1);
}
else if (servoVal < 85) {
pos1–;
servoBase.write(pos1);
}

Devi prevedere il caso da 85 a 95 come posizione centrale 90 Gradi.
Non ritengo funzionale quella storia che fai con la variabile pos1. Manca un controllo se la vaiabile é arrivato ai valori massimi/minimi ammessi.

Ciao Uwe

Un servo normale ha un range tra -90° e +90°, quindi lo 0° risulta essere centrale.

Collegando un potenziometro ad un ingresso analogico di Arduino, lo 0° corrisponde alla posizione a metà (ADC = 512).

Perciò, dovresti usare servoVal = map(servoVal, 0, 1023, -90, 90);

Con un servo a rotazione continua di solito lo "zero" (servo fermo) corrisponde ad un valore tra -10° e +10°, mentre un superamento di questi valori lo fa andare in un senso o nell'altro.

cyberhs Sei sicuro che la libreria servo.h non si aspetti valori da 0 a 180 che corrispondono all angolo -90° a +90°? Ciao Uwe

Giusto Uwe, ricordavo male.

Comunque il concetto è corretto, ma vanno fatte le dovute correzioni.

La libreria accetta un valore tra 0° e 180°, essendo 90° la posizione centrale.

servoVal = map(servoVal, 0, 1023, 0, 180);

Con un servo a rotazione continua di solito lo "zero" (servo fermo) corrisponde ad un valore tra 80° e 100°, mentre un superamento di questi valori lo fa andare in un senso o nell'altro.