Grazie,scusa se torno a romperti,ho tolto come mi hai suggerito la parte di gestione decimale,ho cambiato il tipo di variabile da float ad int,per far muovere i servo motori ho aggiunto map(ricevuta,0,1000,0,180) che ho messo solo al pollice per il momento;
Nonostante ciò i servo motori continuano a fare dei piccoli movimenti senza senso,forse la sensibilità da aggiustare,ma non si muovono come dovrebbero.
Scusa ancora se ti rompo,Grazie
#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
Servo pollice;
Servo indice;
Servo medio;
Servo anulare;
Servo mignolo;
void setup()
{
pollice.attach(8);
indice.attach(7);
medio.attach(6);
anulare.attach(5);
mignolo.attach(4);
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 == '#') // se è il cancelletto comincio la lettura
{
stato = 1;
ricevuta = 0; // Ricevuta è la variabile di appoggio dove faccio i calcoli
}
if (rx <= 'E' && rx >= 'A') // Fine trasmissione
{
switch (rx)
{
case 'A':
ricevuta=map(ricevuta,0,1000,0,180);
pollice.write(ricevuta);
break;
case 'B':
indice.write(ricevuta);
break;
case 'C':
medio.write(ricevuta);
break;
case 'D':
anulare.write(ricevuta);
break;
case 'E':
mignolo.write(ricevuta);
break;
default:
break;
}
}
stato = 0;
}
if (rx <= '9' && rx >= '0') // Una cifra
{
if (stato == 1) // Parte intera
{
ricevuta = ricevuta * 10 + rx - '0'; // Shiftare di una cifra e aggiungere l'ultima
}
}
}