J’ai amélioré le code source de l’OctoAlert de mon fils pour lui ajouter des animations et un jeu de Simon.

Comme d’habitude le code est disponible sur github. Mais cette fois-ci je vais détailler certains points.

Le main

Le « main » du projet est relativement simple :

Donc à chaque cycle, on lis le entrées (les boutons), on demande à la « machine à état » de mettre à jour ses données, et on met à jour les sorties (les LEDs et le son). Tout simple !

Les états

iohierarchymanagerandstateshierarchy
Au niveau de l’architecture logicielle, j’ai implémenté un arbre de « machines à état ». Au démarrage, nous sommes dans l’état StandBy. Cet état n’a pas de durée particulière, il ne peut être interrompu que par l’appui d’un bouton. Ensuite il y a un état OctoAlert qui joue la musique et l’animation led du célèbre dessin animé, celui ci s’arrête lorsque le son se termine, on retourne alors à l’état parent. Il y a également un état OctoButton pour chaque personnage à chaque coin du boîtier. A chaque fois, une animation et un son sont joués. En outre, il y a un état Simon.
Ci-contre, la hiérarchie des états. c’est une hiérarchie d’implémentation et non une hiérarchie d’appel.

Les masques

ledmapping

Les masques que j’utilise un peu partout dans mon code sont une combinaison de masques type défini dans LedMapping.h. Ils font le lien entre des formes de base (le quart en haut à droite, le petit cercle) et les identifiants de chaque LED. Les identifiants figurent sur le graphique ci-contre.

Par exemple, voici quelques masque à utiliser et combiner :

Ainsi, si je veux allumer le quart en haut à droite du petit cercle uniquement (c’est à dire les leds 29, 28, 27 et 26), il me suffit d’utiliser en paramètre une combinaison de 2 masques : LED_MASK_TOP_RIGHT_QUARTER et LED_MASK_LITTLE_RING.

Rotation de masques

Pour les animations, j’ai notamment un certain nombre de rotations de masques à gérer. Ceci est fait par la fonction suivante dans la classe RotaryMask :

Enregistrer

L’animation de victoire dans le jeu de Simon

Donc pour faire l’animation de victoire du jeu de Simon (4 quarts de 4 couleurs différentes qui tournent), voici le code utilisé :

OctoAlert 2.0 : Jeu de Simon et animations
Étiqueté avec :                            

3 pesnées sur “OctoAlert 2.0 : Jeu de Simon et animations

  • Ping : Octo-Alerte : Un cadeau d'anniversaire unique - Bidouilles Factory

  • Stéph Anie
    19 novembre 2016 à 18 h 42 min
    Permalien

    CC nico! j’ai regardé ta vidéo! pas sûre de savoir apprécier la performance en matière de « technologie » mais j’ai cru comprendre que tu t’amusais bien!! ;-)) j’espère que vous allez bien? des bisous!!

    Répondre
  • Nicolas Lambert
    20 novembre 2016 à 11 h 03 min
    Permalien

    Salut Stéph ! Oui, je me suis bien amusé, mais c’était en janvier que je l’ai fait. Je n’ai pris le temps de faire une vidéo et un billet qu’hier. Tout va bien pour nous ! Donne moi des nouvelles en PV ! Bisous !

    Répondre

Laisser un commentaire