Buongiorno a tutti, sto facendo un programma dove ci sono diversi loop da avviare singolarmente, attraverso degli input di lettera/numero dal monitor seriale.
Esempio: void A avvia lampeggio di un led e void B avvia un'altra sequenza sempre da ripetersi, questi due void sono da avviare con un carattere da monitor seriale.
Ho bisogno di una mano in questo codice.
grazie
void setup() {
pinMode(11,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
Serial.begin(9600);
}
void A(){
//...
}
void B(){
//...
}
void loop () {
val = Serial.read();
if (val== 'A'){ //se legge A si avvia il void A
}
if (val== 'B') { //se legge B si avvia il void B
}
}
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.
Noto inoltre che NON è la prima volta e che NON hai ancora fatto quanto ti è stato chiesto a suo tempo QUI!
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposita discussione, nel rispetto del succitato regolamento nessuno ti risponderà (eventuali risposte o tuoi ulteriori post, verrebbero temporaneamente nascosti).
Letta la presentazione non sono riuscito a ricavare informazioni circa la tua esperienza e comprensione del codice C di arduino.
Ho questo pezzetto di sketch scritto al volo che fa quello che desideri.
Se non è comprensibile, ci sono alternative che potrebbero essere più comprensibili.
// premi:
// a invio; stampa a all'infinito
// b invio; stampa b all'infinito
// c invio; non stampa nulla
uint8_t dataByte;
void setup() {
Serial.begin(115200);
Serial.println("start");
} // end void setup()
void loop() {
switch (dataByte) {
case 'a':
Serial.println("a");
break;
case 'b':
Serial.println("b");
break;
}
} // end void loop()
void serialEvent() {
uint8_t c = Serial.read();
if (c >= 'a' && c <= 'c')
dataByte = c;
}
Non è più semplice e comprensibile per un principiante senza usare una funzione che viene chiamata una volta sola?...
// premi:
// a invio; stampa a all'infinito
// b invio; stampa b all'infinito
// c invio; non stampa nulla
uint8_t dataByte;
void setup() {
Serial.begin(115200);
Serial.println("start");
} // end setup()
void loop() {
if (Serial.available()) {
uint8_t c = Serial.read();
if (c >= 'a' && c <= 'c')
dataByte = c;
}
switch (dataByte) {
case 'a':
Serial.println("a");
break;
case 'b':
Serial.println("b");
break;
}
} // end loop()
Lo chiedi a me o a te stesso?
Io non so rispondere, su arduino la tendenza è di scrivere tutto dentro il loop che si ingrassa, quindi la tua versione è di tendenza.
PS: Io non condivido questa tendenza che forse deriva dai tutorial e manuali cartacei o meno che per questioni tipografiche e didattiche tendono a condensare. Il principiante dopo i tipi di dati, studia (dovrebbe) le funzioni e quindi le sa definire e chiamare.
Dal punto di vista della efficienza, c'è una chiamata a funzione ( leggiDaSeriale() ) quando il buffer ha dei dati. Nella versione di tendenza non c'è chiamata a funzione.