Buonasera a tutti,
Volevo fare una domanda,
Prendo ad esempio uno sketch di un led che accendo con bottone con variabile stato. Quando il led è acceso scrivo sul serial monitor on e quando lo spengo scrivo off, con comando (Serial.println). Qui il mio problema:
Quando il led è acceso sul serial monitor viene scritta una “pioggia” di on e lo stesso per l’off. Come faccio a fare in modo che venga scritto una sola volta on quando accendo e una sola volta off quando spengo? Cioè vorrei che non ci fosse questa “pioggia” di on e off.
Grazie in anticipo a chi puó aiutarmi
Ciao.
Devi scrivere nella seriale solamente quando c'è un cambiamento dello stato del led.
Per fare questo basta che memorizzi lo stato precedente e lo confronti con l'attuale, se sono uguali non fai niente mentre se sono diversi stampi su seriale e allinei il valore precedente a quello attuale
Ciao Pippo,
grazie per il consiglio!! ci sono riuscito!!
Allego qui lo sketch cosi mi dici se ho fatto come mi hai detto tu o se mi sono inventato qualcosa. ma adesso funziona come voglio io.
Grazie ancora.
int stato = LOW;
void setup(){
Serial.begin(9600);
pinMode(11, OUTPUT);
pinMode(7, INPUT);
}
void loop() {
if (digitalRead(7) == HIGH){
stato=!stato;
if (stato == HIGH){
Serial.println ("ON");
} else {
Serial.println ("OFF");
}
delay(200);
}
if (stato == HIGH){
digitalWrite(11, HIGH);
delay(100);
}
if (stato == LOW){
digitalWrite(11, LOW);
delay(100);
}
}
Credo che solo in apparenza funziona, perché hai una serie di delay, se tieni premuto il pulsante per molto tempo (più di 300 ms) dovresti veder alternare le scritte on off sul monitor seriale
Ciao fabpolli e grazie ![]()
si in effetti hai ragione, e credo potrei risolvere calcolando il momento di salita e discesa del tasto in modo che il programma memorizzi uno stato singolo.
lo sketch che ho proposto era solo per capire come risolvere il problema "pioggia di dati" sul monitor seriale.
Hai già una variabile bool che fa al caso tuo ;), devi solo verificare se il suo valore è differente rispetto allo stato del pulsante se si stampi e memorizzi lo stato attuale del pulsante, ogni qualvota cambia lo stato del pulsante il controllo ti dirà che lo stato precedente era differente e tu stamperai e memorizzerai il nuovo stato.
Così stampi una sola volta su pressione e rilascio. Quindi modificando leggermente e spostando l'if dove fai il conrollo alrove risolvi
Ok Grazie, ci provo!
Ciao
Fra gli esempi presenti nell'IDE di Arduino (File-Esempi-02.Digital) c'è StateChangeDetection.
Studialo bene perché spiega esattamente come fare.