Non so perchè il programma non funzionava,alla fine spulciando in alcuni tuoi vecchi post che mi hai indicato,sono riuscito a tirare fuori un programma che funziona,finalmente sono riuscito a capirlo.
Purtroppo i servo motori vibrano ancora ma almeno si muovono come dico io.L'unica cosa strana che ho trovato è questa:Ho fatto printare i valori di un sensore(dito anulare) dopo essere stati mappati ed ho notato che ,a sensore a riposo cioè quando dovrebbe dare 0,dà numeri negativi,poi se sollecito il sensore di pressione,allora vedo che i numeri si alzano fino ad arrivare a 180.Ho il sospetto che il tremolio dei servomotori sia dovuto a quei numeri negativi che non so da dove spuntano.Comunque ti ringrazio tantissimo per i consigli e la disponibilità,ho imparato molto...
#include <Servo.h>
#include <SoftwareSerial.h>
SoftwareSerial receive(2, 3);
int ricevuta; // per la gestione della variabile in trasmissione
char rx; // il carattere ricevuto
int stato; // lo stato della ricezione
int datopol;
int datoind;
int datomed;
int datoanu;
int datomig;
Servo pollice;
Servo indice;
Servo medio;
Servo anulare;
Servo mignolo;
void setup()
{
pollice.attach(4);
indice.attach(5);
medio.attach(6);
anulare.attach(7);
mignolo.attach(8);
pollice.write(0);
indice.write(0);
medio.write(0);
anulare.write(0);
mignolo.write(0);
Serial.begin(9600);
receive.begin(9600);
}
void loop()
{
if (receive.available())
{
rx = receive.read(); // Leggo il primo carattere
if(rx=='#'){ //inizio a leggere
stato=1;
ricevuta=0;
}
if(rx=='A'){ //POLLICE
stato=0;
datopol=map(ricevuta,200,800,0,180);
pollice.write(datopol);
}
if(rx=='B'){ //INDICE
stato=0;
datoind=map(ricevuta,200,800,0,180);
indice.write(datoind);
}
if(rx=='C'){ //MEDIO
stato=0;
datomed=map(ricevuta,200,800,0,180);
medio.write(datomed);
}
if(rx=='D'){ //ANULARE
stato=0;
datoanu=map(ricevuta,200,800,0,180);
Serial.println(datoanu);
anulare.write(datoanu);
}
if(rx=='E'){ //MIGNOLO
stato=0;
datomig=map(ricevuta,200,800,0,180);
mignolo.write(datomig);
}
if (rx <= '9' && rx >= '0') { //se ricevo una cifra
// una cifra
if (stato == 1) {
// parte intera
ricevuta = ricevuta * 10 + rx - '0';
// shiftare di una cifra e aggiungere l'ultima
}
}
}
}