Projet Led haute puissance avec recepteur de modelisme

dslé j'avais oublié oui c'est une 328 ... oui j'ai deja fait l'interruption sur cette exemple...

exact !! c t bien 0 ...

Je me fais la main sur cette interruption et je reviens sur le forum !!!
Encore merci pour ton aide.

Cordialement,
bypbop

Bonjour à tous,

Voila je ressors du placard mon projet !! j'ai bien avancé depuis j'ai réalisé uné interruption à partir du pwm de mon recepteur radio qui marche plutot bien !!

Voila j'ai ajouté cette interruption au sequenceur qui gère les 2 leds ... mais je n'arrive pas à charger un nouveau tableau ....

J'ai ajouté une sequence en début de code pour voir si le sequenceur tourne bien et c'est le cas !

Pourquoi cela ?

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;

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;}
    tacheDone = false;
    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;

}

}

Le principe : dans le loop le sequenceur lis le tableau en boucle et j'ai une interruption qui calcule le signal pwm du recepteur rc ....

Je rentre bien dans les programmes mais la nouvelle sequence ne se charge pas ....

Cordialement,
bypbop