Acquisire e ricomporre un numero da seriale

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

#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

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';

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.