[Linux-Biella] arduino..

Jumping Jack jumpingjack a mclink.it
Mar 26 Giu 2012 13:15:27 CEST


On 26/06/2012 12:25, Leonardo Buffa wrote:
>
> ciao
> sto sucando con una cosa che davvero non capisco come mai
> devo stare in ascolto sulla sua seriale, aspettare un valore di tre 
> cifre e con questo fare altre cose
> a parte il fatto che leggere un valore di tre cifre devo fare tre 
> Serial.read, metterli in una stringa per poi trasformarla in integer 
> con atoi, mi si incasina il tutto quando gli inserisco una riga tipo:
>
> while(Serial.available() == 0) { }
>
> che dovrebbe dirgli: se non ti arriva niente sulla seriale non fare 
> nulla...
>
> inserita questa, i tre byte che leggo diventano uno per riga invece 
> che una stringa unica.
> io ho bisogno che faccia questo:
>
> aspetta che l'asino ti scriva qualcosa sulla seriale
> appena lo scrive trasformalo in int e poi comanda un servo
>
> non va :/
>
> allego codice se qualche anima pia ha voglia di aiutarmi
>
> #include <Servo.h>
> #include <stdio.h>
> #include <stdlib.h>
>
>
> Servo servoMain;
> String inData;
>
> void setup()
> {
>   Serial.begin(9600);
>   servoMain.attach(10);
> }
> void loop()
> {
>   inData="";
>   while(Serial.available() == 0) { }
>     int h=Serial.available();
>     for (int i=0;i<h;i++)
>     {
>       inData += (char)Serial.read();
>     }
>
>   int POS = atoi(&inData[0]);
>   if (POS >= 0 && POS <= 180)
>   {
>
>     Serial.println(POS);
>     servoMain.write(POS);
>   }
> }


Perchè non fai semplicemente Serial.available() > 0? Ok h>0 O h==3? 
Arduino non gradisce se ti inchiodi nel main loop (a volte). Fallo 
loopare :)
Inoltre Serial.read() restituisce un int. Quindi penso sia per questo 
che ti trovi i tre byte spezzati.

JJ


Maggiori informazioni sulla lista Linux