- 31 views
Cette application va vous permettre de réaliser un petit sablier animé à l'aide d'une carte Aurduino et de la matrice à led Click Board MIKROE-1993 7x10RClick. Celle-ci va de façon animée déverser son sable de haut en bas (comme le ferait un vrai sablier).

Les modules ClickBoard™ sont de petits modules additionnels développés par la société MikroElektronika. Ils sont conçus pour s’enficher facilement sur une multitude de cartes de développement via l’interface mikroBUS™, un standard matériel et logiciel pensé pour simplifier le prototypage. Elles permettent d’ajouter rapidement une fonctionnalité sans câblage complexe. Leur format DIL vous permettra également des les utiliser sur des plaques breadboard (boite de connexions sans soudure).
La présentation du module MIKROE-1993 utilisé dans l'application qui va suivre a déjà fait l'objet d'une description complète dans notre Blog Pilotage d'une matrice 70 leds avec un Arduino. Le raccordement entre l'Arduino et le module Click Board MIKROE-1993 7x10RClick reste identique à celui décrit dans le blog cité ci-avant.
Description du programme de gestion du sablier
Ce programme consiste à réaliser une « petite animation » sur la matrice à led (sous la forme d'un sablier qui s'écoule). Ceci revient en fait à afficher une suite de motifs qui se succèdent sur la matrice. Ce programme sera très similaire à celui réalisé dans le blog précédent et nous ne reviendrons donc pas sur toute la première partie liée aux initialisations ... mis à part sur les données mémorisées dans la variable de type matrice qui cette fois -ci ne représenteront plus un petit bateau à voile comme sur l'application précédente.. mais un« tas de sable » en forme de triangle (censé représenter le sablier). La représentation de ce sablier se fera non pas à l'horizontale ,mais à la verticale sur la matrice.
La modification importante que nous avons opéré pour ce programme est que nous avons désormais réalisé une fonction qui s'occupe exclusivement du rafraichissement de la matrice voidRmatrice(). Des lors, nous pourrons appeler cette fonction à tout moment pour afficher l'état du sablier sur la matrice. Le fonctionnement du sablier repose essentiellement sur l'étude de la boucle principale du programme. Son écoulement va consister à effacer tour à tour les 5 lignes du haut de la matrice pour les faire apparaître au bas de la matrice et ainsi simuler l'écoulement du sable. Il en résulte que le programme utilise une boucle de type for (byte sablier = 0 ; sablier < 5 ; sablier++) pour gérer l'écoulement des 5 lignes.

La fonction première d'un sablier étant de « mesurer » un temps, le programme à l'intérieur de la boucle commence par une temporisation qui servira de base de temps entre chaque écoulement. Le reflexe de base serait d'appeler la fonction de rafraichissement de la matrice (pour afficher l'état initial de la matrice).. puis d'ajouter une instruction delay (xx) pour générer une temporisation.
Toutefois, comme indiqué lors que l'application précédente, la gestion de la matrice nécessite que cette dernière soit rafraîchie en permanence afin qu'elle reste allumée (via l'effet de persistance rétinienne). Dans le cas présent, l'utilisation de l'instruction delay (xx) aurait eu pour effet de voir la matrice s'éteindre durant cette temporisation !
Il nous a donc fallu réaliser une temporisation au moyen d'une seconde boucle for () dans laquelle on incrémente une variable jusqu'à 99 et à chaque incrémentation, le programme appelle la fonction de rafraîchissement de la matrice afin quelle reste bien allumée durant toute la temporisation.
for (int Tempo = 0 ; Tempo < 100 ; Tempo++) {Rmatrice0;
La ligne qui suit dans le programme permet de transférer les données liées aux lignes des leds du haut de la matrice vers le bas de la matrice en « jouant » sur la valeur des index de la variable tableau Matrice[ ][] et via l'instruction bitWrite(), laquelle permet de modifier un bit particulier d'une variable.
for (byte i = 0 ; i < 7; i++) {bitWrite(Matrice[0][i],4-sablier,bitRead(Matrice[1][i],sablier));
L'instruction bitWrite() nécessite 3 paramètres pour pouvoir être utilisée.
Le premier paramètre concerne la variable pour laquelle on désire modifier l'état d'un bit (ici Matricel II ]), Le second paramètre concerne l'emplacement du bit : ici 0 à 6 pour sélectionner les 7 lignes. Le dernier paramètre concerne l'état que doit prendre le bit 0 ou 1. Dans notre cas, on recopie l'état de chaque led de la matrice du haut.
L'utilisation d'une mise à jour avec l'instruction bitWrite() s'impose car nous avons utilisé la matrice dans le sens vertical et nous avons été obligés de remettre à jour l'état des leds de chaque colonne de la matrice et non pas l'état d'une ligne complète de la matrice.
L'instruction qui suit dans le programme for (byte i = 0 ; i < 7; i++) {bitWrite(Matrice[1][i],sablier,0);} reprend le même pricipe pour éteindre successivement les leds de la matrice du haut en forçant le dernier paramètre de l'instruction bitWrite() a 0.
Le déroulement de la boucle for (byte sablier = 0 ; sablier < 5 ; sablier++) va donc réaliser l'écoulement du sable contenu dans la matrice du haut vers la matrice du bas. Au terme de cette boucle (qui indique la fin d'écoulement du sablier), le programme entame une boucle sans fin while(1) (Rmatrice); dans laquelle la platine « Flip & Click » ne fera que rafraîchir la matrice en permanence (afin qu'elle ne s'éteigne pas).
Si vous désirez « relancer » le sablier, il vous suffit simplement de solliciter le bouton-poussoir Reset de la platine Arduino.
Si vous voulez aller plus loin : Vous pouvez modifier la valeur de la temporisation du sablier pour parvenir à une durée de 3 mn et ajouter un signal sonore à l'aide d'un buzzer en fin de cycle afin de pouvoir réaliser une minuterie utilisable pour la cuisson de vos œufs à la coque !
Vous pouvez retrouver le code source de ce programme en cliquant ici : code source Arduino & modules Click Board
