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.

Sommaire

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 :                            

4 avis 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
  • 24 juin 2020 à 14 h 46 min
    Permalien

    Bonjour,
    Désolé, je n’utilise pas forcément le bon canal pour vous contacter, j’espère que vous ne m’en voudrez pas.
    Je suis un particulier de Nantes et j’ai besoin de faire développer et réaliser pour mon usage privé, un appareil qui :
    – réagit quand un bruit est émis à proximité (réaction à un seuil de niveau sonore réglable),
    – déclenche le fonctionnement d’un autre appareil pendant une durée réglable (typiquement, une petite pompe qui aspire de l’eau dans un bassin et la projette à 50 cm de haut ou une roue à aubes qui se met à tourner ou l’émission d’un son aléatoire). Le détecteur et les appareils esclaves doivent être distincts et communiquer sans fils,
    – fonctionne dans des plages horaires réglables,
    – fonctionne en extérieur (étanchéité minimale aux intempéries).
    – alimentation électrique par batteries.

    Je suis prêt à assurer une part du support technique au développement et à en financer le coût.

    Seriez-vous intéressé par ce genre de réalisation? Le cas échéant, connaitriez-vous un particulier ou une autre association qui seraient intéressés?

    Merci pour votre retour.

    Répondre

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.