Serial.read di un numero

GINGARDU:

Gono:
Ciao a tutti! Rieccomi partito in quarta a fare domande :smiley:
Quello che volevo fare è inviare dal computer (con python) un numero da 0 a 255 per il PWM.
Il problema è che il Serial.read mi legge solo un carattere alla volta e quindi non mi funziona nulla :frowning:
Avete qualche idea per poter ricevere il numero tutto intero?

qui c' è il codice che ho "aggiustato" puoi inviare numeri da 0 a 999999999
la variabile x assume il valore e viene stampata
se si prova a inviare una lettera appare il messaggio ATTENZIONE ...........

long vet[9] = {-2, -2, -2, -2, -2, -2, -2, -2, -2 }; 

long cont = 0;
long x = 0;

void setup()
{

Serial.begin(9600);
}

void loop()
{
  while (Serial.available() > 0)
  {
    vet[cont] = Serial.read()-48; 
    cont++;
    delay(60);
         
  }
 
   if (vet[0] < -2 || vet[1] < -2 || vet[2] < -2 || vet[3] < -2 || vet[4] < -2 || vet[5] < -2 || vet[6] < -2 || vet[7] < -2 || vet[8] < -2)
   Serial.println(" ATTENZIONE DEVI  INSERIRE SOLO NUMERI DA 1 A 999999999  ");

if (vet[0] > 9 || vet[1] > 9 || vet[2] > 9 || vet[3] > 9 || vet[4] > 9 || vet[5] > 9 || vet[6] > 9 || vet[7] > 9 || vet[8] > 9)
   Serial.println("   ATTENZIONE DEVI  INSERIRE SOLO NUMERI DA 1 A 999999999  ");

if(cont > 0)
  {
    cont = 0;
   
   
      if (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 &&  vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2  && vet[1] ==  -2 )
                                                                               
    {                                                                     
      x = vet[0];                                                           
    }
    else
   
    if (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2 ) // 
    {
      x = (vet[0]* 10 +   vet[1]    );
    }
    else
    if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 &&  vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2 ) //
    {
      x = (vet[0] * 100 + vet[1]* 10+ vet[2]);
    }
    else
    if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2  && vet[4] ==  -2  )
    {
      x = (vet[0] * 1000 + vet[1] * 100 + vet[2]* 10 + vet[3]); 
      } else
      if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2   )
      {
      x = (vet[0] * 10000 + vet[1] * 1000 + vet[2]* 100 + vet[3]* 10 + vet[4]); 
     
      } else
       if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 )
      {
      x = (vet[0] * 100000 + vet[1] * 10000 + vet[2]* 1000 + vet[3]* 100 + vet[4]* 10 + vet[5]); 
     
      } else
       
        if  (vet[8] == -2 && vet[7] == -2 )
      {
      x = (vet[0] * 1000000 + vet[1] * 100000 + vet[2]* 10000 + vet[3]* 1000 + vet[4]* 100 + vet[5]* 10+ vet[6]); 
     
      } else 
       
          if  (vet[8] == -2 )
      {
      x = (vet[0] * 10000000 + vet[1] * 1000000 + vet[2]* 100000 + vet[3]* 10000 + vet[4]* 1000 + vet[5]* 100 + vet[6]* 10+ vet[6]); 
     
      } else
       
       
       
x = (vet[0] * 100000000 + vet[1] * 10000000 + vet[2]* 1000000 + vet[3]* 100000 + vet[4]* 10000 + vet[5]* 1000 + vet[6]* 100 + vet[7] * 10 + vet[8]);
       
     
if (vet[0] < -2 || vet[1] < -2 || vet[2] < -2 || vet[3] < -2 || vet[4] < -2 || vet[5] < -2 || vet[6] < -2 || vet[7] < -2 || vet[8] < -2 ) x = 0;
if (vet[0] > 9 || vet[1] > 9 || vet[2] > 9 || vet[3] > 9 || vet[4] > 9 || vet[5] > 9 || vet[6] > 9 || vet[7] > 9 || vet[8] > 9)  x = 0;

if (x == -2 || x== -1) x=0;
         
   
     
if (vet[0] >= -2 && vet[1]  >= -2 &&  vet[2]  >= -2 &&  vet[3] >= -2 && vet[4] >= -2 && vet[5] >= -2 && vet[6] >= -2 && vet[7] >= -2 && vet[8] >= -2 &&
  vet[0] <= 9 && vet[1] <= 9 &&  vet[2] <= 9 &&  vet[3] <= 9 &&  vet[4] <= 9 &&  vet[5] <= 9 &&  vet[6] <= 9 &&  vet[7] <= 9 &&  vet[8] <= 9 )
     Serial.println(" NUMERO INSERITO  "),   Serial.println(x);

//if (x == 0)   Serial.println(" REINSERISCI UN  NUMERO DA 1 A 999999999  ")  ;

vet[0] = -2; 
    vet[1] = -2;
    vet[2] = -2;
    vet[3] = -2;
    vet[4] = -2;
    vet[5] = -2;
    vet[6] = -2;
    vet[7] = -2;
    vet[8] = -2;       
  }

}

oddio piuttosto che usare un array di long, semplicemente fai
variabile = variabile*10+cifraLetta;

non solo risparmi un sacco di righer di codice, ma puoi leggere numeri di grandezza arbitrartia, ed in oltre risparmi un sacco di RAM. All In :wink: