Go Down

Topic: Problema con lettura e scrittura sul monitor seriale (Read 398 times) previous topic - next topic

magum12

Code: [Select]
int led = 13;

void setup()
{
  //crea una comunicazione con arduino
  Serial.begin(9600);
  pinMode(led,OUTPUT);
}
void loop()
{
  while (Serial.available() == 0 );
  {
  //Arduino legge l'input
  byte val = Serial.read() - '0';
 
  if (val == 1 )
  {
    Serial.println("Led Acceso");
    digitalWrite(led,HIGH);
  }
  else if (val==0)
  {
    Serial.println("Led spento");
    digitalWrite(led,LOW);
  }
  else if (val != 0 || val != 0)
  {
  Serial.println("Invalido"); 
  }
 
  }
}


Salve a tutti! :D


Ecco il codice... Voglio fare accendere un led con i 1 e 0 , e voglio anche che nel monitor mi scriva "Acceso o Spento" e nel caso in cui metto un valore non valido "Invalido" il problema è che quando metto più caratteri per esempio : "ciao" mi scrive "Invalido" per quante lettere ha il valore inserito ..
Aiuto? :)

uwefed

forse é meglio che controlli se nel buffer ci sono dei dati che controllare che non ne sono e poi li leggi:

Code: [Select]
while (Serial.available() > 0 );

Ciao Uwe

nid69ita

La funzione Serial.read() legge un carattere alla volta. Perciò nella logica del tuo programma è giusto che compaia "invalido" più di una volta.
Dovresti leggere tutto fino a quando non trovi il carattere '\n'  fine linea (ma sul monitor dell'IDE devi settarlo per spedire ad Arduino anche il vai a capo) scaricando i vari caratteri in una stringa (vettore o array di caratteri) del tipo   
Code: [Select]
char buf[20];
Poi controllare che ci siano caratteri validi.
C'e' la funzione isdigit() che ti dice se il carattere è una cifra o no.

Esiste poi la Serial.parseInt() che legge un valore e rimane in attesa fino ad un timeout stabilito.
Non so però cosa faccia se gli passi non numeri ma lettere.
http://arduino.cc/en/Tutorial/ReadASCIIString
my name is IGOR, not AIGOR

Go Up