Ciao a tutti sto facendo uno sketch con arduino ma non so come fare in modo da premere un pulsante e far lampeggiare un led all'infinito con un intervallo di 1 sec finché non premo un altra volta il pulsante e il led comincia a lampeggiare con un intervallo di 2 secondi.Vi chiedo di aiutarmi in qualche modo facendomi come fare considerando che non sono un esperto.Grazie in anticipo.
Ti serve una variabile che memorizzi lo stato del tuo programma. In quella variabile ci metti la condizione "lampeggio sì" o "lampeggio no". Può essere di tipo bool (false/true) oppure di tipo byte (0/1).
Lo sketch parte assegnando a tale variabile il valore di false o 0, a seconda del tipo scelto.
Nel loop devi:
- controllare lo stato del pulsante;
- se è premuto, invertire lo stato della variabile di stato: da 0 a 1 o da 1 a 0;
- poi controlli lo stato della... variabile di stato.
- se è true/1, vai alla routine di lampeggio, basata su millis
Per la routine basata su millis, puoi esaminare lo sketch BlinkWithoutDelay presente nell'IDE
Per eseguire più di un compito basato su millis, c'è anche questo mio articolo
Puoi scrivere l'ultimo punto cioè "se è true/1, vai alla routine di lampeggio, basata su millis"
perché non ho capito molto bene come usare la funzione millis anche se ho lletto varie spiegazioni
puoi prendere un "aiuto" da qui
interval_2 vale 500 millisecondi o quello che desideri
unsigned long currentMillis_2 = millis();
if(currentMillis_2 - previousMillis_2 > interval_2) {
previousMillis_2 = currentMillis_2;
if (lampeggio == LOW)
lampeggio = HIGH;
else
lampeggio = LOW;
}
interval_3 vale 1000 millisecondi o quello che desideri
unsigned long currentMillis_3 = millis();
if(currentMillis_3 - previousMillis_3 > interval_3) {
previousMillis_3 = currentMillis_2;
if (acquisizione == LOW)
acquisizione = HIGH;
else
acquisizione = LOW;
}
acquisizione e lampeggio si trovano in uno stato alto o basso al ritmo dei millisecondi che metti
nel setup va messo
pinMode (7, INPUT); //pulsante che premuto mette a massa il pin 7
digitalWrite (7,HIGH); //pullup
poi questo fa il modo che conta_impulsi_pulsante incrementa di 1 al rilascio del pulsante
if (digitalRead (7)== LOW) puls_encoder=1;
if (puls_encoder ==1)
conta_impulsi_pulsante = conta_impulsi_pulsante + 1,
puls_encoder=0;
if (conta_impulsi_pulsante >2) conta_impulsi_pulsante = 0; //riporta a zero conta_impulsi_pulsante
non rimane che sceglière il pin del led es: il 9
e
if (conta_impulsi_pulsante ==1 && interval_2== LOW) digitalWrite (9,LOW);
if (conta_impulsi_pulsante ==1 && interval_2== HIGH) digitalWrite (9,HIGH);
if (conta_impulsi_pulsante ==2 && interval_3== LOW) digitalWrite (9,LOW);
if (conta_impulsi_pulsante ==2 && interval_3== HIGH) digitalWrite (9,HIGH);
EDIT BY MOD: inseriti tag per codice
Ma la risposta fornita QUI da uwe non era già abbastanza soddisfacente?
Il post crossing sarebbe vietato da regolamento ...
Potete usare i tag code? Così da rendere più fruibile la discussione. Grazie.
Grazie
Francesco00:
Grazie
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento: Regolamento
- qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections
- qui le pinout delle varie schede by xxxPighi: Pinout
- qui una serie di link generali utili: Link Utili
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare.
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.