- Nødvendig materiale:
- Kretsdiagram:
- Programmeringsforklaring:
- Maskinvareoppsett for blinkende LED-sekvens:
- Laste opp og arbeide:
Dette er den andre opplæringen av en sekvens av opplæringen der vi lærer MSP430G2 LaunchPad fra Texas Instruments ved hjelp av Energia IDE. I den siste Blinky LED-opplæringen introduserte vi oss selv for LaunchPad Development Board og Energia IDE, og vi lastet også opp vårt første program som er å blinke lysdioden om bord med jevne mellomrom.
I denne opplæringen vil vi lære hvordan du bruker alternativet Digital lese og digital skriving for å lese statusen til en inngangsenhet som en bryter, og kontrollere flere utganger som LED-er. På slutten av denne opplæringen ville du ha lært å jobbe med digitale innganger og utganger, som kan brukes til å grensesnitt mange digitale sensorer som IR-sensor, PIR-sensor osv. Og også for å slå på eller av utganger som LED, summer osv. Høres interessant ut Ikke sant!!? La oss komme i gang.
Nødvendig materiale:
- MSP430G2 LaunchPad
- LED i alle farger - 8
- Bryter - 2
- 1k motstand - 8
- Koble ledninger
Kretsdiagram:
I vår forrige opplæring la vi merke til at startplaten i seg selv kommer med to lysdioder og en bryter på brettet. Men i denne opplæringen trenger vi mer enn det, ettersom vi planlegger å gløde åtte LED-lys i rekkefølge når du trykker på en knapp. Vi vil også endre sekvensen når du trykker på en annen knapp bare for å gjøre den interessant. Så vi må bygge en krets med 8 LED-lys og to brytere, det komplette kretsskjemaet finner du nedenfor.
Her er de 8 lysdiodene utgangene og de to bryterne er inngangene. Vi kan koble disse til hvilken som helst I / O-pinne på kortet, men jeg har koblet LRD-ene fra pin P1.0 til P2.1 og bytter 1 og 2 til henholdsvis pin P2.4 og P2.3 som vist ovenfor.
Alle katodepinnene på LED-en er bundet til jord og anodepinnen er koblet til I / O-pinnene gjennom en motstand. Denne motstanden kalles en strømbegrensende motstand, denne motstanden er ikke obligatorisk for en MSP430 fordi den maksimale strømmen det er I / O-pin kan kilden er bare 6mA og spenningen på pin er bare 3,6V. Det er imidlertid en god praksis å bruke dem. Når noen av disse digitale pinnene går høyt, vil den respektive LED-en slås på. Hvis du kan huske det siste opplærings-LED-programmet, vil du huske at digitalWrite (LED_pin_name, HIGH) vil gjøre at LED-en lyser og digitalWrite (LED_pin_name, LOW) vil slå på LED-en.
Bryterne er inngangsenheten, den ene enden av bryteren er koblet til jordterminalen og den andre er koblet til digitale pinner P2.3 og P2.4. Dette betyr at når vi trykker på bryteren, vil I / O-pinnen (2.3 eller 2.4) være jordet og vil være ledig hvis ikke knappen trykkes. La oss se hvordan vi kan bruke dette arrangementet mens vi programmerer.
Programmeringsforklaring:
Programmet må skrives for å kontrollere 8 LED på en sekvens måte når bryteren 1 trykkes, og når bryteren 2 trykkes, må sekvensen endres. Hele programmet og demonstrasjonsvideoen finner du nederst på denne siden. Videre nedenfor vil jeg forklare programmet linje for linje slik at du enkelt kan forstå det.
Som alltid bør vi begynne med tomrumsoppsettet () -funksjonen der vi vil erklære at pinnene vi bruker er inngangs- eller utgangsstift. I vårt program kommer de 8 LED-pinnene ut og de to bryterne er innganger. Disse 8 lysdiodene er koblet fra P1.0 til P2.1, som er pin nummer 2 til 9 på kortet. Deretter kobles bryterne til pin P2.3 og Pin 2.4 som er henholdsvis pin nummer 11 og 12. Så vi har erklært følgende i ugyldig oppsett ()
ugyldig oppsett () {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 vet, erklærer pinMode () -funksjonen at pinnen skal sendes ut eller inngås, og digitalWrite () -funksjonen gjør den høy (ON) eller low (OFF). Vi har brukt en for loop for å gjøre denne erklæringen for å redusere antallet for linjer. Variabelen “i” økes fra 2 til 9 i for- sløyfen, og for hvert trinn økes funksjonen inni. En annen ting som kan forvirre deg er begrepet “ INPUT_PULLUP ”. En pin kan deklareres som inngang ved å bare ringe funksjonen pinMode (Pin_name, INPUT), men her har vi brukt en INPUT_PULLUP i stedet for en INPUT, og de har begge en merkbar endring.
Når vi bruker noen mikrocontrollerpinner, skal pinnen enten være koblet til lav eller høy. I dette tilfellet er pinnen 11 og 12 koblet til bryteren som vil bli koblet til bakken når den trykkes. Men når bryteren ikke trykkes, er ikke pinnen koblet til noe, denne tilstanden kalles en flytende pinne, og det er dårlig for mikrokontrollere. Så for å unngå dette bruker vi enten en pull-up eller pull-down motstand for å holde tappen til en tilstand når den kommer i flytende. I MSP430G2553 mikrokontroller har I / O-pinnene en innebygd motstand. For å bruke alt vi trenger å gjøre er å ringe INPUT_PULLUP i stedet for INPUT under erklæring, akkurat som vi har gjort ovenfor.
La oss nå gå inn i void loop () -funksjonen. Uansett hva som er skrevet i denne funksjonen, vil den bli utført for alltid. Det første trinnet i programmet vårt er å sjekke om bryteren trykkes, og hvis du trykker på, bør vi begynne å blinke lysdiodene i rekkefølge. Følgende linje brukes for å sjekke om knappen er trykket
hvis (digitalRead (12) == LAV)
Her er den nye funksjonen digitalRead () -funksjonen, denne funksjonen vil lese statusen til en digital pin og vil returnere HIGH (1) når pinnen får litt spenning og vil returnere lav LAV (0) når pinnen er jordet. I maskinvaren vår vil stiften bare være jordet når vi trykker på knappen, ellers vil den være høy siden vi har brukt en opptrekksmotstand. Så vi bruker if- setningen for å sjekke om knappen ble trykket.
Når knappen er trykket, kommer vi inn i den uendelige mens (1) sløyfen. Det er her vi begynner å blinke lysdiodene i rekkefølge. En uendelig mens sløyfe vises nedenfor, og det som er skrevet inne i sløyfen, vil løpe for alltid til en pause; uttalelse brukes.
whiel (1) {}
Inne i det uendelige mens vi ser etter statusen til den andre bryteren som er koblet til pin 11.
Hvis du trykker på denne bryteren, blinker vi LED-en i en bestemt sekvens, ellers vil vi blinke den i en annen sekvens.
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 å blinke LED-en i rekkefølge bruker vi igjen for- loop, men denne gangen bruker vi en liten forsinkelse på 100 millisekunder ved hjelp av forsinkelsesfunksjonen (100) , slik at vi kan merke at LED-en blir høy. For å få bare en LED til å lyse om gangen bruker vi også en annen for loop for å slå av all LED. Så vi slår på en ledet ventetid i noen tid, og slår deretter av all lysdioden, og øker tellingen. Slå på lysdioden vent en stund, og syklusen fortsetter. Men alt dette vil skje så lenge den andre bryteren ikke trykkes.
Hvis den andre bryteren trykkes på, endrer vi sekvensen, programmet vil være mer eller mindre det samme som forventet for den sekvensen som LED-en slås på. Linjene er vist nedenfor, prøv å ta en titt og finne ut hva som er endret.
annet {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); forsinkelse (100); } for (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Ja, for- løkken er endret. Tidligere fikk vi lysdioden til å lyse fra nummer 2 og helt opp til 9. Men nå skal vi starte fra nummer 9 og redusere helt ned til 2. På denne måten kan vi merke om bryteren trykkes eller ikke.
Maskinvareoppsett for blinkende LED-sekvens:
Greit nok av all teoridelen og programvaredelen. La oss få noen komponenter og se hvordan dette programmet ser ut i aksjon. Kretsen er veldig enkel og kan derfor enkelt bygges på et brødbrett. Men jeg har loddet LED og slår på perf-kortet bare for å få det til å se pent ut. Perfektbrettet som jeg loddet er vist nedenfor.
Som du ser har vi utgangspinnene på LED-lampen og bryteren tatt ut som kontaktpinner. Nå har vi brukt kvinnelige til kvinnelige kontaktledninger for å koble lysdiodene og bryterne til MSP430 LaunchPad-kortet som vist på bildet nedenfor.
Laste opp og arbeide:
Når du er ferdig med maskinvaren, er det bare å koble MSP430-kortet til datamaskinen og åpne Energia IDE og bruke programmet gitt på slutten av denne siden. Forsikre deg om at riktig kort og COM-port er valgt i Energia IDE, og klikk på Last opp-knappen. Programmet skal samles vellykket, og når det er lastet opp, vises "Ferdig opplasting".
Trykk nå på knapp 1 på tavlen, og LED-en skal lyse i rekkefølge som vist nedenfor
Du kan også holde den andre knappen for å sjekke om sekvensen blir endret. Fullstendig bearbeiding av prosjektet er vist i videoen nedenfor. Hvis du er fornøyd med resultatene, kan du prøve å gjøre noen endringer i koden, som å endre forsinkelsestiden for å endre sekvensen osv. Dette vil hjelpe deg å lære og forstå bedre.
Håper du har forstått veiledningen og lært noe nyttig med den. Hvis du har hatt problemer, kan du gjerne legge inn spørsmålet i kommentarseksjonen eller bruke forumene. La oss møtes i en annen opplæring hvor vi lærer å lese analoge spenninger ved hjelp av MSP30-lanseringsplaten.