Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

Arduino anti rebond avec arduino



  1. #1
    sari12

    Arduino anti rebond avec arduino


    ------

    Voici un programme que j'ai reussi a faire avec arduino, il marche parfaitement mais le seul probleme c'est lorsque j'appuie sur le bouton poussoir il ya un rebond donc il vas considéré que j'ai appuyé deux fois sur le bouton poussoir, j'ai beau essayé mais ça marche pas : Voici mon programme il sert à envoyé une trame DMX et lorsque l'on appui sur le bouton poussoir il se met en black out c'est a dire qu'il enverra une trame DMX à 0 ( la led s'allume pour montrer qu'on est en mode Blackout) :

    Code:
    // debut programme
    int DMX = 1;
    int Poussoir;
    volatile int state = HIGH; //Reglage du blackout au demarage
    #define FOSC 16000000 // fréquence du quartz
    #define BAUD 250000 //liaison serie
    #define MYUBRR FOSC/16/BAUD-1 // formule de UBRR
    void setup()
    {
      pinMode(1,OUTPUT);
      pinMode(5,OUTPUT);
      pinMode(13, OUTPUT); 
      USART_Init(MYUBRR); 
      attachInterrupt(0,memo,RISING);/*Si on a un front montant
    émis par le signal,la sortie state copiera son complément et donc 
    passera de « 0 » à « 1 » à chaque fois que l’on appuiera sur 
    le bouton poussoir.
      */
    
    
    }
    
    void USART_Init( unsigned int ubrr)
    {
      /*Set baud rate */
      UBRR0H = (unsigned char)(ubrr>>8);
      UBRR0L = (unsigned char)ubrr;
    
      /* Format de la trame 1 Bit de start,donnée et deux bits de stop */
      UCSR0C = (1<<USBS0)|(3<<UCSZ00);
    }
    void USART_Transmit( unsigned char data )
    {
      /* Wait for empty transmit buffer */
      while ( !( UCSR0A & (1<<UDRE0)) )
        ;
      /* Put data into buffer, sends the data */
      UDR0 = data;
    }
    void loop() {
      UCSR0B = 0;
      digitalWrite(5,state);
      digitalWrite(DMX,LOW); // break debut paquet
      delayMicroseconds(88);
      digitalWrite (DMX,HIGH); // MAB
      delayMicroseconds(10);
      UCSR0B = (1<<RXEN0)|(1<<TXEN0);// liaison 
      Poussoir=digitalRead(5);
    
      if ( Poussoir == 0) // envoie la trame DMX
      { 
    
        USART_Transmit(0); //SLOT 0
        USART_Transmit (0); // SLOT 1
        USART_Transmit(0); //SLOT 2
        USART_Transmit(255); // SLOT 3
        delayMicroseconds(200); // Temps entre les deux trames
        digitalWrite(13, LOW); //LED pour le blackout (eteind)
    
      }
      else  // Envoi une trame DMX à 0
      {
        USART_Transmit(0); //SLOT 0
        USART_Transmit(0);//SLOT 1
        USART_Transmit (0);// SLOT 2
        USART_Transmit(0);//SLOT 3
        delayMicroseconds(200); // temps entre les deux trames
        digitalWrite(13, HIGH); //LED pour le blackout (allumée)
    
      }
    
    }
    
    void memo () // Fonction permettant de complementer state
    {
      state = !state;
    }
    
    //Fin programme
    Merci d'avance

    -----
    Dernière modification par gienas ; 20/06/2014 à 21h23. Motif: Ajouté les balises code, obligatoires pour les programmes

  2. Publicité
  3. #2
    biloux911

    Re : Arduino anti rebond avec arduino

    Bonjour,

    Tu peux déjà ajouter un condensateur sur ton entrée d'Arduino.

    Ensuite tu peux aussi jouer avec une interruption sur "CHANGE" à la place de "RISING" et faire des DigitalRead == 0 ou 1 dans ta routine d'interruption, avec un système de flags tu peux faire un anti-rebond.

    P.S. n'hésites pas à utiliser les balises
    Code:
    [C0DE][/C0DE] avec un O à la place de 0
    Dernière modification par biloux911 ; 11/03/2014 à 17h16.

  4. #3
    Ridezebigone

    Re : Arduino anti rebond avec arduino

    c'est un peu bourrin la capa mais bon ...

    deux façon de gérer l'anti rebond :
    par hardware :
    http://www.instructables.com/id/Ardu...ng-Interrupts/
    demande des composants, de la place sur la carte, mais pas de bidouilles softs

    par software :
    http://www.instructables.com/id/Ardu...rupt-function/
    pas de composants sur la carte, mais du soft à écrire (plus souple d'utilisation). pour le principe : il faut interdire les interruptions pendant un certains temps une fois l'IT déclenchée, à toi de trouver 'le certain temps'

    choisi ton camp !

  5. #4
    sari12

    Re : Arduino anti rebond avec arduino

    J'ai fais ta méthode, j'ai rajouter une bobine à la sortie du bouton poussoir qui sera ensuite relié à l'entrée d'arduino mais ceci n'enleve pas totalement le rebond... et au niveau arduino je ne vois pas exactement quel ligne modifié.

  6. #5
    sari12

    Re : Arduino anti rebond avec arduino

    MAis si je met CHANGE à la place de RISING je devrais résté apuiyé sur le bouton poussoir pour activé le blackout et au relachement du bouton la trame s'enverra normalement...

  7. A voir en vidéo sur Futura
  8. #6
    sari12

    Re : Arduino anti rebond avec arduino

    J'ai essayé de faire la méthode avec le software je fais comme indique le programme mais rien n'y fait il ya toujours ce fichu rebond !!

  9. Publicité
  10. #7
    Adam_D

    Re : Arduino anti rebond avec arduino

    Bonjour,

    C'est une erreur de recopie ou toutes tes broches sont configurées en sortie?

  11. #8
    Adam_D

    Re : Arduino anti rebond avec arduino

    Par ailleurs, on n'utilise pas d'inductance (bobine) pour un anti-rebond, on utilise un condensateur et une résistance (éventuellement une diode comme sur le lien qui t'a été donné précédemment). Tu as peut être confondu le symbole de la résistance avec celui d'une inductance.

  12. #9
    Montd'est

    Re : Arduino anti rebond avec arduino

    Pour faire un anti rebond:

    C'est un condensateur et 2 résistances, pour obtenir un filtre passe bas + une résistance d'auto décharge:

    Ex: condo 100nF // résistance de décharge 200 k et 10 k pour la résistance du filtre .

    Ca marche très bien ce genre de truc avec les entrées d'horloge pour les bascules et tout ça...
    Dernière modification par Montd'est ; 20/06/2014 à 19h48.

  13. #10
    PA5CAL

    Re : Arduino anti rebond avec arduino

    Bonjour

    Ce n'est pas la première fois que le sujet est traité sur le forum. Quelques rappels :

    • L'anti-rebond matériel à base de condensateur nécessite une limitation du courant dans l'interrupteur à l'aide d'une résistance supplémentaire (comme l'a rappelé Montd'est).

    Il nécessite également une entrée présentant un cycle d'hystérésis (trigger de Schmitt), sinon le risque de rebonds à la fermeture est seulement réduit, pas supprimé.

    • L'anti-rebond logiciel peut être réalisé sans aucun composant externe hormis l'interrupteur (on peut utiliser la résistance de rappel interne du µC). Il consiste juste à ne plus prendre en compte l'état de l'entrée pendant une courte durée (quelques dizaines ou centaines de millisecondes) après la détection de la fermeture du contact.
    Dernière modification par PA5CAL ; 20/06/2014 à 20h36.

  14. #11
    PA5CAL

    Re : Arduino anti rebond avec arduino

    Concernant le code du programme, sa logique est à revoir. De ce que je comprends, des trames avec 255 sont envoyées sans interruption tant que le bouton est appuyé, et des trames avec 0 sont envoyées sans interruption tant que le bouton est relâché. Ça ne correspond pas à la description.

  15. #12
    gienas

    Re : Arduino anti rebond avec arduino

    Bonsoir à tous

    Citation Envoyé par Adam_D Voir le message
    ... C'est une erreur de recopie ou ...
    Certes, le problème posé n'est pas résolu, mais je crains qu'il ne soit jamais.

    sari12 n'est jamais revenu sur le forum depuis le 13 mars.

  16. Publicité
  17. #13
    paolo123

    Re : Arduino anti rebond avec arduino

    Essaye ca

    Code:
      if ( Poussoir == 0) // envoie la trame DMX
      { 
    
        delay_ms(100);
        while(poussoir==0); 
        delay_ms(100);
    
        // Code
    
      }

  18. #14
    admaltais

    Re : Arduino anti rebond avec arduino

    Bonjour tous,

    paolo123, j'avais le même problème et la simple boucle while a reglé mon problème.
    Le condensateur d'avant n'y changeait rien! Et j'ai testé à plusieurs endroits: avant le bouton, après le bouton, entre l'entrée INPUT et la résistance, ... mais toujours les rebonds.
    Étant un débutant, je me demande ce que la boucle peut faire durant le while, car du coup, quand je retire le doigt, donc plus while, il devrait avoir encore des rebonds (sans les delay), mais ça fonctionne?

    Code:
    const int led1=13;
    const int led2=12;
    
    const int btnPlus=2;
    const int btnMinus=3;
    
    int nbLed = 0;
    
    void setup(){
      pinMode (btnPlus, INPUT);
      pinMode (btnMinus, INPUT);
      pinMode (led1, OUTPUT);
      pinMode (led2, OUTPUT);
    }
    
    
    void loop(){
         
         if ( digitalRead(btnPlus) == LOW){  //bouton plus pushed 
           while(digitalRead(btnPlus) == LOW);
           nbLed++;
         }
         if (digitalRead(btnMinus) == LOW){  //bouton minus pushed
           while(digitalRead(btnMinus) == LOW);
           nbLed--;
         }
         if (nbLed>=2){
           nbLed = 2;
         } 
         if (nbLed<=0){
           nbLed = 0;
         }
         allumage(nbLed);
    }
    
    void allumage (int i){
        
        if (i == 0){
          digitalWrite(led2,HIGH);
          digitalWrite(led1,HIGH);
        }
        if (i == 1){
          digitalWrite(led1,LOW);
          digitalWrite(led2,HIGH);
        }
        if (i == 2){
          digitalWrite(led1,LOW);
          digitalWrite(led2,LOW);
        }
    }
    btn2PlusLed_bb.jpg

Sur le même thème :

Discussions similaires

  1. Communication arduino-arduino avec module Xbee
    Par TPESI22012 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 18h24
  2. probleme COM avec arduino
    Par alerganon dans le forum Électronique
    Réponses: 3
    Dernier message: 30/11/2012, 07h32
  3. Anti rebond avec flowcode programme toggle
    Par pdevel dans le forum Électronique
    Réponses: 3
    Dernier message: 28/10/2011, 14h45
  4. music avec arduino
    Par konobee dans le forum Électronique
    Réponses: 9
    Dernier message: 22/06/2010, 22h11
  5. stocker avec arduino
    Par konobee dans le forum Électronique
    Réponses: 10
    Dernier message: 16/06/2010, 16h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.