Batak Machine: l'entrainement aux réflexes

Bonjour, si vous voulez voir un tutoriel de qualité montrant comment réaliser un tel projet extraordinaire vous pouvez aller voir sur ce lien, vous pouvez poser des questions ici ou sur le lien si ça vous intéresse.

Le tuto est maintenant terminé venez poser des questions dessus si ça vous intéresse merci.

Hello, I am interested to make batak pro. can you help me with it?

bonjour - sympa le partage - ce serait encore mieux de tout poster ici :slight_smile:

Quelques suggestions sur le code (qui se veulent constructives):

  • mettre tout ce qui concerne le temps dans des unsigned long (pour éviter les dépassements, même si je pense que vous ne verrez jamais le soucis puisqu'il faudrait laisser le jeu allumé plusieurs semaines avant que le pb ne se manifeste (ie millis() qui est un unsigned long va déborder sur un long et passer en négatif)

  • les séquences comme celle ci: while(digitalRead(bouton[0]) == LOW || digitalRead(bouton[1]) == LOW || digitalRead(bouton[2]) == LOW || digitalRead(bouton[3]) == LOW || digitalRead(bouton[4]) == LOW || digitalRead(bouton[5]) == LOW || digitalRead(bouton[6]) == LOW || digitalRead(bouton[7]) == LOW || digitalRead(bouton[8]) == LOW || digitalRead(bouton[9]) == LOW || digitalRead(bouton[10]) == LOW || digitalRead(bouton[11]) == LOW){..}sont couteuses en temps de calcul car digitalRead() est assez lent. --> explorez l'usage des PORTS pour la lecture d'un coup de 8 pins (vos 8 boutons)

  • vous pourriez déclarer les pins en const byte plutôt qu'en char

  • dans l'IDE arduino, appuyez sur ctrl-T, ça va indenter le code et faciliter sa lecture

  • vous pouvez économiser des résistances de pullup sur vos boutons en utilisant le mode INPUT_PULLUP sur pinMode()

  • quand vous écrivez ceci if(digitalRead(bouton[0]) == LOW){while(digitalRead(bouton[0])==LOW){}vous pourriez simplifier en écrivant justewhile(digitalRead(bouton[0])==LOW);

voilà - juste quelques idées d'amélioration

J-M-L:
bonjour - sympa le partage - ce serait encore mieux de tout poster ici :slight_smile:

Quelques suggestions sur le code (qui se veulent constructives):

  • mettre tout ce qui concerne le temps dans des unsigned long (pour éviter les dépassements, même si je pense que vous ne verrez jamais le soucis puisqu'il faudrait laisser le jeu allumé plusieurs semaines avant que le pb ne se manifeste (ie millis() qui est un unsigned long va déborder sur un long et passer en négatif)

  • les séquences comme celle ci: while(digitalRead(bouton[0]) == LOW || digitalRead(bouton[1]) == LOW || digitalRead(bouton[2]) == LOW || digitalRead(bouton[3]) == LOW || digitalRead(bouton[4]) == LOW || digitalRead(bouton[5]) == LOW || digitalRead(bouton[6]) == LOW || digitalRead(bouton[7]) == LOW || digitalRead(bouton[8]) == LOW || digitalRead(bouton[9]) == LOW || digitalRead(bouton[10]) == LOW || digitalRead(bouton[11]) == LOW){..}sont couteuses en temps de calcul car digitalRead() est assez lent. --> explorez l'usage des PORTS pour la lecture d'un coup de 8 pins (vos 8 boutons)

  • vous pourriez déclarer les pins en const byte plutôt qu'en char

  • dans l'IDE arduino, appuyez sur ctrl-Z, ça va indenter le code et faciliter sa lecture

  • vous pouvez économiser des résistances de pullup sur vos boutons en utilisant le mode INPUT_PULLUP sur pinMode()

  • quand vous écrivez ceci if(digitalRead(bouton[0]) == LOW){while(digitalRead(bouton[0])==LOW){}vous pourriez simplifier en écrivant justewhile(digitalRead(bouton[0])==LOW);

voilà - juste quelques idées d'amélioration

Bonjour, j'ai préféré poster le tuto sur ouiaremaker pour pouvoir participer à un concours arduino que j'ai gagné :slight_smile:
Je vous fait confiance pour les déclarations de variables, je ne sais pas toutes à quoi elles correspondent :confused:
Je ne connaissais pas l'utilisation des ports et je vais me renseigner dessus pour mes projets futurs
Je vois pas trop ce que vous voulez dire pour CTRL-Z, pour moi ce raccourcit permet de revenir en arrière non ?
Je n'ai pas déclaré les boutons en INPUT_PULLUP parce que on a déjà debouncé en hard et on a mis les résistances de pullup directement dans les interfaces
Et pour la séquence avec le if et le while je ne comprends pas en quoi le if peut etre supprimé, il sert a executer la commande qui suit une seule fois plutot que plusieurs fois dans le while
En tout cas merci pour ces conseils et je vais me renseigner sur les ports :wink:

Je vois pas trop ce que vous voulez dire pour CTRL-Z, pour moi ce raccourcit permet de revenir en arrière non ?

Je voulais dire ctrl-T :slight_smile:

Je n'ai pas déclaré les boutons en INPUT_PULLUP parce que on a déjà debouncé en hard et on a mis les résistances de pullup directement dans les interfaces

OK

Et pour la séquence avec le if et le while je ne comprends pas en quoi le if peut etre supprimé, il sert a executer la commande qui suit une seule fois plutot que plusieurs fois dans le while

Votre code c’est

if(digitalRead(bouton[0]) == LOW){while(digitalRead(bouton[0])==LOW){}

Donc si le bouton 0 est 0 low vous bouclez tant qu’il est à LOW. ça revient exactement au même mais plus court) de dire boucler tant que le bouton est à LOW.. s’il ne l’est pas en rentrant dans le while alors le while termine tout de suite, c’est comme votre if, sinon vous bouclez.

Quelques remarques de plus:

  • indentez (ctrl-T dans l’IDE arduino) le code et sautez des lignes, ça améliorera la lisibilité

  • Attention à l’usage des long au lieu de unsigned long partout où vous gérez le temps

  • attention le calcul des formules littérales se fait en entier 16 bits signés si pas de long ou unsigned long dans l’expression (Par exemple votre explication avec ... < 60 * 1000 ne marchera pas car 601000 ne fait pas 60000... il faut écrire 601000ul )

  • utilisez true et false pour les boolean pour être sémantiquement correct et ne pas dépendre de promotion

  • utilisez des noms parlants plutôt que les index de boutons pour ceux qui ont une fonction spéciale (comme vous le faites pour boutonStart - par exemple 10 et 11 pour le menu)- les pins sont mieux déclarées en const byte plutôt qu’en char