Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sorties d'un multiplexeur

Sujet résolu
    4 mars 2021 à 16:23:05

    Bonjour , 

    J'ai un code arduino à rendre pour un tp mais je suis un peu bloqué sur les sorties du multiplexeurs

    int valeur_pwm=0;//valeur pwm
    char buzzer=12;//pin buzzer
    int bouton=7;//pin bouton
    int etat;//etat bouton
    int compteur=0;
    int rebond =millis();
    int derniertemps=0;
    int sortiemux=12;
    
    
    void setup() {
    pinMode(sortiemux,OUTPUT);
    
    pinMode(4,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(2,OUTPUT);
    
    
    
    digitalWrite(4,HIGH);
    digitalWrite(5,HIGH);
    digitalWrite(3,HIGH);
    digitalWrite(2,HIGH);
    
    
    }
    
    void loop() {
    analogWrite(valeur_pwm,980);
    etat=digitalRead(bouton);
    
    if(etat==HIGH && rebond-derniertemps>100)
     compteur++;
    
    if(compteur>4)
    compteur=0;
    }
    
    if(compteur==0)
    {
    digitalWrite(3,bitRead(,
    }
    
    if(compteur==1)
    {
    //Sortie mux 3
    
    }
    
    
    if(compteur==2)
    {
    //Sortie mux 2
    
    }
    
    if(compteur==3)
    {
    digitalWrite(3,bitRead(0,4);
    
    }
    
    if(compteur==4)
    {
    //Sortie mux 0
    
    }
    
    tone(buzzer,valeur_pwm);
    delay(1000);
    noTone(buzzer);
    
    }



    • Partager sur Facebook
    • Partager sur Twitter
      6 mars 2021 à 10:10:36

      Salut,

      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.

      Bonne continuation.

      -
      Edité par drx 6 mars 2021 à 10:12:24

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

      Sorties d'un multiplexeur

      × 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.
      • Editeur
      • Markdown