Jouer avec les leds
Nous allons maintenant explorer d'autres méthodes pour jouer avec les led.
Sur les cartes Uno, Due et sur la plupart des autres cartes compatibles Arduino, en dehors de la Led "Power" (si elle existe) qui indique que la carte est alimentée, il n'y a qu'une seule Led pilotable, connectée en général sur la Pin D13. Mais il y a des cartes qui ont des Leds accessibles supplémentaires : les carte compatibles Arduino Leonardo et ses dérivées (Pro micro, LeoDongle, et autre cartes basées sur le micro-contrôleur Atmega32U4). Ces cartes ont souvent 2 Leds supplémentaires pour indiquer qu'il y a des transferts de données qui s’opèrent sur le port USB : RxLed et TxLed.
Vous verrez ces Leds s'activer si vous utilisez le port série virtuel USB de ces cartes pour votre application, ou tout simplement lorsque vous allez téléverser un programme. Ces Leds peuvent être utilisées également pour votre application, dans la mesure ou vous ne vous servez pas du port série virtuel USB.
Dans les exemples qui suivent, nous allons cependant nous restreindre à l'utilisation de la Led D13, présente sur pratiquement toutes les cartes. L’exception est la carte LeoDongle, qui n'a pas de Led connectée sur D13, et sur laquelle on ne peut utiliser que la pin RxLed(D17).
- Commencez par supprimer tous les modules de l'interface ("Ctrl-A" puis "Suppr").
- Ajoutez un premier module "SW Timer", comme celui que vous avez ajouté dans le tutoriel "Premiers Pas", mais cette fois ci, ne configurez pas la pin, laissez là sur "Not used". Choisissez 10 Hz comme fréquence.
- Ajoutez un module "Digital Out" (groupe "Output"), glissez le dans l'interface puis configurez le en choisissant la pin "D13" ou celle sur laquelle il y une Led sur la carte que vous utilisez.
- Enfin reliez la sortie du module "SW Timer" à l'entrée de ce module "Digital Out".
Vous devriez avoir ceci :
Exportez le code et téléversez le, vous devriez avoir une Led qui clignote exactement comme dans le tutoriel précédent, la seule différence c'est que vous avez appris comment relier des modules entre eux !
Maintenant sélectionnez le module "SW Timer1" et dupliquez le en tapant "Ctrl-C" puis "Ctrl-V", puis posez le nouveau module à gauche des autres modules.
- Ouvrez les propriétés de ce nouveau module, renommez le en "SW Timer2", puis choisissez 1 Hz comme fréquence.
- Enfin reliez la sortie de ce module à l'entrée de "SW Timer1".
Vous devriez avoir ceci :
Exportez le code et téléversez le, vous devriez avoir une Led qui clignote très brièvement une fois toutes les secondes.
Maintenant explorons les possibilités de combinaisons des signaux avec une porte logique :
- supprimez tous les liens entre les modules en cliquant dessus puis en tapant "Suppr"
- rajoutez un module "And" que vous trouverez dans le groupe "Logic"
- réalisez les connexions suivantes :
Exportez le code et téléversez le, vous devriez avoir une Led qui clignote très rapidement 5 fois toutes les secondes pendant une demi seconde (n'essayez pas de compter, faites moi confiance lol).
Essayons maintenant une autre façon de jouer avec une led :
- Supprimez tous les modules.
- Ajoutez un module "Analog Out" (groupe "Output"), glissez le dans l'interface puis configurez le en choisissant la pin "D13". Si vous utilisez un Teensy et que vous avez bien sélectionné "Teensy" comme carte, vous ne trouverez pas la pin D13. C'est normal, car les Teensy n'ont pas de fonctionnalité PWM sur la pin D13. Vous ne pourrez donc pas pour ces cartes utiliser cette méthode (donc passez la méthode suivante).
- à gauche de ce module, ajoutez un autre module "Generator" (groupe "Synth", tout en bas de la barre latérale), configurez le type sur "Sine" et la fréquence sur 1 Hz. Laissez les autres paramètres par défaut.
- Reliez la sortie du module "Generator1" à l'entrée "Analog Out1".
vous devriez maintenant avoir ceci :
Exportez le code et téléversez le, vous devriez avoir une Led qui clignote doucement de manière continue, au lieu d'être juste allumée ou éteinte.
Si vous utilisez un Teensy, ou si vous voulez réaliser cet exemple sur n'importe quelle pin de n'importe quelle carte, il va falloir utiliser un autre module "Generator", configuré en mode PWM. Ce module réalise en fait une PWM de manière logicielle, elle ne pourra donc pas monter aussi haut en fréquence qu'une PWM matérielle (qui peut monter au delà de 20 KHz, voir plus sur certaines cartes). Nous verrons plus loin comment utiliser les PWM pour contrôler des moteurs.
- Supprimez le module "Analog Out1"
- prenez à nouveau un module "Digital Out", glissez le dans l'interface puis configurez le en choisissant la pin "D13" ou celle sur laquelle il y une Led sur la carte que vous utilisez.
- entre ce module et le module "Generator1" créé précédemment, ajoutez à nouveau un module "Generator", renommez le "Generator2", configurez son type sur "PWM" et sa fréquence sur 100 Hz. Laissez les autres paramètres par défaut.
- Reliez la sortie du module "Generator1" à l'entrée "Duty" du "Generator2", et la sortie de "Generator2" à l'entrée "Digital Out1".
- Rafraîchissez la page, par exemple en tapant "F5", cela va mettre à jour le dessin des générateurs pour représenter le type de signal.
vous devriez maintenant avoir ceci :
Exportez le code et téléversez le, vous devriez avoir une Led qui clignote doucement de manière continue, au lieu d'être juste allumée ou éteinte.
Grace à tous ces exemples pour les Leds, vous avez pu découvrir quelques modules de Node Blue. Vous devez commencer à sentir l'esprit de cet outil et les possibilités infinies qu'il offre.
Mais ces exemples sont plus que juste des exemples. Vous verrez au cours des tutoriaux suivants que nous utiliserons très souvent les Led pour tester des processus, car elles permettent de visualiser un état booléen (0 ou 1), mais aussi une grandeur "Analogique" en faisant varier leur intensité.
Petite parenthèse sur le terme "Analogique".
J'ai mis des guillemets autour de "Analogique", car c'est un peu un abus de language ici. Dans l'environnement Arduino, la fonction "analogWrite" utilise les PWM matérielles des cartes, à une fréquence comprise en général entre 500 et 1000 Hz. Le module "Analog Out" de Node Blue utilise cette fonction.
Quand ce type de signal arrive sur une Led, la persistance rétinienne de nos yeux nous donne l'impression que l'intensité peut être réglée de manière continue entre 0 et 255 (c'est la plage de valeurs qu'on peut utiliser analogWrite). Cependant si vous branchez ce signal sur un amplificateur afin de piloter un moteur ou un haut-parleur, vous allez entendre un sifflement parasite à la fréquence de la PWM. C'est d'ailleurs pour cette raison qu'on essaie de monter la fréquence des PWM au delà de 20 KHz quand on pilote de moteurs, car notre oreille en général n'entend plus au delà (sauf pour les très jeunes, et plus on vieillit plus la fréquence max qu'on perçoit diminue). Les Amplificateurs audio de classe D,E ou F utilisent également cette technique car elle permet d'avoir un très bon rendement et un coût de fabrication réduit par rapport aux Amplificateurs de classe A, B ou C.
Sur les cartes compatibles Arduino Due, Zero, sur les Teensy et sur pas mal de cartes plus récentes, il y a un ou plusieurs "DAC" (CNA en Français), qui méritent plus l'appellation "Analogique", car ils ne produisent pas de fréquences parasites. Bien sûr ils ont leur limitations aussi, car ils ont forcément une résolution finie (en général de 8 à 24 bits), peuvent présenter des non-linéarités, et s'ils sont alimentés par un mauvaise source de tension, ils vont transmettre les parasites qu'on leur envoie. Mais si on veut faire de l'audio ou si les fréquences parasites générées par le PWM sont gênantes, il faudra utiliser des DACs. Pour l'instant Node Blue ne gère pas les DACs, mais c'est prévu dans le futur (en attendant, pour faire de l'audio, utilisez l'excellent outil de PJRC, l'Audio System Design Tool)
Nous allons maintenant continuer notre découverte des modules, et faire le tour des entrées/sorties numériques et "Analogiques".