- Matériel requis:
- Schéma:
- Explication de la programmation:
- Configuration matérielle pour la séquence de voyants clignotants:
- Téléchargement et travail:
Ceci est le deuxième tutoriel d'une séquence de tutoriels dans laquelle nous apprenons le LaunchPad MSP430G2 de Texas Instruments à l'aide de l' IDE Energia. Dans le dernier tutoriel sur les LED Blinky, nous nous sommes présentés à la carte de développement LaunchPad et à l'IDE Energia, nous avons également téléchargé notre premier programme qui consiste à faire clignoter la LED embarquée à intervalles réguliers.
Dans ce didacticiel, nous allons apprendre à utiliser les options de lecture numérique et d'écriture numérique pour lire l'état d'un périphérique d'entrée comme un commutateur et contrôler plusieurs sorties comme des LED. À la fin de ce didacticiel, vous auriez appris à travailler avec les entrées et sorties numériques, qui peuvent être utilisées pour interfacer de nombreux capteurs numériques comme le capteur IR, le capteur PIR, etc. et également pour activer ou désactiver les sorties comme la LED, le buzzer, etc. droite!!? Commençons.
Matériel requis:
- LaunchPad MSP430G2
- LED de n'importe quelle couleur - 8
- Commutateur - 2
- Résistance 1k - 8
- Fils de connexion
Schéma:
Dans notre tutoriel précédent, nous avons remarqué que la rampe de lancement elle-même est livrée avec deux LED et un interrupteur sur la carte. Mais dans ce tutoriel, nous allons avoir besoin de plus que cela, car nous prévoyons d' allumer huit lumières LED dans une séquence lorsqu'un bouton est enfoncé. Nous allons également changer la séquence lorsqu'un autre bouton est pressé juste pour le rendre intéressant. Nous devons donc construire un circuit avec 8 lumières LED et deux interrupteurs, le schéma complet du circuit se trouve ci-dessous.
Ici, les 8 LED sont les sorties et les deux interrupteurs sont les entrées. Nous pouvons les connecter à n'importe quelle broche d'E / S de la carte, mais j'ai connecté les LRD de la broche P1.0 à P2.1 et les commutateurs 1 et 2 aux broches P2.4 et P2.3 respectivement comme indiqué ci-dessus.
Toutes les broches de cathode de la LED sont reliées à la terre et la broche d'anode est connectée aux broches d'E / S via une résistance. Cette résistance s'appelle une résistance de limitation de courant, cette résistance n'est pas obligatoire pour un MSP430 car le courant maximum que sa broche d'E / S peut fournir n'est que de 6 mA et la tension sur la broche est de 3,6 V. Cependant, il est recommandé de les utiliser. Lorsque l'une de ces broches numériques devient élevée, la LED correspondante s'allume. Si vous pouvez vous rappeler le dernier programme LED des tutoriels, vous vous souviendrez que digitalWrite (LED_pin_name, HIGH) fera briller la LED et digitalWrite (LED_pin_name, LOW) éteindra la LED.
Les commutateurs sont le périphérique d'entrée, une extrémité du commutateur est connectée à la borne de terre et l'autre est connectée aux broches numériques P2.3 et P2.4. Cela signifie que chaque fois que nous appuyons sur l'interrupteur, la broche d'E / S (2.3 ou 2.4) sera mise à la terre et sera laissée libre si le bouton n'est pas enfoncé. Voyons comment nous pouvons utiliser cet arrangement lors de la programmation.
Explication de la programmation:
Le programme doit être écrit pour contrôler les 8 LED de manière séquentielle lorsque le commutateur 1 est enfoncé, puis lorsque le commutateur 2 est enfoncé, la séquence doit être modifiée. Le programme complet et la vidéo de démonstration se trouvent au bas de cette page. Plus loin, j'expliquerai le programme ligne par ligne afin que vous puissiez le comprendre facilement.
Comme toujours, nous devrions commencer par la fonction void setup () à l'intérieur de laquelle nous déclarerions les broches que nous utilisons comme broches d'entrée ou de sortie. Dans notre programme, les 8 broches LED sont sorties et les 2 interrupteurs sont des entrées. Ces 8 LED sont connectées de P1.0 à P2.1 qui est la broche numéro 2 à 9 sur la carte. Ensuite, les commutateurs sont connectés aux broches P2.3 et 2.4, qui sont respectivement les broches 11 et 12. Nous avons donc déclaré ce qui suit dans void setup ()
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } pour (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Comme nous le savons, la fonction pinMode () déclare que la broche est sortie ou entrée et la fonction digitalWrite () la rend haut (ON) ou bas (OFF). Nous avons utilisé une boucle for pour faire cette déclaration afin de réduire le nombre de lignes. La variable « i » est incrémenté de 2 à 9 dans la de boucle et pour chaque incrément à l' intérieur de la fonction est exécutée. Une autre chose qui pourrait vous dérouter est le terme « INPUT_PULLUP ». Une broche peut être déclarée comme entrée en appelant simplement la fonction pinMode (Pin_name, INPUT) mais ici nous avons utilisé un INPUT_PULLUP au lieu d'une INPUT et ils ont tous deux un changement notable.
Lorsque nous utilisons des broches de microcontrôleur, la broche doit être connectée à faible ou à élevé. Dans ce cas, les broches 11 et 12 sont connectées à l'interrupteur qui sera connecté à la masse lorsqu'il est enfoncé. Mais lorsque l'interrupteur n'est pas enfoncé, la broche n'est connectée à rien, cette condition est appelée une broche flottante et elle est mauvaise pour les microcontrôleurs. Donc, pour éviter cela, nous utilisons une résistance pull-up ou pull-down pour maintenir la broche dans un état lorsqu'elle devient flottante. Dans le microcontrôleur MSP430G2553, les broches d'E / S ont une résistance de rappel intégrée. Pour utiliser cela, tout ce que nous avons à faire est d'appeler INPUT_PULLUP au lieu de INPUT lors de la déclaration, comme nous l'avons fait ci-dessus.
Passons maintenant à la fonction void loop () . Tout ce qui est écrit dans cette fonction sera exécuté pour toujours. La première étape de notre programme consiste à vérifier si l'interrupteur est enfoncé et s'il est enfoncé, nous devons commencer à faire clignoter les LED en séquence. Pour vérifier si le bouton est enfoncé, la ligne suivante est utilisée
if (digitalRead (12) == LOW)
Ici, la nouvelle fonction est la fonction digitalRead () , cette fonction lira l'état d'une broche numérique et retournera HIGH (1) lorsque la broche reçoit une certaine tension et retournera bas LOW (0) lorsque la broche est mise à la terre. Dans notre matériel, la broche ne sera mise à la terre que lorsque nous appuierons sur le bouton, sinon elle sera élevée car nous avons utilisé une résistance de rappel. Nous utilisons donc l' instruction if pour vérifier si le bouton a été enfoncé.
Une fois le bouton enfoncé, nous entrons dans la boucle infinie while (1) . C'est là que nous commençons à faire clignoter les LED en séquence. Une boucle while infinie est montrée ci-dessous et tout ce qui est écrit à l'intérieur de la boucle fonctionnera pour toujours jusqu'à une pause; instruction est utilisée.
whiel (1) {}
À l'intérieur de l'infini pendant que nous vérifions l'état du deuxième interrupteur qui est connecté à la broche 11.
Si ce commutateur est enfoncé, nous clignotons la LED dans une séquence particulière, sinon nous la ferons clignoter dans une autre séquence.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); retard (100); } pour (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Pour faire clignoter la LED en séquence, nous utilisons à nouveau la boucle for , mais cette fois nous utilisons un petit délai de 100 millisecondes en utilisant la fonction delay (100) afin que nous puissions remarquer que la LED devient haute. Pour faire briller une seule LED à la fois, nous utilisons également une autre boucle for pour éteindre toutes les LED. Nous allumons donc une led attendre pendant un certain temps, puis éteignons toutes les LED puis incrémentons le compte, allumons la LED attendez pendant un certain temps et le cycle continue. Mais tout cela se produira tant que le deuxième interrupteur n'est pas enfoncé.
Si le deuxième interrupteur est enfoncé, nous changeons la séquence, le programme sera plus ou moins le même que celui attendu pour la séquence dont la LED est allumée. Les lignes sont montrées ci-dessous, essayez de jeter un œil et de comprendre ce qui a été changé.
else {pour (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); retard (100); } pour (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Oui, la boucle for a été modifiée. Auparavant, nous faisions briller la LED du numéro 2 jusqu'à 9. Mais maintenant, nous allons commencer à partir du numéro 9 et décrémenter jusqu'à 2. De cette façon, nous pouvons remarquer si l'interrupteur est enfoncé ou non.
Configuration matérielle pour la séquence de voyants clignotants:
Bon assez de toute la théorie et la partie logicielle. Prenons quelques composants et voyons à quoi ressemble ce programme en action. Le circuit est très simple et peut donc être facilement construit sur une maquette. Mais j'ai soudé la LED et les commutateurs sur la carte de performance juste pour lui donner un aspect soigné. La carte de performance que j'ai soudée est illustrée ci-dessous.
Comme vous pouvez le voir, nous avons les broches de sortie de la LED et du commutateur retirées en tant que broches de connecteur. Nous avons maintenant utilisé les fils de connecteur femelle à femelle pour connecter les LED et les commutateurs à la carte LaunchPad MSP430, comme indiqué dans l'image ci-dessous.
Téléchargement et travail:
Une fois que vous avez terminé avec le matériel, connectez simplement votre carte MSP430 à votre ordinateur et ouvrez l'IDE Energia et utilisez le programme donné à la fin de cette page. Assurez-vous que la bonne carte et le bon port COM sont sélectionnés dans Energia IDE et cliquez sur le bouton Télécharger. Le programme devrait être compilé avec succès et une fois téléchargé, il affichera «Done Uploading».
Maintenant, appuyez sur le bouton 1 sur la carte et la LED devrait s'allumer dans l'ordre comme indiqué ci-dessous
Vous pouvez également maintenir le deuxième bouton enfoncé pour vérifier si la séquence est modifiée. Le fonctionnement complet du projet est montré dans la vidéo ci-dessous. Si vous êtes satisfait des résultats, vous pouvez essayer de faire des changements dans le code, comme modifier le temps de retard, changer la séquence, etc. Cela vous aidera à mieux apprendre et à mieux comprendre.
J'espère que vous avez compris le tutoriel et appris quelque chose d'utile avec. Si vous avez rencontré un problème, n'hésitez pas à poster la question dans la section commentaires ou à utiliser les forums. Rencontrons-nous dans un autre tutoriel où nous apprendrons à lire les tensions analogiques à l'aide de notre rampe de lancement MSP30.