Il faudrait commencer par savoir ce que tu cherches à faire.
Ce que j'en comprends est que ton compteur est utilisé pour diviser les impulsions du pwm. En d0, tu as pwn, en d1 pwm/2, en d2 pwm/4 jusqu'à pwm/16 en d4.
Les entrées S doivent recevoir la valeur de sélection de 0 à 4 pour sélectionner un des ces signaux. Je ne comprend pas pourquoi tu as une sortie vers la sortie du mux, ce ne serait pas plutôt une entrée de contrôle ?
Tu veux probablement qu'à chaque pression sur le bouton, on passe au signal suivant sur un modulo 4.
Ai-je bien tout compris ?
Pour commencer, la gestion du rebond de ton bouton devrait être matérielle. C'est faisable en soft avec une petite tempo de retard à la montée, mais pas top. Aussi, tu veux n'incrémenter ton compteur que sur front montant du bouton, n'oublie pas que loop() tourne en rond, il faut donc bien s'assurer de faire certaines actions sur un seul cycle. Là, ton compteur va s'incrémenter tant que le bouton est appuyé.
bool bt = false,//bouton
btMem = false;//memo sur bouton
/*** dans loop ***/
bt = digitalRead(x);
if(bt && !btMem)//si j'appuie et que je n'avais pas déjà appuyé
compteur = (compteur+1)%4;
btMem = bt;//je note dans un coin que j'ai appuyé
Il faut stocker les I/O dans des variables, lire toutes les entrées au début, puis écrire toutes les sorties à la fin, le traitement doit se faire sur les variables. Pour compter jusqu'à 4, un byte va suffire.
Bon, le choix des sorties de sélection du mux n'est pas terrible, pour avoir du code simple, il vaut mieux mettre les sorties dans l'ordre de poids mais on peut faire avec, chaque sortie 2 à 4 est un bit de compteur, il suffit de filtrer.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Bonhomme !! | Jeu de plateforme : Prototype.