[Programmation] - Compte à rebours

Bien le bonjour

Alors pour ce qui est du code du compte à rebours je n'ai pas de soucis, j'utilise un TM1637 et à priori ça fonctionne très bien.

Je vous explique mon soucis, je souhaite faire un jeu de Simon (pas de soucis pour le code aussi), mais avec le compte à rebours qui tourne en parallèle du jeu.

Par exemple, dans le Setup, ça lance le compte à rebours et dans le Main, j'ai mon code du Simon, et un StopTimer quand le jeu de simon est réussi (le but est d'aller jusqu'à l'étape 8)

Je ne sais pas si j'ai été clair et je vous remercie par avance pour vos réponses

PetitChaman:
Je ne sais pas si j'ai été clair et je vous remercie par avance pour vos réponses

Pour moi pas clair du tout. Vous obligez vos lecteurs à faire une recherche pour savoir ce qu'est un "jeu de Simon" et un "TM1637". Pour ce dernier on s'attend à trouver un dispositif capable de gérer un "compte à rebours", donc une fonction de gestion du temps, puisque c'est ce que votre phrase laisse entendre. On se rend compte alors que le jeu de Simon est un ancien jeu où un joueur doit mémoriser une séquence d'un son ou allumage de plot lumineux (un parmi quatre) et la reproduire en appuyant sur les dits plots, et que le TM1637 est un décodeur pour afficheur sept segments à LEDs.
Est-ce vraiment compliqué d'expliquer votre problème de la manière dont je viens de le faire ? Croyez vous que dans votre vie professionnelle future (ou actuelle, je ne sais pas) il est normal que les gens aillent chercher sur Internet pour comprendre ce que vous voulez dire ?

Je vais être plus clair dans ce cas :

Si vous voulez que je colle mon programme dites le moi.

Mon code dans ma boucle principale est le suivant :

Lecture d'une séquence lumineuse
Boucle infini qui attend que le joueur appuie sur un bouton
Vérification que le bouton appuyé est le bon
Vérification que la séquence est la bonne
Incrémentation de la séquence

Et on retourne au début pour lire la séquence lumineuse.

Du coup mon programme est en pause tant que le joueur n'a pas appuyé sur un bouton, de ce fait, je ne peux pas en même temps être dans une autre boucle pour décrémenter mon compte à rebours.

J'espère avoir été plus clair en utilisant aucun terme spécifique

Ce n’est pas ce que j’ai compris de la description du jeu de Simon disponible sur Internet. L’électronique dans le jeu (arduino pour vous, OK) doit composer une séquence aléatoire : un mot de longueur n sur un alphabet de 4 lettres, ou si vous préférez une séquence de nombres entre 0 et 3. Il présente cette séquence au joueur à la fois par un son de la hauteur correspondante et un affichage par allumage d’un plot. Le joueur doit mémoriser cette séquence, puis la reproduire en appuyant sur les plots lumineux. Le jeu se poursuit en enchainant les séquences, chaque séquence ayant une longueur incrémentée par rapport à la précédente. Un décompte du temps mis par le joueur à reconstituer la séquence est effectué, pour limiter le temps dont il dispose. Est-ce bien ça le problème ? Ou si ce n’est pas ça, que signifie la première ligne de votre description “lecture d’une séquence lumineuse” ?

Mon problème est de pouvoir lancer deux taches indépendantes en parallèle.

  • le jeu de simon
  • le compte à rebours

Que les deux soient gérées par le même arduino (je pourrai en mettre deux), et en même temps.

Merci

Il y a diverses manières de faire ça. La plus simple dans votre cas est de programmer un timer pour qu'il donne une interruption à la seconde, et dans la routine d'interruption (ISR) vous décrémentez votre compte à rebours et vous pilotez vos afficheurs. Lorsque le compte à rebours est arrivé à zéro (fin de temps de saisie pour le joueur), vous mettez à jour un flag (booleen). Dans la tache de fond (boucle loop) vous gérez les appuis sur les boutons, le respect de la séquence, et vous testez en permanence le flag en question. Le mécanisme d'interruption vous permet de faire les deux choses en même temps sans avoir besoin d'aller chercher des choses plus compliquées.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.