Catégories
Arduino électronique Projets Arduino Projets électroniques

Projet ordonnancement des tâches avec Arduino

Projet ordonnancement des tâches avec Arduino (19)

Projet ordonnancement des tâches avec Arduino (17)

Objectifs

  1. Savoir ordonnancer les taches avec Arduino
  2. Savoir définir les conditions de départs et arrêts des taches
  3. Savoir initialiser l’ordonnanceur
  4. Etc.

Initialisation: Durée & temps de départ

void setup()

{

  // Init écheances des taches (en ms) 

  Tache_duree[0]=5000;

  Tache_duree[1]=5000;

  Tache_duree[2]=5000;




  // Init temps de début des tâches (en ms)

  Tache_start[0]=10000;

  Tache_start[1]=20000;

  Tache_start[2]=30000;




  // Init affichage de la tache active

  Serial.begin(9600);







  // Init des sorties

  pinMode(PinLED1,OUTPUT);

  pinMode(PinLED2,OUTPUT);

  pinMode(PinLED3,OUTPUT); 

}

Lecture de l’ordonnanceur

Master_time=millis();

Initialisation de l’ordonnanceur avec la période de répétition

  Master_time=(Master_time % DureeRep_ms);

Génération des conditions de début des taches

  for (i=0;i<NumTache;i++)

  {

    Tache_on[i]=(Master_time>Tache_start[i]);

  }

Génération des conditions d’arrêts

  for (i=0;i<NumTache;i++)

  {

    Tache_off[i]=Tache_on[i]& (Master_time<(Tache_start[i]+Tache_duree[i]));

  }

Exécution des tâches

  // Tâche 1

  if(Tache_off[0])

  {

    analogWrite(PinLED1,255);

    analogWrite(PinLED2,0);

    analogWrite(PinLED3,0);

    Tache_Active=1;

  }




  // Tâche 2

  else if(Tache_off[1])

  {

    analogWrite(PinLED1,0);

    analogWrite(PinLED2,255);

    analogWrite(PinLED3,0);

    Tache_Active=2;

  }




  // Tâche 3

  else if(Tache_off[2])

  {

    analogWrite(PinLED1,0);

    analogWrite(PinLED2,0);

    analogWrite(PinLED3,255);

    Tache_Active=3;

  }

  // Autres: Désactivation des sorties

  else

  {

    analogWrite(PinLED1,0);

    analogWrite(PinLED2,0);

    analogWrite(PinLED3,0);

    Tache_Active=0;

  }

  

  // Affichage de la tache active

  Serial.print(Master_time/1000);

  Serial.print(":");

  Serial.println(Master_time%1000);

}

Exemple de 3 tâches



#define NumTache 3
#define DureeRep_ms 40000
#define PinLED1 2
#define PinLED2 3
#define PinLED3 4

unsigned char Tache_on[NumTache],Tache_off[NumTache];
unsigned long Tache_start[NumTache],i;
unsigned long Master_time=0, Tache_duree[NumTache];
unsigned char Tache_Active=0;

void setup()
{
// Init écheances des taches (en ms)
Tache_duree[0]=5000;
Tache_duree[1]=5000;
Tache_duree[2]=5000;

// Init temps de début des tâches (en ms)
Tache_start[0]=10000;
Tache_start[1]=20000;
Tache_start[2]=30000;

// Init affichage de la tache active
Serial.begin(9600);


// Init des sorties
pinMode(PinLED1,OUTPUT);
pinMode(PinLED2,OUTPUT);
pinMode(PinLED3,OUTPUT);
}

void loop()
{
// Lecture de l'ordonnanceur
Master_time=millis();

// Init de l'ordonnanceur avec la période de répétition
Master_time=(Master_time % DureeRep_ms);

// Génération des conditions de début des taches
for (i=0;i<NumTache;i++)
{
Tache_on[i]=(Master_time>Tache_start[i]);
}

// Génération des conditions d'arrêts
for (i=0;i<NumTache;i++)
{
Tache_off[i]=Tache_on[i]& (Master_time<(Tache_start[i]+Tache_duree[i]));
}

// Exécution des tâches
// Tâche 1
if(Tache_off[0])
{
analogWrite(PinLED1,255);
analogWrite(PinLED2,0);
analogWrite(PinLED3,0);
Tache_Active=1;
}

// Tâche 2
else if(Tache_off[1])
{
analogWrite(PinLED1,0);
analogWrite(PinLED2,255);
analogWrite(PinLED3,0);
Tache_Active=2;
}

// Tâche 3
else if(Tache_off[2])
{
analogWrite(PinLED1,0);
analogWrite(PinLED2,0);
analogWrite(PinLED3,255);
Tache_Active=3;
}
// Autres: Désactivation des sorties
else
{
analogWrite(PinLED1,0);
analogWrite(PinLED2,0);
analogWrite(PinLED3,0);
Tache_Active=0;
}

// Affichage de la tache active
Serial.print(Master_time/1000);
Serial.print(":");
Serial.println(Master_time%1000);
}

Sujets connexes

  • arduino boucles simultanées
  • arduino actions simultanées
  • plusieurs loop arduino
  • arduino plusieurs capteurs
  • arduino temporisation non bloquante
  • arduino multitâche avec timer
  • arduino astuces
  • programme arduino complexe
  • arduino multitâche
  • machine d’état arduino

Laisser un commentaire