- Nødvendigt materiale:
- Kredsløbsdiagram:
- Programmeringsforklaring:
- Hardwareopsætning til blinkende LED-sekvens:
- Upload og arbejde:
Dette er den anden tutorial i en sekvens af tutorial, hvor vi lærer MSP430G2 LaunchPad fra Texas Instruments ved hjælp af Energia IDE. I den sidste Blinky LED-tutorial introducerede vi os selv til LaunchPad Development Board og Energia IDE, vi uploadede også vores første program, som er at blinke lysdioden om bord med jævne mellemrum.
I denne vejledning lærer vi, hvordan du bruger Digital Read og Digital Write- indstillingen til at læse status for en inputenhed som en switch og styre flere udgange som LED'er. I slutningen af denne vejledning ville du have lært at arbejde med digitale indgange og udgange, som kan bruges til at interface mange digitale sensorer som IR-sensor, PIR-sensor osv. Og også til at tænde eller slukke for udgange som LED, summer osv. Det lyder interessant ret!!? Lad os komme igang.
Nødvendigt materiale:
- MSP430G2 LaunchPad
- LED i enhver farve - 8
- Afbryder - 2
- 1k modstand - 8
- Tilslutning af ledninger
Kredsløbsdiagram:
I vores tidligere vejledning bemærkede vi, at selve startpladen kommer med to LED'er og en kontakt på tavlen. Men i denne vejledning har vi brug for mere end det, da vi planlægger at tænde otte LED-lys i en rækkefølge, når der trykkes på en knap. Vi vil også ændre rækkefølgen, når der trykkes på en anden knap bare for at gøre det interessant. Så vi er nødt til at bygge et kredsløb med 8 LED-lys og to kontakter, det komplette kredsløbsdiagram kan findes nedenfor.
Her er de 8 lysdioder output og de to kontakter er input. Vi kan forbinde disse til enhver I / O-pin på kortet, men jeg har tilsluttet LRD'erne fra pin P1.0 til P2.1 og skifter 1 og 2 til henholdsvis pin P2.4 og P2.3 som vist ovenfor.
Alle katodestifterne på LED'en er bundet til jorden, og anodestiften er forbundet til I / O-stifterne gennem en modstand. Denne modstand kaldes en strømbegrænsende modstand, denne modstand er ikke obligatorisk for en MSP430, fordi den maksimale strøm det er I / O-pin kan kilde er kun 6mA og spændingen på pin er kun 3,6V. Det er dog en god praksis at bruge dem. Når nogen af disse digitale stifter går højt, tændes den respektive LED. Hvis du kan huske det sidste tutorials LED-program, vil du huske, at digitalWrite (LED_pin_name, HIGH) får LED til at lyse, og digitalWrite (LED_pin_name, LOW) vil tænde for LED.
Kontakterne er inputenheden, den ene ende af kontakten er forbundet til jordterminalen, og den anden er tilsluttet digitale stifter P2.3 og P2.4. Dette betyder, at når vi trykker på kontakten, vil I / O-stiften (2.3 eller 2.4) være jordforbundet og vil være fri, hvis der ikke trykkes på knappen. Lad os se, hvordan vi kan bruge dette arrangement under programmering.
Programmeringsforklaring:
Programmet skal skrives for at styre 8 LED på en rækkefølge, når der trykkes på kontakten 1, og når der trykkes på kontakt 2, skal sekvensen ændres. Det komplette program og demonstrationsvideoen findes nederst på denne side. Længere nedenfor vil jeg forklare programmet linje for linje, så du let kan forstå det.
Som altid skal vi starte med funktionen tomrumsopsætning () , hvori vi erklærer, at de ben, vi bruger, er input eller output pin. I vores program udgives de 8 LED-ben og de 2 kontakter er indgange. Disse 8 lysdioder er tilsluttet fra P1.0 til P2.1, som er pin nummer 2 til 9 på kortet. Derefter forbindes afbryderne til pin P2.3 og Pin 2.4, der er henholdsvis pin nummer 11 og 12. Så vi har erklæret følgende i ugyldig opsætning ()
ugyldig opsætning () {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); }
Som vi ved, erklærer pinMode () -funktionen, at pin'en skal udgives eller input, og digitalWrite () -funktionen gør den høj (ON) eller lav (OFF). Vi har brugt en for loop til at afgive denne erklæring for at reducere antallet for linjer. Variablen “i” forøges fra 2 til 9 i for- sløjfen, og for hver forøgelse udføres funktionen indeni. En anden ting, der kan forvirre dig, er udtrykket “ INPUT_PULLUP ”. En pin kan erklæres som input ved blot at kalde funktionen pinMode (Pin_name, INPUT), men her har vi brugt en INPUT_PULLUP i stedet for en INPUT, og de har begge en mærkbar ændring.
Når vi bruger mikrokontroller-ben, skal stiften enten være forbundet til lav eller høj. I dette tilfælde er stiften 11 og 12 forbundet til afbryderen, der forbindes til jorden, når den trykkes. Men når der ikke trykkes på kontakten, er stiften ikke forbundet til noget, denne tilstand kaldes en flydende stift, og det er dårligt for mikrokontrollere. Så for at undgå dette bruger vi enten en pull-up eller pull-down modstand til at holde stiften i en tilstand, når den kommer i flydende tilstand. I MSP430G2553 mikrokontroller har I / O-stifterne en indbygget modstandsmodstand. For at bruge det er alt, hvad vi skal gøre, at ringe til INPUT_PULLUP i stedet for INPUT under erklæring ligesom vi har gjort ovenfor.
Lad os nu gå ind i void loop () -funktionen. Uanset hvad der er skrevet i denne funktion, vil den blive udført for evigt. Det første trin i vores program er at kontrollere, om der trykkes på kontakten, og hvis der trykkes på, skal vi begynde at blinke lysdioderne i rækkefølge. Følgende linje bruges til at kontrollere, om der trykkes på knappen
hvis (digitalRead (12) == LAV)
Her er den nye funktion digitalRead () -funktionen, denne funktion vil læse status for en digital pin og returnere HIGH (1), når pinen får noget spænding, og vil returnere lavt LAV (0), når pin er jordforbundet. I vores hardware vil stiften kun være jordforbundet, når vi trykker på knappen, ellers er den høj, da vi har brugt en pull-up-modstand. Så vi bruger if- sætningen til at kontrollere, om der blev trykket på knappen.
Når der er trykket på knappen, kommer vi ind i det uendelige mens (1) løkke. Det er her, vi begynder at blinke lysdioderne i rækkefølge. En uendelig mens løkke vises nedenfor, og hvad der er skrevet inde i løkken, vil løbe for evigt indtil en pause; erklæring bruges.
whiel (1) {}
Inde i det uendelige, mens vi kontrollerer status for den anden switch, der er forbundet til pin 11.
Hvis der trykkes på denne kontakt, blinker vi LED'en i en bestemt rækkefølge, ellers blinker vi den i en anden rækkefølge.
hvis (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); forsinkelse (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
For at blinke LED i rækkefølge bruger vi igen for- loop, men denne gang bruger vi en lille forsinkelse på 100 millisekunder ved hjælp af forsinkelsesfunktionen (100) , så vi kan bemærke, at LED'en bliver høj. For kun at få en LED til at lyse ad gangen bruger vi også en anden til loop til at slukke for alle LED'erne. Så vi tænder en ledet ventetid i et stykke tid og slukker derefter for alle LED'erne, hvorefter antallet øges, tænder for LED-ventetiden i nogen tid, og cyklussen fortsætter. Men alt dette sker, så længe den anden kontakt ikke trykkes.
Hvis der trykkes på den anden kontakt, ændrer vi sekvensen, programmet vil være nogenlunde det samme som forventet for den rækkefølge, som LED'en er tændt for. Linjerne er vist nedenfor, prøv at kigge og finde ud af, hvad der er ændret.
ellers {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); forsinkelse (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Ja, for- sløjfen er blevet ændret. Tidligere fik vi LED'en til at lyse fra nummer 2 og helt op til 9. Men nu skal vi starte fra nummer 9 og mindske helt ned til 2. På denne måde kan vi bemærke, om kontakten trykkes ned eller ej.
Hardwareopsætning til blinkende LED-sekvens:
Okay nok af al teori- og softwaredelen. Lad os få nogle komponenter og se, hvordan dette program ser ud i aktion. Kredsløbet er meget simpelt og kan derfor let bygges på et brødbræt. Men jeg har loddet LED'en og tændt perf-boardet bare for at få det til at se pænt ud. Perfbrættet, som jeg lodde, er vist nedenfor.
Som du kan se, har vi udgangsstifterne på LED'en og kontakten taget ud som stikben. Nu har vi brugt hun- til hunstikledningerne til at forbinde lysdioderne og skifte til MSP430 LaunchPad-kortet som vist på billedet nedenfor.
Upload og arbejde:
Når du er færdig med hardwaren, skal du bare forbinde dit MSP430-kort til din computer og åbne Energia IDE og bruge det program, der er angivet i slutningen af denne side. Sørg for, at det rigtige kort og COM-port er valgt i Energia IDE, og klik på Upload-knappen. Programmet skal kompileres med succes, og når det er uploadet, vises "Udført upload".
Tryk nu på knappen 1 på tavlen, og LED'en skal lyse i rækkefølge som vist nedenfor
Du kan også holde den anden knap nede for at kontrollere, om sekvensen bliver ændret. Den komplette bearbejdning af projektet vises i videoen nedenfor. Hvis du er tilfreds med resultaterne, kan du prøve at foretage nogle ændringer i koden, som f.eks. At ændre forsinkelsestiden for at ændre sekvensen osv. Dette hjælper dig med at lære og forstå bedre.
Håber du har forstået vejledningen og lært noget nyttigt med det. Hvis du har haft problemer, er du velkommen til at skrive spørgsmålet i kommentarfeltet eller bruge foraene. Lad os mødes i en anden tutorial, hvor vi lærer at læse analoge spændinger ved hjælp af vores MSP30-startplade.