Découvrez notre Chaîne YouTube "Ingénierie et Projets"
Découvrez notre Chaîne Secondaire "Information Neuronale et l'Ingénierie du Cerveau"

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
Click to rate this post!
[Total: 2 Average: 5]

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Anti-Robot *

You have successfully subscribed to the newsletter

There was an error while trying to send your request. Please try again.

FPGA | Arduino | Matlab | Cours will use the information you provide on this form to be in touch with you and to provide updates and marketing.