RyujiAndy Inviato 2 Novembre 2012 Condividi Inviato 2 Novembre 2012 (modificato) Fino ad ora vi ho spiegato come si attivano i pin digitali in uscita quindi come interagire tra Arduino ed un led, ora vediamo come programmare un azione esterna nel nostro caso la pressione di un tasto. Come sempre per controllare la corrente che illumina il LED METTO UNA RESISTENZA DA 1 Kohm, questo perchè l'uscita di arduino fornisce una corrente massima di 40 mA e non voglio rischiare di rompere il microcontrollore AtMega328p di Arduino, tra il pulsante e la massa metto una resistenza da 10 Kohm e lo collego al pin 7 di arduino, l'altra estremità del pulsante va ai 5 V di uscita di Arduino, questo perchè arduino rivela la differenza di potenziale e non la circolazione di corrente, la resistenza è più elevata per ridurre la circolazione di corrente, per chi non lo sapesse è definita dalla legge di ohm che dice V = R*I, quindi avendo una differenza di potenziale nel nostro caso sempre costante (5 V), aumentando la resistenza diminuisco la Corrente. Ora come sempre andiamo a definire nel programma i pin utilizzati: void setup() { pinMode(13, OUTPUT); pinMode(7, INPUT); } Da notare al pin 7 ho impostato "INPUT" questo come logico per dirgli che è una lettura e non una scrittura, quindi arduino ora utilizza il piun 7 per rilevare la differenza di potenziale che si va a creare. Per effettuare una lettura sul pin 7 si deve usare la funzione "digitalRead()" questo ci restituisce 2 valori "HIGH" se c'è tensione e "LOW" se questa non è presente, e quindi il nostro programma uscirà in questa maniera: void loop() { digitalWrite(13, digitalRead(7)); } Se si carica il nostro sketch su arduino si nota subito un piccolo problema, il nostro LED si illumina solo quando il pulsante risulta premuto, non appena lo rilasciamo il LED si spegne, questo lo si può usare solo quando si vuole rilevare lo stato, ma noi vogliamo poter accendere e spegnere il LED ad ogni pressione, quindi dobbiamo rivelare il cambiamento di stato del pulsante e quindi memorizzare lo stato del LED. Una soluzione potrebbe essere: int tastroprecedente = LOW; int tasto = LOW; int statoled = LOW; void setup() { pinMode(13, OUTPUT); pinMode(7, INPUT); } void loop() { stato = digitalRead(7); if (stato != tastoprecedente && stato == HIGH) { statoled = 1 - statoled; } digitalWrite(13, statoled); tastoprecedente = stato; } Il confronto "if" va a rilevare il cambiamento di stato del pulsante su due letture del tasto quella attuale e quella precedente e controla se il pulsante risulta premuto quindi va ad assegnare lo stato del led grazie alla funzione "statoled = 1 - statoled;" questa grazie ad un semplice formula matematica va ad invertire il valore, infatti se lo stato del led è "1" o "HIGH" lo cambia in "0" o "LOW", infatti "1 - 1 = 0", viceversa se lo stato precedente è "0" o "LOW", "1 - 0 = 1". Schema elettrico: R1 = 1K ohm R2 = 10K ohm Modificato 2 Novembre 2012 da RyujiAndy Link al commento Condividi su altri siti Altre opzioni di condivisione...
danielee73 Inviato 5 Dicembre 2012 Condividi Inviato 5 Dicembre 2012 Salve Ho provato con Arduino questo programma ma ho notato che manca la variabile stato. quindi ho aggiunto int stato=0; riepilogo: int tastoprecedente=LOW; int tasto=LOW; int statoled=LOW; int stato=0; Ciao Link al commento Condividi su altri siti Altre opzioni di condivisione...
RyujiAndy Inviato 6 Dicembre 2012 Autore Condividi Inviato 6 Dicembre 2012 Ottima osservazione e ottima soluzione del problema, comunque il programma originale era: int tastroprecedente = LOW; int tasto = LOW; int statoled = LOW; void setup() { pinMode(13, OUTPUT); pinMode(7, INPUT); } void loop() { int stato = digitalRead(7); if (stato != tastoprecedente && stato == HIGH) { statoled = 1 - statoled; } digitalWrite(13, statoled); tastoprecedente = stato; } Nello scrivere mi sono dimenticato di aggiungere l'int davanti alla lettura dello stato del pulsante. Mi complimento per l'acuta osservazione, questo dimostra che anche io sono umano. Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Crea un account o accedi per lasciare un commento
Devi essere un membro per lasciare un commento
Crea un account
Iscriviti per un nuovo account nella nostra community. È facile!
Registra un nuovo accountAccedi
Sei già registrato? Accedi qui.
Accedi Ora