Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define LED1 2
- #define LED2 3
- #define LED3 4
- #define LED4 5
- #define LED5 6
- #define LED1FLASH 500 // changement d'etat on / off toutes les 500ms
- #define LED2FLASH 1000
- #define LED3FLASH 1500
- #define LED4FLASH 2000
- #define LED5FLASH 2500
- //tableau qui comprenne les différent port digital des LEDs
- uint8_t digitalPort[5] ={2,3,4,5,6};
- //tableau qui contient la durée du flash pour chaque LED
- uint16_t tempoLed[5] = {LED1FLASH, LED2FLASH,LED3FLASH,LED4FLASH,LED5FLASH};
- //tableau qui enregistrera le nombre de cycle de delenchement de 5ms par led
- volatile uint16_t _compteurTempsLED[5]={0,0,0,0,0};
- void setup () {
- // Configuration du Timer (TIMER 1 16BIT)
- // on interdit les interruption le temps de configurer le timer
- cli();
- //configuration timer1 avec prescale de 64
- TCCR1A = 0;
- TCCR1B = ( 1<<WGM12) | (0<<CS12) | (1<<CS11) | (1<<CS10) ; // Prescaler / 64 ==> ce qui nous donne des PAS de 5ms
- TCCR1C = 0;
- TCNT1 = 0; // defini le compteur en 16 bit
- OCR1A = 1250; //declenchement de la fonction du timer 1250 correspond a 5ms. on obtient ce nombre en faisant les calculs suivant :
- // temps d'un cycle d'horloge : prescaler / F_CPU => 64 / 16000000 = 0.000004 4 nanoseconde 1 cycle d'horloge toutes les 4 nano secondes
- // pour 5 millis seconde, on doit effectuer le calcul suivant : tempsVoulu / cycled'horloge soit 0.005 / 0.000004 => 1250;
- // pour un timer 16 bits cette valeur ne doit pas depasser 65535
- TIMSK1 = 1 << OCIE1A; // timer 1 en mode comparaison
- //on reactive les interruptions
- sei();
- // con
- for(int i = 0 ; i < 5 ; i++){
- //on initialise les ports des Leds en OUTPUT
- pinMode(digitalPort[i], OUTPUT);
- //on initialise les sortie a LOW les led sont éteinte
- digitalWrite(digitalPort[i], LOW);
- }
- }
- void loop() {
- }
- ISR(TIMER1_COMPA_vect) // 16 bit timer 1 compare 1A match
- {
- for(int i = 0 ; i < 5 ; i++){
- //on ajoute 1 au compteur de led
- _compteurTempsLED[i] = _compteurTempsLED[i] +1;
- //on effectue le test entre le nombre de declenchement du trigger timmer qui est de 5ms
- if( _compteurTempsLED[i] == (tempoLed[i] / 5)){
- //on change l'etat de la LED
- digitalWrite(digitalPort[i], !digitalRead(digitalPort[i]));
- //on remet a zero le comteur de led pour la prochaine inversion.
- _compteurTempsLED[i] = 0;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment