Bonjour à tous voila je travail sur un projet comportant 2 leds de 10w que je veux commander via une arduino et un signal rc.
Voila j'ai fait ma première interruption qui calcul le signal pwm du recepteur et en fonction de ce signal j'essaye de basculer d'un programme à l'autre ....
Le problème c'est que je n'arrive pas à charger mes sequences depuis !!!
Voila j'ai fait ceci :
Je rentre bien dans ma fonction chargement mais rien du tt !!!
volatile unsigned long timer_start; volatile int pulse_time; volatile int last_time; int ledGreen = 11; int ledBlue = 9; int ledRed = 10; int ledWhite = 5; int rcPin = 2; // qd je mets cette sequence ici mon sequenceur fonctionne bien l'interruption aussi mais aucun chargement des autres sequences ... int Sequence[][5] = { {255, 0 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 200}, {255, 0 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 200}, {255, 0 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 200}, {0, 255 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 50}, {0, 255 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 500}, }; unsigned long top,delai; int tache=0; // tache en cours boolean tacheDone=false; // indique si la tache a été executé ou pas encore int prog; void chargement() { Serial.print("Programme :"); Serial.println(prog); if (prog==0){ Serial.println("PRG 00000"); // je rentre bien dans le chargement int Sequence[][5] = { {0, 0 , 0 , 0 , 1000}, {0, 0 , 0 , 0 , 1000}, }; } if (prog==1){ int Sequence[][5] = { {255, 0 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 200}, {255, 0 , 0 , 0 , 50}, {0, 0 , 0 , 0 , 200}, }; } if (prog==2){ int Sequence[][5] = { {0, 255 , 0 , 0 , 1000}, {0, 0 , 0 , 0 , 1000}, }; } } void calcSignal() { if(digitalRead(rcPin) == HIGH) { timer_start = micros(); } else { if(timer_start > 0) { pulse_time = ((volatile int)micros() - timer_start); timer_start = 0; } } if(pulse_time >1850 && last_time <=1100){ prog++; if (prog>2){prog=0;} chargement(); last_time = pulse_time; } else { last_time = pulse_time; } } void setup() { timer_start = 0; prog = 0; pinMode(ledGreen, OUTPUT); pinMode(ledBlue, OUTPUT); pinMode(ledRed, OUTPUT); pinMode(ledWhite, OUTPUT); pinMode(rcPin, INPUT); top = millis(); attachInterrupt(0, calcSignal, CHANGE); Serial.begin(9600); } void loop() { // gestionnaire du sequenceur de taches if((top+delai)<=millis()) { tache +=1; if (tache > (sizeof(Sequence)/10)-1){tache=0;} tacheDone = false; top=millis(); } // sequenceur de taches if (tacheDone == false){ analogWrite(ledWhite,Sequence[tache][0]); analogWrite(ledRed,Sequence[tache][1]); analogWrite(ledGreen,Sequence[tache][2]); analogWrite(ledBlue,Sequence[tache][3]); delai=Sequence[tache][4]; tacheDone =true; } }