Go Down

Topic: Batak Machine: l'entrainement aux réflexes (Read 1 time) previous topic - next topic

Meilleur_Fr

Mar 04, 2018, 01:12 pm Last Edit: Mar 04, 2018, 02:06 pm by Meilleur_Fr
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.
https://ouiaremakers.com/posts/tutoriel-diy-batak-machine-l-entrainement-aux-reflexes



Meilleur_Fr

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

Purnank

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

J-M-L

#3
May 27, 2018, 01:05 pm Last Edit: Aug 17, 2018, 04:29 pm by J-M-L
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 (ie millis() qui est un unsigned long va déborder sur un long et passer en négatif)

- les séquences comme celle ci:
Code: [Select]
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
Code: [Select]
if(digitalRead(bouton[0]) == LOW){while(digitalRead(bouton[0])==LOW){}vous pourriez simplifier en écrivant juste
Code: [Select]
while(digitalRead(bouton[0])==LOW);

voilà  - juste quelques idées d'amélioration
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Meilleur_Fr

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 (ie millis() qui est un unsigned long va déborder sur un long et passer en négatif)

- les séquences comme celle ci:
Code: [Select]
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
Code: [Select]
if(digitalRead(bouton[0]) == LOW){while(digitalRead(bouton[0])==LOW){}vous pourriez simplifier en écrivant juste
Code: [Select]
while(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  :smiley-confuse:
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  ;)

J-M-L

#5
Aug 17, 2018, 04:34 pm Last Edit: Aug 18, 2018, 11:54 pm by J-M-L
Quote
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 :)

Quote
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

Quote
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
Code: [Select]

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 60*1000 ne fait pas 60000... il faut écrire 60*1000ul )

- 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
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Go Up