ennesimo New che ha problemi con la seriale

Ciao ragazzi,
finalmente oggi mi è arrivato arduino uno ed ho potuto smettere di fare le prove con il simulatore.
Ho provato il seguente sketch

int t[2];
int a=0;
void setup()
{
  Serial.begin(9600); 


}
void loop()
{   
  if (Serial.available()>0)
  {
    for (int i=0;i<2;i++){

      t[i]=Serial.read();
      a++;
      
    }
    if (a>0){
      
    Serial.println(t[0]);
    Serial.println(t[1]);
    a=0;
    }
    delay (2000);

  }
}

Semplicemente ho provato a leggere due numeri dalla seriale e riscriverli.
invio 50 alla seriale
L’output che ho avuto è il seguente:

53
-1
48
13

grazie in anticipo a tutti quelli che mi mi aiuteranno :slight_smile:

intanto ho modificato così

int t[2];
int a=0;
void setup()
{
  Serial.begin(9600); 
  Serial.flush();


}
void loop()
{   
  if (Serial.available()>0)
  {
    for (int i=0;i<2;i++){

      t[i]=Serial.read()-48;
      a++;
      
    }
    if (a>0){
      
    Serial.println(t[0]);
    Serial.println(t[1]);
    a=0;
    }
    delay (2000);

  }
}

ed ottengo questo output inviando 50

5
-49
0
-35

-1 significa che non c'é dato da leggere. Leggi la seriael troppo velocemente. devi controllare a ogni lettura se ci sono dei dati nel buffer e non controllare se c'é almeno uno e poi leggerne 2. 13 é il return. I numeri tra 48 e 59 sono il codice ascii delle lettere tra 0 e 9

Ciao Uwe

modificato così

char t[2];
int a=0;
void setup()
{
  Serial.begin(9600); 
  Serial.flush();


}
void loop()
{   
  if (Serial.available()>0)
  {
    for (int i=0;i<2;i++){
if (Serial.available()>0){
      t[i]=Serial.read();
      a++;
}
    }
    if (a>0){
      
    Serial.print(t[0]);
    Serial.print(t[1]);
    a=0;
    }
    delay (2000);

  }
}

funziona.
grazie Uwe :slight_smile:

però una volta letto il vettore torno al mio problema di atoi()
ho scritto questo:

char t[2];
int a=0;
int b=0;
void setup()
{
  Serial.begin(9600); 
  Serial.flush();


}
void loop()
{   
  if (Serial.available()>0)
  {
    for (int i=0;i<2;i++){
      if (Serial.available()>0){
        t[i]=Serial.read();
        a++;

      }
    }
    if (a>0){

      Serial.println(t[0]);
      Serial.println(t[1]);
      b++;
      a=0;
    }
    delay (2000);
    if (b>0){
      int c= atoi(t);
      c=c+2;
      Serial.println(c);
      b=0;
    }
  }

}

e il mio out è questo:

5

7
0

2

per usare atoi() deve essere alla fine della stringa un zero. percui:

char t[3];
...
t[2]=0;
int c= atoi(t);

Ciao Uwe

nulla anche così mi continua a vedere i numeri (es.56) come separati e a rispondermi con la somma dei singoli più due (es. 7 8 ) e non come mi aspetterei (es.58)