[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