|
Bas de page | |
---|---|
Auteur | Sujet : Arduino nano every vs copie BUG |
Publicité | Posté le 20-04-2023 à 13:41:54 |
rat de combat attention rongeur méchant! | T'as bien remis ton CD4543 je suppose? Dans le bon sens aussi?
--------------- Ne laissez pas mourir vos sujets en cours de route! |
rat de combat attention rongeur méchant! | Bon, y'a quelque soucis avec ce code...
me paraît pas bon, mais surtout: Tes BP ont ce qu'on appelle du "bounce", autrement dit si tu appuies dessus en réalité tu as plusieurs petits appuis brefs à cause de la mécanique du bouton. Du coup si tu mets une interruption directement tu vas avoir l'interruption qui s'exécute plusieurs fois, le nombre exact étant imprévisible.
--------------- Ne laissez pas mourir vos sujets en cours de route! |
froggycorp | Je ne saurais plus dire pour arduino, j'y ai peu utilisé les interruptions. Néanmoins il y a un problème de conception, dans une interruption, tu ne mets qu'un boolean et si tu veux vraiment être propre, tu désactives l'interruption dans l'interruption. Là, mettons que tu ais des micro coupures sur les 2 boutons, t es pas dans la merde --------- Je suis fainéant et j'ai pas envie de réécrire ton code, mais en gros, dans evenement_start() et evenement_reset(), tu ne mets que un truc genre "status_evenement_start_nommage_de_variable = true;cli();" (le cli est peut etre un peu trop trash mais faut ce qu'il faut ma bonne dame) Si tu as des micro contacts, tu peux rajouter un petit delay(); ---------- Sinon tu fais un compteur de bouton, donc dans l'interruption, tu fais juste un status_evenement_start ++; et tu remets à 0 dans ta boucle. Tu sauras déjà si ton bouton lance plusieurs fois l'INT ou pas ------------- Ton utilisation des for "fonctionnent" mais sont conceptuellement faux. En faite quand i = 0 et que tu fais i--, i = 255, d'où l'arrêt. Message cité 1 fois Message édité par froggycorp le 30-05-2023 à 21:48:12 |
rat de combat attention rongeur méchant! |
Attention, surtout pas pour les AVR, car c'est automatique! (Quand le µC exécute une INT il va désactiver le drapeau "I" dans le SREG et quand l'INT est terminée la dernière instruction "reti" mise par le compilateur va faire revenir le processeur là où il était ET réactiver les INT.) EDIT:
et en atomic access pour les vars > 8 bits. Message édité par rat de combat le 30-05-2023 à 21:45:22 --------------- Ne laissez pas mourir vos sujets en cours de route! |
froggycorp | Le but c'est de désactiver l'INT jusqu'à ce qu'il l'a traite dans le loop pour éviter qu'elle ne soit activer plusieurs fois avant traitement Dans son cas de figure (ancien, encore une fois ...), cela n'a pas d'intérêt de compter le nombre de micro contact.
|
Sujets relatifs | |
---|---|
Arduino Frein à main et pédalier | [DIY] Chronomètre Géant CD4543/ULN2003/Arduino |
arduino | Polargraph + arduino |
Recycler alim pc ? 5/7/12V pour rpi3, arduino, pompe etc.. | Conseils pour un nano PC avec un but spécifique |
shield relais arduino | controler un bandeau led rgb arduino et soft windows |
Probleme Robot Shield V2 Arduino UNO | aide arduino |
Plus de sujets relatifs à : Arduino nano every vs copie BUG |