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 !!!
Sequence[][] est un tableau de int qui me sert à stocker les valeurs pwm des 2 leds une rgb et une blanche ... ainsi que le delai
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 ...
// j'ai mis volontairement cette sequence ici normalement elle n'y est pas ...
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;
}
}
Merci bcp pour votre aide
cdlt,
bypbop