problema con serial.read e serial.print

salve

la pagina di spiegazioni di READ() riporta il seguente esempio:

int incomingByte = 0;   // for incoming serial data

void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();

                // say what you got:
                Serial.print("I received: ");
                Serial.println(incomingByte, DEC);
        }
}

se scrivo 1 carattere mi scrive una riga, se scrivo 2 caratteri (10 oppure 22 oppure aa oppure ciao, ecc..) mi scrive una riga per ogni carattere.

volendo fare dei test con un semplice servo, vorrei poter far girare il servo in base all'angolo che digito nel serial monitor
però se scrivo 180, il serial leggerà 3 numeri invece di 1

sicuramente ho capito male io qualcosa..ma prova e riprova non ho capito cosa..
mi sapreste dare un indizio?

grazie
ciao

Non prendere male questo mio appunto ma in un sacco di occasioni si è detto che la trasmissione seriale è di singoli byte per cui se tu lato PC spedisci un numero in formato di stringa, questo verrà spedito cifra per cifra, quindi in ricezione sarai tu a dover ricostruire il valore spedito. L'alternativa è quella di spedire un byte con il valore che desideri.

Segui anche qui:
http://arduino.cc/forum/index.php/topic,97207.0.html

Ciao

banalmente l'esempio riceve un carattere e lo stampa a video...
Tu dovrai implementare qualcosa di più "elaborato":

  • prepari un array di char della dimensione massima che ti aspetti di ricevere
  • leggi da seriale con un loop fino a che ricevi il carattere '\n' (= "a capo")
  • usi la funzione atoi() per convertire la stringa letta in un numero

se cerchi nel forum ci sono molti post che illustrano questo metodo per leggere una riga da seriale

grazie mille raga
direi che quello che mi avete mandato è + che sufficiente per risolvere.

dovrebbe comunque essere un problema temporaneo visto che l'invio da seriale per ora mi serve solo a simulare il valore che successivamente otterrò da un FSR

in pratica voglio far muovere il servo in base ai valori analogici che mi manda l'FSR per cui dopo dovrei ottenere il valore x intero senza doverlo ricostruire

grazie ancora!
ciao

did it!

meraviglia!

Questo codice prende fino a 5 caratteri numerici dalla seriale e li trasforma in un numero. Se entro mezzo secondo non vengono altri numeri trasforma anche numeri con meno cifre.
Ciao Uwe

int incomingByte;   
char Data[8];
int i;
unsigned long Tempo;

void setup()
{
  Serial.begin(9600);
}

void loop(){
 
   do {
     if (Serial.available()) {       
       Data[i] = Serial.read();
       i++;
       }     
     if(i<1)Tempo = millis(); 
     } while (i<5&&(millis()-Tempo) < 500);
  
   Data[i] = 0;    
   incomingByte = atoi(Data);  
   i=0;
   Serial.println(incomingByte);
}

grazie mille uwe!