non è difficile
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
ricevuto += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
completo = true;
}
}
}
questa funzione non fa altro che ricevere tutti i char che arrivano sulla seriale e metterli uno dopo l' altro nella stringa "ricevuto"
quando arriva il carattere di ritorno a capo "\n" (quando invii la stringa con gambas automaticamente viene terminata con un carattere di ritorno), la variabile completo passa a true, quindi interviene la funzione principale main loop
void loop(){
// print the string when a newline arrives:
if (completo==true) {
ngocce=(ricevuto.substring(0,4).toInt());
tempo=(ricevuto.substring(5,8).toInt());
ritardo=(ricevuto.substring(9,12).toInt());
//Serial.println(ngocce);
//Serial.println(tempo);
//Serial.println(ritardo);
for (i=1 ; i< (ngocce+1); i++){
digitalWrite(RELE,1);
delay(tempo);
digitalWrite(RELE,0);
delay(ritardo);
//Serial.println(i);
}
// clear the string:
ricevuto = "";
completo = false;
//Serial.println(completo);
Serial.println("ok");
}
}
infatti il codice del loop non viene mai eseguito se completo non è = a true (primo if)
essendo la stringa ricevuto completa l' if viene eseguito
per cui io ho estratto dalla stringa ricevuta le 4 sotto stringhe di 4 caratteri che indicano i tempi , e nella stessa riga di codice le converto in integer
a questo punto nelle tre variabili gogge , tempo e ritardo ho i 3 valori in millisecondi che mi servono a far lampeggiare il pin 11
questo viene fatto dal ciclo for che in pratica loopa per un tot di volte a seconda del valore di "gocce"
per ogni ciclo viene posto a 1 il pin , per il tempo indicato da "tempo" (1° delay)
poi il pin vine posto a 0
poi il secondo delay aspetta per il tempo impostato da ritardo e quindi il ciclo si ripete
finiti tutti i cicli la variabile ricevuto viene svuotata
e completo posto a false, così il programma è pronto a ricevere nuove stringhe.
questo è solo un esempio che è stato realizzato in questo modo perchè a me serviva così , ma come in tutti i linguaggi ci sono svariati altri modi per ottenere il risultato voluto
cmq Serial.read() legge la seriale
Serial.println invia sulla seriale qualsiasi tipo di dato