- Material necesar:
- Diagrama circuitului:
- Explicație de programare:
- Configurare hardware pentru secvența LED intermitentă:
- Încărcare și funcționare:
Acesta este al doilea tutorial al unei secvențe de tutoriale în care învățăm MSP430G2 LaunchPad de la Texas Instruments folosind Energia IDE. În ultimul tutorial Blinky LED ne-am prezentat sinele la LaunchPad Development Board și Energia IDE, am încărcat și primul nostru program, care este să clipim LED-ul de la bord la un interval regulat.
În acest tutorial vom învăța cum să folosim opțiunea de citire digitală și scriere digitală pentru a citi starea unui dispozitiv de intrare ca un comutator și pentru a controla mai multe ieșiri, cum ar fi LED-urile. La sfârșitul acestui tutorial ați fi învățat să lucrați cu intrări și ieșiri digitale, care pot fi utilizate pentru interfața mai multor senzori digitali, cum ar fi senzorul IR, senzorul PIR etc. dreapta!!? Să începem.
Material necesar:
- MSP430G2 LaunchPad
- LED de orice culoare - 8
- Comutator - 2
- Rezistor 1k - 8
- Conectarea firelor
Diagrama circuitului:
În tutorialul nostru anterior, am observat că platforma de lansare în sine vine cu două LED-uri și un comutator pe placă. Dar în acest tutorial vom avea nevoie de mai mult decât atât, deoarece intenționăm să aprindem opt lumini LED într-o secvență atunci când este apăsat un buton. De asemenea, vom schimba secvența atunci când este apăsat un alt buton doar pentru a-l face interesant. Deci, trebuie să construim un circuit cu 8 lumini LED și două comutatoare, diagrama completă a circuitului poate fi găsită mai jos.
Aici cele 8 LED-uri sunt ieșirile și cele două comutatoare sunt intrările. Le putem conecta la orice pin I / O de pe placă, dar am conectat LRD-urile de la pinul P1.0 la P2.1 și comutăm 1 și 2 la pinul P2.4 și respectiv P2.3 așa cum se arată mai sus.
Toți pinii catodici ai LED-ului sunt legați la sol și pinul anodic este conectat la pinii I / O printr-un rezistor. Acest rezistor se numește rezistor de limitare a curentului, acest rezistor nu este obligatoriu pentru un MSP430, deoarece curentul maxim pe care îl poate sursa pinul I / O este de numai 6mA și tensiunea pe pin este de numai 3,6V. Cu toate acestea, este o bună practică să le folosiți. Când oricare dintre acești pini digitali se ridică, LED-ul respectiv se va aprinde. Dacă vă puteți aminti ultimul tutorial cu programul LED, atunci vă veți aminti că digitalWrite (LED_pin_name, HIGH) va face LED-ul să strălucească și digitalWrite (LED_pin_name, LOW) va porni LED-ul.
Comutatoarele sunt dispozitivul de intrare, un capăt al comutatorului este conectat la terminalul de masă, iar celălalt este conectat la pinii digitali P2.3 și P2.4. Aceasta înseamnă că ori de câte ori apăsăm comutatorul pinul I / O (2.3 sau 2.4) va fi legat la pământ și va fi lăsat liber dacă nu este apăsat butonul. Să vedem cum putem folosi acest aranjament în timpul programării.
Explicație de programare:
Programul trebuie scris pentru a controla cele 8 LED-uri într-o manieră secvențială atunci când comutatorul 1 este apăsat și apoi când comutatorul 2 este apăsat, secvența trebuie schimbată. Programul complet și videoclipul demonstrativ pot fi găsite în partea de jos a acestei pagini. Mai jos, voi explica programul rând cu rând, astfel încât să îl puteți înțelege cu ușurință.
Ca întotdeauna ar trebui să începem cu funcția void setup () în cadrul căreia am declara pinii pe care îi folosim este pinul de intrare sau de ieșire. În programul nostru sunt scoase cele 8 pini LED și cele 2 comutatoare sunt intrări. Aceste 8 LED-uri sunt conectate de la P1.0 la P2.1, care este pinul 2 la 9 de pe placă. Apoi comutatoarele sunt conectate la pinul P2.3 și pinul 2.4, care este pinul numărul 11 și respectiv 12. Deci, am declarat următoarele în setarea nulă ()
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } pentru (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
După cum știm, funcția pinMode () declară pinul ca ieșire sau intrare, iar funcția digitalWrite () îl face ridicat (PORNIT) sau scăzut (OPRIT). Am folosit o buclă for pentru a face această declarație pentru a reduce numărul de linii. Variabila „i“ va fi incrementat 2 - 9 în FOR buclă și pentru fiecare creștere interior funcția va fi executată. Un alt lucru care vă poate deruta este termenul „ INPUT_PULLUP ”. Un pin poate fi declarat ca intrare doar prin apelarea funcției pinMode (Pin_name, INPUT), dar aici am folosit un INPUT_PULLUP în loc de un INPUT și ambele au o schimbare vizibilă.
Când folosim orice pini de microcontroler, pinul trebuie fie conectat la scăzut, fie la înalt. În acest caz pinii 11 și 12 sunt conectați la comutatorul care va fi conectat la masă atunci când este apăsat. Dar când comutatorul nu este apăsat pinul nu este conectat la nimic, această condiție se numește pin plutitor și este rău pentru microcontrolere. Deci, pentru a evita acest lucru, fie folosim un rezistor pull-up sau pull-down pentru a ține pinul într-o stare când acesta intră în plutire. În microcontrolerul MSP430G2553 pinii I / O au un rezistor de tragere încorporat. Pentru a utiliza acest lucru, tot ce trebuie să facem este să apelați INPUT_PULLUP în loc de INPUT în timpul declarației, așa cum am făcut mai sus.
Acum, intrăm în funcția de buclă void () . Orice este scris în această funcție va fi executat pentru totdeauna. Primul pas din programul nostru este să verificăm dacă butonul este apăsat și dacă este apăsat ar trebui să începem să clipim LED-urile în ordine. Pentru a verifica dacă butonul este apăsat, se folosește următoarea linie
if (digitalRead (12) == LOW)
Aici noua funcție este funcția digitalRead () , această funcție va citi starea unui pin digital și va reveni la HIGH (1) atunci când pinul primește o anumită tensiune și va reveni la scăzut LOW (0) când pinul este împământat. În hardware-ul nostru, pinul va fi împământat numai atunci când apăsăm butonul, altfel va fi ridicat, deoarece am folosit un rezistor de tragere. Deci, folosim declarația if pentru a verifica dacă butonul a fost apăsat.
Odată ce butonul este apăsat intrăm în bucla infinită while (1) . Aici începem să clipim LED-urile în ordine. O buclă while infinită este prezentată mai jos și orice este scris în buclă va rula pentru totdeauna până la o pauză; se folosește declarația.
care (1) {}
În interiorul infinitului, în timp ce verificăm starea celui de-al doilea comutator care este conectat la pinul 11.
Dacă este apăsat acest comutator, clipim LED-ul într-o anumită secvență, altfel îl vom clipi într-o altă secvență.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); întârziere (100); } pentru (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Pentru a clipi LED-ul în ordine, folosim din nou bucla for , dar de data aceasta folosim o mică întârziere de 100 de milisecunde folosind funcția de întârziere (100) , astfel încât să putem observa că LED-ul se ridică. Pentru a face să strălucească un singur LED la un moment dat, folosim și altul pentru buclă pentru a opri tot LED-ul. Deci, pornim o așteptare cu led pentru o perioadă de timp și apoi oprim tot LED-ul, apoi creștem numărul de pornire a ledului, așteaptă ceva timp și ciclul continuă. Dar toate acestea se vor întâmpla atâta timp cât al doilea comutator nu este apăsat.
Dacă este apăsat al doilea comutator, atunci schimbăm secvența, programul va fi mai mult sau mai puțin același așteptat pentru secvența la care LED-ul este aprins. Liniile sunt prezentate mai jos, încercați să aruncați o privire și să aflați ce a fost schimbat.
else {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); întârziere (100); } pentru (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Da, bucla for a fost modificată. Anterior am făcut LED-ul să strălucească de la numărul 2 și până la 9. Dar acum vom începe de la numărul 9 și vom reduce până la 2. În acest fel putem observa dacă butonul este apăsat sau nu.
Configurare hardware pentru secvența LED intermitentă:
Bine, din partea teoriei și a software-ului. Să luăm câteva componente și să vedem cum arată acest program în acțiune. Circuitul este foarte simplu și, prin urmare, poate fi construit cu ușurință pe o placă de calcul. Dar am lipit LED-urile și comutatoarele de pe placa perfectă doar pentru a face să pară îngrijit. Tabloul de perfecție pe care l-am lipit este prezentat mai jos.
După cum puteți vedea, pinii de ieșire ai LED-ului și comutatorul sunt scoși ca pinii conectorilor. Acum folosim firele conectorului de la mamă la mamă pentru a conecta LED-urile și comutatoarele la placa MSP430 LaunchPad așa cum se arată în imaginea de mai jos.
Încărcare și funcționare:
Odată ce ați terminat cu hardware-ul, conectați-vă placa MSP430 la computer și deschideți Energia IDE și utilizați programul oferit la sfârșitul acestei pagini. Asigurați-vă că placa corectă și portul COM sunt selectate în Energia IDE și faceți clic pe butonul Încărcare. Programul ar trebui să fie compilat cu succes și, odată încărcat, va apărea „Încărcare finalizată”.
Acum apăsați butonul 1 de pe tablă și LED-ul ar trebui să se aprindă în ordine, după cum se arată mai jos
De asemenea, puteți ține al doilea buton pentru a verifica dacă secvența se schimbă. Lucrarea completă a proiectului este prezentată în videoclipul de mai jos. Dacă sunteți mulțumit de rezultate, puteți încerca să faceți unele modificări în cod, cum ar fi modificarea timpului de întârziere schimbarea secvenței etc. Acest lucru vă va ajuta să învățați și să înțelegeți mai bine.
Sper că ați înțeles tutorialul și ați învățat ceva util cu acesta. Dacă v-ați confruntat cu o problemă, vă rugăm să nu ezitați să postați întrebarea în secțiunea de comentarii sau să utilizați forumurile. Să ne întâlnim într-un alt tutorial unde vom învăța cum să citim tensiunile analogice folosind platforma de lansare MSP30.