Arduino+Joystick+servo+controller servo via seriale

Salve a tutti,
da poco mi sono affacciato a questo splendido mondo e fino ad adesso me la sono cavata abbastanza bene considerando che sono quasi all'asciutto di programmazione in c, tuttavia conoscendo la struttura e alcuni comandi e modificando alcuni sketch già scritti sono sempre riuscito nel mio intento. Adesso però ho bisogno di un piccolo aiuto vi espongo la questione:

Devo comandare un servocomando collegato ad arduino tramite una scheda in grado di controllare via seriale fino a 32 servocomandi, attraverso un joystick a due assi collegato ad arduino.
Non ho bisogno che il comando sia proporzionale, ma semplicemente che quando metto il joy a destra il servo ruoti per un verso e a sx per l'altro. In sostanza il joy alla fine mi svolge la funzione di due pulsanti.
Ora ho scritto il seguente sketch e sebbene sul monitor seriale mi viene restituito in visivo il comando del servo ovvero #3P(rot)T100 il servo non si muove di un passo.
Ho provato a cambiare il passo della rotazione da +1 a +10 e a giocare con il delay e la velocità con cui il servo deve raggiungere la posizione, ma niente....

Ho sbagliato completamente il codice?

int joy = A4;     // joystick per movimento parabola
int joyval = 400; // posizione neutra
int rot = 1450;   // partenza rotazione
int pass = 0;     // incremento operazioni
int movdx = 10;
int movsx = 10;

void setup() 
{
  Serial.begin(9600);
}
void loop() 
{
  if (pass == 0)
  {

    //Serial.print("#1P1000T1000\r\n");    //parabola inclinata
    //delay(2000);
    //Serial.print("#2P900T1000\r\n");     //parabola aperta
    (pass = pass + 1);
    //Serial.print("#1P650T1000\r\n");   //posizione reset inclinazione
    //delay(2000);
    Serial.print("#3P1450T1000\r\n");  //posizione reset rotazione
    delay(2000);
    Serial.print("#3P600T1000\r\n");
    
  }
  if (pass == 1)
  {
  
    joyval = analogRead(joy);
    if (joyval >= 800)
      {(rot = rot + movdx);
       if (rot == 2300)
         {(movdx = 0);}
       else
         {(movdx = 10);}
       Serial.print("#3P"); 
       Serial.print(rot);
       Serial.print("T100\r\n");
       Serial.println(rot);
       delay(100);
       }
    if (joyval <= 100)
      {(rot = rot - movsx);
       if (rot == 600)
         {(movsx = 0);}
       else
         {(movsx = 10);}
       Serial.print("#3P"); 
       Serial.print(rot);
       Serial.print("T100\r\n");
       Serial.println(rot);
       Serial.println(rot);}
       delay(300);
  }
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento

Per il codice, devi racchiuderlo nei tag code, invece del quote. Ora è il primo pulsante a sinistra.

Ok scusami, ho modificato il post e mi sono presentato :slight_smile:

In queste istruzioni le parentesi tonde non servono:

(rot = rot + movdx);

Tutto quello che scrivi con Serial.print() va sulla unica seriale, quindi su USB.
C'è una unica posta seriale sulla Uno (pin 0 e 1). Per usare altri pin, usa http://www.arduino.cc/en/Reference/SoftwareSerial
Ma come la colleghi questa scheda che comanda i servo ?

ok intanto ho tolto le parentesi e stò andando per tentativi provando in vari modi ad inviare quella stringa via seriale.

La scheda è collegata con i pin 0(rx) e 1(tx) rispettivamente a Tx e Rx della scheda che controlla i servi, questa scheda è alimentata da sola tramite una batteria da 7,4 con con uno stabilizzatore a 5 V oltre alla scheda alimenta anche i servi.

A livello hardware credo di aver fatto tutto, infatti se noti i primi due Serial.print nel primo if me li esegue alla perfezione.

Quello che non riesco a fare è il movimento del servo tramite il joystick.

Ma quel pass che va da 0 a 1 serve solo per eseguire le istruzioni di reset della scheda?
Se si, sposta quel pezzo in if(pass==0) nella setup (dopo la Serial.begin) e magari subito prima un bel delay(1000);

Ho inserito il pass perchè una volta eseguite alcune operazioni, il programma non deve più tornarci sopra, il primo in if in realtà non è del tutto completo, questo sketch l'ho scritto per sviluppare la routine del movimento del servo tramite joy che poi dovrò inserire in uno sketch più completo dove c'è anche un display.

Ok trovato l'errore, mi è bastato togliere le due righe contenenti questo comando Serial.println(rot);

Okay.

Se hai voglia, modifica il titolo al tuo primo post, aggiungendo [Risolto] :slight_smile:

Prima di chiuderlo una domanda, ma il codice che ho scritto per leggere la posizione del joystick e incrementare il valore della posizione del servo, può essere scritto anche senza usare IF?