Arduino anti rebond avec arduino
Affichage des résultats 1 à 14 sur 14

Arduino anti rebond avec arduino



Mode arborescent

  1. #1
    invited0bffa74

    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 à 20h23. Motif: Ajouté les balises code, obligatoires pour les programmes

Discussions similaires

  1. Communication arduino-arduino avec module Xbee
    Par inviteda9a8a4b dans le forum Électronique
    Réponses: 2
    Dernier message: 23/12/2013, 17h24
  2. probleme COM avec arduino
    Par invite14ce6ed4 dans le forum Électronique
    Réponses: 3
    Dernier message: 30/11/2012, 06h32
  3. Anti rebond avec flowcode programme toggle
    Par invite7f0bbcbf dans le forum Électronique
    Réponses: 3
    Dernier message: 28/10/2011, 13h45
  4. music avec arduino
    Par inviteb69b4ce8 dans le forum Électronique
    Réponses: 9
    Dernier message: 22/06/2010, 21h11
  5. stocker avec arduino
    Par inviteb69b4ce8 dans le forum Électronique
    Réponses: 10
    Dernier message: 16/06/2010, 15h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...