- Materiaal vereist:
- Schakelschema:
- Programmering Toelichting:
- Hardware-instellingen voor knipperende LED-volgorde:
- Uploaden en werken:
Dit is de tweede tutorial van een reeks tutorials waarin we de MSP430G2 LaunchPad van Texas Instruments leren met behulp van de Energia IDE. In de laatste Blinky LED-tutorial hebben we onszelf kennis laten maken met de LaunchPad Development Board en de Energia IDE, we hebben ook ons eerste programma geüpload dat de ingebouwde LED met regelmatige tussenpozen moet laten knipperen.
In deze tutorial zullen we leren hoe we de optie Digitaal lezen en Digitaal schrijven gebruiken om de status van een invoerapparaat zoals een schakelaar te lezen en meerdere uitgangen zoals LED's te besturen. Aan het einde van deze tutorial zou je hebben geleerd om te werken met digitale ingangen en uitgangen, die kunnen worden gebruikt om veel digitale sensoren zoals IR-sensor, PIR-sensor enz. Te koppelen en ook om uitgangen zoals LED, zoemer enz. In of uit te schakelen Klinkt interessant Rechtsaf!!? Laten we beginnen.
Materiaal vereist:
- MSP430G2 LaunchPad
- LED van elke kleur - 8
- Schakelaar - 2
- 1k weerstand - 8
- Draden aansluiten
Schakelschema:
In onze vorige tutorial hebben we gemerkt dat het lanceerplatform zelf wordt geleverd met twee LED's en een schakelaar op het bord. Maar in deze tutorial hebben we meer nodig, omdat we van plan zijn om acht LED-lampjes achter elkaar te laten branden wanneer een knop wordt ingedrukt. We zullen de volgorde ook wijzigen wanneer er op een andere knop wordt gedrukt, alleen om het interessant te maken. We moeten dus een circuit bouwen met 8 LED-lampjes en twee schakelaars, het volledige schakelschema vind je hieronder.
Hier zijn de 8 LED's de uitgangen en de twee schakelaars zijn de ingangen. We kunnen deze aansluiten op elke I / O-pin op het bord, maar ik heb de LRD's van pin P1.0 op P2.1 en schakelaar 1 en 2 op respectievelijk pin P2.4 en P2.3 aangesloten, zoals hierboven weergegeven.
Alle kathodepennen van de LED zijn verbonden met aarde en de anodepen is via een weerstand verbonden met de I / O-pinnen. Deze weerstand wordt een stroombegrenzende weerstand genoemd, deze weerstand is niet verplicht voor een MSP430 omdat de maximale stroom die de I / O-pin kan leveren slechts 6mA is en de spanning op de pin slechts 3,6V is. Het is echter een goede gewoonte om ze te gebruiken. Wanneer een van deze digitale pinnen hoog wordt, gaat de respectieve LED aan. Als u zich het laatste LED-programma van de tutorials kunt herinneren, dan zult u zich herinneren dat digitalWrite (LED_pin_name, HIGH) de LED laat gloeien en digitalWrite (LED_pin_name, LOW) de LED zal doen uitgaan .
De schakelaars zijn het invoerapparaat, het ene uiteinde van de schakelaar is verbonden met de aardklem en het andere is verbonden met digitale pinnen P2.3 en P2.4. Dit betekent dat elke keer dat we op de schakelaar drukken, de I / O-pin (2.3 of 2.4) wordt geaard en vrij blijft als de knop niet wordt ingedrukt. Laten we eens kijken hoe we deze opstelling kunnen gebruiken tijdens het programmeren.
Programmering Toelichting:
Het programma moet worden geschreven om de 8 LED's op volgorde te besturen wanneer schakelaar 1 wordt ingedrukt en wanneer schakelaar 2 wordt ingedrukt, moet de volgorde worden gewijzigd. Het volledige programma en de demonstratievideo vindt u onderaan deze pagina. Hieronder zal ik het programma regel voor regel uitleggen, zodat u het gemakkelijk kunt begrijpen.
Zoals altijd moeten we beginnen met de void setup () -functie waarin we zouden aangeven dat de pinnen die we gebruiken een invoer- of uitvoerpin zijn. In ons programma zijn de 8 LED pinnen output en de 2 schakelaars zijn inputs. Deze 8 LED's zijn verbonden van P1.0 naar P2.1 wat pennummer 2 tot 9 op het bord is. Vervolgens worden de schakelaars verbonden met pin P2.3 en Pin 2.4, respectievelijk pin nummer 11 en 12. Dus we hebben het volgende verklaard in ongeldige setup ()
void setup () {voor (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); }
Zoals we weten, verklaart de functie pinMode () dat de pin output of input is en maakt de functie digitalWrite () hem hoog (AAN) of laag (UIT). We hebben een for- lus gebruikt om deze declaratie te maken om het aantal regels te verminderen. De variabele "i" wordt opgehoogd van 2 naar 9 in de for- lus en voor elke verhoging wordt de functie binnenin uitgevoerd. Een ander ding dat u zou kunnen verwarren, is de term " INPUT_PULLUP ". Een pin kan als invoer worden gedeclareerd door gewoon de functie pinMode (Pin_name, INPUT) aan te roepen, maar hier hebben we een INPUT_PULLUP gebruikt in plaats van een INPUT en ze hebben allebei een merkbare verandering.
Wanneer we microcontroller-pinnen gebruiken, moet de pin op laag of te hoog worden aangesloten. In dit geval zijn de pennen 11 en 12 verbonden met de schakelaar die bij indrukken met aarde wordt verbonden. Maar als de schakelaar niet wordt ingedrukt, is de pin nergens mee verbonden, deze toestand wordt een zwevende pin genoemd en is slecht voor microcontrollers. Om dit te voorkomen, gebruiken we ofwel een pull-up of pull-down weerstand om de pin in een toestand te houden waarin hij zweeft. In de MSP430G2553 Microcontroller hebben de I / O-pinnen een ingebouwde pull-up-weerstand. Om dat te gebruiken, hoeven we alleen maar INPUT_PULLUP aan te roepen in plaats van INPUT tijdens de aangifte, net zoals we hierboven hebben gedaan.
Laten we nu naar de void loop () -functie gaan. Alles wat in deze functie wordt geschreven, wordt voor altijd uitgevoerd. De eerste stap in ons programma is om te controleren of de schakelaar is ingedrukt en als deze wordt ingedrukt, moeten we de LED's achter elkaar laten knipperen. Om te controleren of de knop is ingedrukt, wordt de volgende regel gebruikt
if (digitalRead (12) == LOW)
Hier is de nieuwe functie de functie digitalRead () , deze functie leest de status van een digitale pin en keert HOOG (1) terug als de pin wat spanning krijgt en keert terug laag LAAG (0) als de pin geaard is. In onze hardware wordt de pin alleen geaard als we op de knop drukken, anders zal hij hoog zijn omdat we een pull-up-weerstand hebben gebruikt. Dus gebruiken we het if statement om te controleren of de knop is ingedrukt.
Zodra de knop is ingedrukt, komen we in de oneindige while (1) -lus. Hier beginnen we de LED's achter elkaar te laten knipperen. Een oneindige while-lus wordt hieronder getoond en alles wat in de lus wordt geschreven, zal voor altijd doorlopen tot een pauze; statement wordt gebruikt.
whiel (1) {}
Binnenin het oneindige terwijl we kijken naar de status van de tweede schakelaar die is aangesloten op pin 11.
Als deze schakelaar wordt ingedrukt, knipperen we de LED in een bepaalde volgorde, anders knipperen we in een andere volgorde.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); vertraging (100); } voor (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Om de LED achtereenvolgens te laten knipperen, gebruiken we opnieuw de for- lus, maar deze keer gebruiken we een kleine vertraging van 100 milliseconden met behulp van de functie delay (100) , zodat we kunnen zien dat de LED hoog wordt. Om slechts één LED tegelijk te laten gloeien, gebruiken we ook een andere for- lus om alle LED's uit te schakelen. Dus we schakelen een led in, wachten enige tijd en schakelen dan alle leds uit en verhogen dan de telling, zet de led aan, wacht enige tijd en de cyclus gaat verder. Maar dit alles zal gebeuren zolang de tweede schakelaar niet wordt ingedrukt.
Als de tweede schakelaar wordt ingedrukt , veranderen we de volgorde, het programma zal min of meer hetzelfde zijn, behalve de volgorde waarvan de LED is ingeschakeld. De lijnen worden hieronder getoond, probeer een kijkje te nemen en uit te zoeken wat er is veranderd.
anders {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); vertraging (100); } voor (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Ja, de for- lus is gewijzigd. Eerder lieten we de LED gloeien vanaf nummer 2 en helemaal tot 9. Maar nu gaan we beginnen vanaf nummer 9 en verlagen we helemaal naar beneden tot 2. Op deze manier kunnen we zien of de schakelaar is ingedrukt of niet.
Hardware-instellingen voor knipperende LED-volgorde:
Oké genoeg van al het theorie- en softwaregedeelte. Laten we wat componenten nemen en kijken hoe dit programma er in actie uitziet. Het circuit is heel eenvoudig en kan daarom gemakkelijk op een breadboard worden gebouwd. Maar ik heb de LED gesoldeerd en de printplaat ingeschakeld om het er netjes uit te laten zien. Het perfboard dat ik heb gesoldeerd, wordt hieronder weergegeven.
Zoals je kunt zien hebben we de output pinnen van de LED en schakelaar eruit gehaald als connector pinnen. Nu hebben we de vrouw-naar-vrouw connector draden gebruikt om de LED's aan te sluiten en schakelt over naar het MSP430 LaunchPad-bord, zoals weergegeven in de onderstaande afbeelding.
Uploaden en werken:
Als u klaar bent met de hardware, sluit u gewoon uw MSP430-kaart aan op uw computer en opent u de Energia IDE en gebruikt u het programma aan het einde van deze pagina. Zorg ervoor dat het juiste bord en de juiste COM-poort zijn geselecteerd in de Energia IDE en klik op de knop Uploaden. Het programma zou met succes moeten worden gecompileerd en zodra het geüpload is, wordt "Klaar met uploaden" weergegeven.
Druk nu op knop 1 op het bord en de LED moet in volgorde gaan branden zoals hieronder weergegeven
U kunt ook de tweede knop ingedrukt houden om te controleren of de volgorde wordt gewijzigd. De volledige werking van het project wordt getoond in de onderstaande video. Als u tevreden bent met de resultaten, kunt u proberen enkele wijzigingen in de code aan te brengen, zoals het wijzigen van de vertragingstijd, het wijzigen van de volgorde enz. Dit zal u helpen om beter te leren en te begrijpen.
Ik hoop dat je de tutorial hebt begrepen en er iets nuttigs mee hebt geleerd. Als je een probleem hebt gehad, stel de vraag dan in het commentaargedeelte of gebruik de forums. Laten we elkaar ontmoeten in een andere tutorial, waar we leren hoe we analoge spanningen kunnen lezen met behulp van ons MSP30-lanceerplatform.