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) :
Merci d'avanceCode:// 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
-----