Pages: [1]   Go Down
Author Topic: Problema con lettura e scrittura sul monitor seriale  (Read 362 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 66
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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! smiley-grin


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? smiley
Logged

BZ (I)
Online Online
Brattain Member
*****
Karma: 257
Posts: 21484
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
while (Serial.available() > 0 );

Ciao Uwe
Logged

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4833
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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
Logged

my name is IGOR, not AIGOR

Pages: [1]   Go Up
Jump to: