Pages: [1]   Go Down
Author Topic: Acquisire e ricomporre un numero da seriale  (Read 439 times)
0 Members and 1 Guest are viewing this topic.
Cagliari
Offline Offline
Newbie
*
Karma: 1
Posts: 16
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Devo acquisire un valore numerico con range 0-9999 dalla seriale, la quale ovviamente riceve un char per volta.
Ho provato a fare così

Code:

#define led 12  // led connesso al pin n°12

void setup()
{
Serial.begin(9600); // imposto la UART per lavorare a 9600
pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
Serial.flush(); // svuoto il buffer di ricezione seriale
}
 
void loop() {
if (Serial.available() >0) { // Controllo se il buffer di ricezione contiene qualcosa
          int value = leggiSeriale();
               }
            }
             
  int leggiSeriale() {
                  char buffer[4];
                  int value = 0;
                  int index = 0;
                  int moltiplicatore = 1;
                 
                  while (Serial.available() > 0) {
                    buffer[index] = Serial.read();
                    index++;
                  }
                  while(index >= 0) {
                    value = value + moltiplicatore*buffer[index];
                    index--;
                    moltiplicatore = moltiplicatore*10;
                  }
                  return value;
                }

                if (value>'5') // se ho ricevuto un valore maggiore di 5

{
digitalWrite(led,HIGH); // accendo il led
Serial.println("Led Acceso"); //e stampo a video lo stato del led
}
 
else // se invece
 
if value<'4') // ho ricevuto un valore inferiore a 5

{
digitalWrite(led,LOW); // spengo il led
Serial.println("Led spento"); //e stampo a video lo stato del led
}
             }


ma il debug mi da errori aspettandosi una dichiarazione prima dell'if...

Ciao, Salvatore
Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao

utilizza direttamente la funzione atoi() passando il buffer dove salvi i caratteri ricevuti.
ricordati però che le stringhe devono essere "null-terminated", quindi se ti aspetti 4 caratteri dovrai definire il buffer di 5 elementi e inserire prima della chiamata ad atoi in quinta posizione il terminatore:

buffer[4] = '\0';
Logged

lucadentella.it

0
Offline Offline
Faraday Member
**
Karma: 30
Posts: 2905
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hai semplicemente commesso degli errori di distrazione.

Controlla il che il numero delle parentesi graffe sia pari, aiutati con l'identazione del codice.
Controlla anche le if, while, for, switch che fanno uso di parentesi tonde che devono essere anche loro in numero pari.

Guarda il codice di esempio presente in Arduino IDE e cerca di replicare l'ordine e la pulizia del codice scritto, questo ti permette di leggere il
codice tuo o altrui in un solo colpo di occhio.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Pages: [1]   Go Up
Jump to: