Go Down

Topic: Problema con lettura e scrittura sul monitor seriale (Read 441 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy