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
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 (iemillis()
qui est ununsigned long
va déborder sur unlong
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 cardigitalRead()
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'enchar
-
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
surpinMode()
-
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 iciQuelques 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 (iemillis()
qui est ununsigned long
va déborder sur unlong
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 cardigitalRead()
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'enchar
dans l'IDE arduino, appuyez sur
ctrl-Z
, ça va indenter le code et faciliter sa lecturevous pouvez économiser des résistances de pullup sur vos boutons en utilisant le mode
INPUT_PULLUP
surpinMode()
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é
Je vous fait confiance pour les déclarations de variables, je ne sais pas toutes à quoi elles correspondent
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
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
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