Lettura da monitor seriale

Sera a tutti. Sto realizzando dei programmi, uno in python l’altro in Wiring(Arduino appunto) dove ad ogni ricerca su google o a qualsiasi altro motore di ricerca di un social network di una parola da me inserita in una funzione, si accendi un led. Sto lavorando sulla parte Arduino per la comunicazione seriale ma ho problemi con il Serial read e con quell’if.

char data;
int ledPin = 12;


void setup()

{
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.flush();
}

void loop()
{
  
  if (Serial.available() > 0) 
  {
   data = Serial.read();
   Serial.flush();
   
   if (data == "H" || data == "h")
   {
     digitalWrite(ledPin, HIGH);
     delay(100);
     digitalWrite(ledPin, LOW);
  }
  
  
  
}

}

Inoltre mi da un errore strano:

“Forbids comparison between pointer and integer”.

Si riferisce all’if ma non capisco che intende.

Inoltre un altro problema è che ho difficoltà con la classe string. Premetto che la versione del mio IDE dovrebbe essere la 1.0.5 o 2:1.0.5. Sono su Lubuntu(Linux) e non mi fa scaricare versioni più aggiornate dell’ide, di conseguenza la classe String non è inclusa e la funzione “string” per dichiarare delle stringhe ovviamente non va. Ora non so come risolvere perchè mi risulta scomodo usare array di char per questo programma e vorrei capire cosa posso fare per utilizzare la classe string, dato che in rete non trovo neanche la libreria.

  1. spiegami perché usi la Serial.flush() ... che credo tu non abbia capito a che serve

  2. se usi i doppi apici crei un array di char (una stringa del C), quindi, il tuo "H", in memoria occupa DUE caratteri, H e 0x00 per indicare il fine stringa. Devi usare i singoli apici per identificare un char ...

if (data == 'H' || data == 'h')

Guglielmo

OK grazie mille, comunque Serial.flush() lo uso per svuotare la seriale.

Ecco, appunto, ero certo che NON avessi chiaro a che serve Serial.flush() ...
... che fa tutt'altra cosa rispetto al suo nome :smiling_imp:

Magari, prima di usare un metodo di una classe ... sarebbe meglio leggere bene il reference ... ::slight_smile:

Serial.flush()
Waits for the transmission of outgoing serial data to complete.

... quindi ferma il programma in attesa che tutti i caratteri che si è detto di TRASMETTERE non siano stati trasmessi.
Che NON ha nulla a che vedere con il contesto in cui la usi tu.

Guglielmo