- Materiale richiesto:
- Schema elettrico:
- Spiegazione della programmazione:
- Configurazione hardware per sequenza LED lampeggiante:
- Caricamento e lavoro:
Questo è il secondo tutorial di una sequenza di tutorial in cui stiamo imparando il LaunchPad MSP430G2 di Texas Instruments utilizzando l' IDE Energia. Nell'ultimo tutorial su Blinky LED ci siamo presentati alla LaunchPad Development Board e all'Energia IDE, abbiamo anche caricato il nostro primo programma che è quello di far lampeggiare il LED di bordo a intervalli regolari.
In questo tutorial impareremo come utilizzare l' opzione di lettura digitale e scrittura digitale per leggere lo stato di un dispositivo di input come un interruttore e controllare più uscite come i LED. Alla fine di questo tutorial avresti imparato a lavorare con gli ingressi e le uscite digitali, che possono essere utilizzati per interfacciare molti sensori digitali come sensore IR, sensore PIR ecc. E anche per attivare o disattivare uscite come LED, cicalino ecc. destra!!? Iniziamo.
Materiale richiesto:
- LaunchPad MSP430G2
- LED di qualsiasi colore - 8
- Interruttore - 2
- Resistenza 1k - 8
- Cavi di collegamento
Schema elettrico:
Nel nostro precedente tutorial, abbiamo notato che la piattaforma di lancio stessa è dotata di due LED e un interruttore sulla scheda. Ma in questo tutorial avremo bisogno di qualcosa di più, poiché stiamo pianificando di accendere otto luci LED in sequenza quando viene premuto un pulsante. Modificheremo anche la sequenza quando viene premuto un altro pulsante solo per renderlo interessante. Quindi dobbiamo costruire un circuito con 8 luci LED e due interruttori, lo schema del circuito completo può essere trovato di seguito.
Qui gli 8 LED sono le uscite e i due interruttori sono gli ingressi. Possiamo collegarli a qualsiasi pin I / O sulla scheda, ma ho collegato gli LRD dal pin P1.0 a P2.1 e gli switch 1 e 2 rispettivamente ai pin P2.4 e P2.3 come mostrato sopra.
Tutti i pin del catodo del LED sono collegati a terra e il pin dell'anodo è collegato ai pin I / O tramite un resistore. Questo resistore è chiamato resistore limitatore di corrente, questo resistore non è obbligatorio per un MSP430 perché la corrente massima che il pin I / O può generare è solo 6 mA e la tensione sul pin è solo 3,6 V. Tuttavia è una buona pratica usarli. Quando uno di questi pin digitali diventa alto, il rispettivo LED si accenderà. Se riesci a richiamare il programma LED dell'ultimo tutorial, ricorderai che digitalWrite (LED_pin_name, HIGH) farà illuminare il LED e digitalWrite (LED_pin_name, LOW) spegnerà il LED.
Gli interruttori sono il dispositivo di input, un'estremità dell'interruttore è collegata al terminale di terra e l'altra è collegata ai pin digitali P2.3 e P2.4. Ciò significa che ogni volta che premiamo il pulsante il pin I / O (2.3 o 2.4) verrà messo a terra e sarà lasciato libero se il pulsante non viene premuto. Vediamo come possiamo usare questa disposizione durante la programmazione.
Spiegazione della programmazione:
Il programma deve essere scritto per controllare l'8 LED in modo sequenziale quando si preme l'interruttore 1 e quindi quando si preme l'interruttore 2 la sequenza deve essere modificata. Il programma completo e il video dimostrativo si trovano in fondo a questa pagina. Più avanti spiegherò il programma riga per riga in modo che tu possa capirlo facilmente.
Come sempre dovremmo iniziare con la funzione void setup () all'interno della quale dichiareremmo che i pin che stiamo usando sono pin di input o output. Nel nostro programma vengono emessi gli 8 pin LED ei 2 interruttori sono gli ingressi. Questi 8 LED sono collegati da P1.0 a P2.1 che è il numero di pin da 2 a 9 sulla scheda. Quindi gli interruttori sono collegati al pin P2.3 e al pin 2.4 che è rispettivamente il numero di pin 11 e 12. Quindi abbiamo dichiarato quanto segue in void setup ()
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } for (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Come sappiamo, la funzione pinMode () dichiara il pin come output o input e la funzione digitalWrite () lo rende alto (ON) o basso (OFF). Abbiamo usato un ciclo for per rendere questa dichiarazione per ridurre il numero di righe. La variabile “i” sarà incrementato da 2 a 9 nella per verrà eseguito loop e per ogni incremento della funzione all'interno. Un'altra cosa che potrebbe confonderti è il termine " INPUT_PULLUP ". Un pin può essere dichiarato come input semplicemente chiamando la funzione pinMode (Pin_name, INPUT) ma qui abbiamo usato un INPUT_PULLUP invece di un INPUT ed entrambi hanno un cambiamento evidente.
Quando usiamo qualsiasi pin del microcontrollore, il pin deve essere collegato a basso o alto. In questo caso i pin 11 e 12 sono collegati all'interruttore che verrà collegato a massa quando premuto. Ma quando l'interruttore non è premuto il pin non è collegato a nulla, questa condizione è chiamata pin flottante ed è dannosa per i microcontrollori. Quindi, per evitare ciò, utilizziamo un resistore di pull-up o pull-down per mantenere il pin in uno stato quando diventa flottante. Nel microcontrollore MSP430G2553 i pin I / O hanno una resistenza di pull-up incorporata. Per usarlo tutto ciò che dobbiamo fare è chiamare INPUT_PULLUP invece di INPUT durante la dichiarazione, proprio come abbiamo fatto sopra.
Ora passiamo alla funzione void loop () . Qualunque cosa sia scritta in questa funzione verrà eseguita per sempre. Il primo passo nel nostro programma è controllare se l'interruttore è premuto e se premuto dovremmo iniziare a lampeggiare i LED in sequenza. Per verificare se il pulsante è premuto, viene utilizzata la riga seguente
if (digitalRead (12) == LOW)
Qui la nuova funzione è la funzione digitalRead () , questa funzione leggerà lo stato di un pin digitale e tornerà HIGH (1) quando il pin riceve un po 'di tensione e tornerà basso LOW (0) quando il pin è collegato a terra. Nel nostro hardware, il pin verrà messo a terra solo quando premiamo il pulsante altrimenti sarà alto poiché abbiamo utilizzato una resistenza di pull-up. Quindi usiamo l' istruzione if per verificare se il pulsante è stato premuto.
Una volta premuto il pulsante, entriamo nel ciclo infinito while (1) . È qui che iniziamo a far lampeggiare i LED in sequenza. Di seguito viene mostrato un ciclo while infinito e tutto ciò che è scritto all'interno del ciclo verrà eseguito per sempre fino a un'interruzione; viene utilizzata l'istruzione.
whiel (1) {}
All'interno dell'infinito mentre controlliamo lo stato del secondo interruttore che è collegato al pin 11.
Se questo interruttore viene premuto lampeggiamo il LED in una sequenza particolare, altrimenti lo lampeggeremo in un'altra sequenza.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); ritardo (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Per far lampeggiare il LED in sequenza usiamo di nuovo il ciclo for , ma questa volta usiamo un piccolo ritardo di 100 millisecondi usando la funzione delay (100) in modo che possiamo notare il LED che si alza. Per far illuminare un solo LED alla volta, usiamo anche un altro ciclo for per spegnere tutti i LED. Quindi accendiamo un led aspettiamo qualche tempo e poi spegniamo tutti i led poi incrementiamo il conteggio accendiamo il led aspettiamo qualche tempo e il ciclo prosegue. Ma tutto questo accadrà fintanto che non si preme il secondo interruttore.
Se si preme il secondo interruttore si cambia la sequenza, il programma sarà più o meno lo stesso previsto per la sequenza di cui si accende il led. Le linee sono mostrate di seguito provate a dare un'occhiata e capire cosa è stato cambiato.
altro {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); ritardo (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Sì, il ciclo for è stato modificato. In precedenza abbiamo fatto illuminare il LED dal numero 2 e fino al 9. Ma ora inizieremo dal numero 9 e decrementeremo fino al 2. In questo modo possiamo notare se l'interruttore è premuto o meno.
Configurazione hardware per sequenza LED lampeggiante:
Va bene abbastanza di tutta la teoria e la parte software. Prendiamo alcuni componenti e vediamo come appare questo programma in azione. Il circuito è molto semplice e quindi può essere facilmente costruito su una breadboard. Ma ho saldato il LED e gli interruttori sulla scheda perf solo per farlo sembrare pulito. La scheda perf che ho saldato è mostrata di seguito.
Come puoi vedere abbiamo i pin di uscita del LED e l'interruttore estratti come pin del connettore. Ora abbiamo usato i fili del connettore femmina-femmina per collegare i LED e gli interruttori alla scheda LaunchPad MSP430 come mostrato nell'immagine sotto.
Caricamento e lavoro:
Una volta terminato l'hardware, è sufficiente collegare la scheda MSP430 al computer, aprire l'IDE Energia e utilizzare il programma fornito in fondo a questa pagina. Assicurati che la scheda e la porta COM corrette siano selezionate nell'IDE Energia e fai clic sul pulsante Carica. Il programma dovrebbe essere compilato correttamente e una volta caricato mostrerà "Caricamento completato".
Ora premi il pulsante 1 sulla scheda e il LED dovrebbe accendersi in sequenza come mostrato di seguito
Puoi anche tenere premuto il secondo pulsante per verificare se la sequenza viene modificata. Il funzionamento completo del progetto è mostrato nel video sottostante. Se sei soddisfatto dei risultati, puoi provare ad apportare alcune modifiche al codice come alterare il tempo di ritardo, cambiare la sequenza, ecc. Questo ti aiuterà a imparare e capire meglio.
Spero che tu abbia capito il tutorial e imparato qualcosa di utile con esso. Se hai riscontrato problemi, non esitare a pubblicare la domanda nella sezione commenti o utilizzare i forum. Incontriamoci in un altro tutorial dove impareremo a leggere le tensioni analogiche utilizzando la nostra piattaforma di lancio MSP30.