Bonjour à tous.
Mon système comporte un bouton poussoir câblé sur l'entrée d'interruption.
Une fois dans la routine d'interruption, en fonction de la routine dans laquelle mon système se trouve avant l'appel par le bouton, je dois appeler une autre routine, et ainsi de suite.
Le problème est que je ne sors jamais réellement de l'interruption car j'appelle mes routine à partir d'un "case".
Je n'ai pas le temps de faire du polling dans les différentes routines donc positionner des drapeaux à partir de la routine d'interruption pour les exploiter ensuite est exclu.
J'ai eu besoin d'utiliser un tel système il y a fort longtemps en assembleur HC11 et cela consistait à mettre l'adresse de la routine voulue dans la pile à l'adresse du vecteur de retour et de faire une instruction de sortie d'interruption.
En fait, ce noyau temps réel, je sais c'est pompeux, est constamment sous régime d'interruption.
Y a-t-il un moyen de faire de même avec un Arduino ?
Voici un aperçu de ce que souhaite réaliser :
// ------------------------
// Routine d'initialisation
void setup()
{
// Réglage de l'interruption du BP.
attachInterrupt(1, getIntBP, FALLING);
currState = state1;
}
// ----------------
// Boucle principale
void loop()
{
// Do nothing
}
//-------------------------------------
// Routine de gestion du bouton sous IT
void getIntBP()
{
switch (currState)
{
case state1:
subState2();
break;
case state2:
subState3();
break;
case state3:
subState4();
break;
case state4:
subState1();
break;
default:
subState1();
}
//-----------------
// Routine état 1
void subState1()
{
currState = state1;
while (always)
{
// Do something
}
}
//-----------------
// Routine état 2
void subState2()
{
currState = state2;
while (always)
{
// Do something
}
}
//-----------------
// Routine état 3
void subState3()
{
currState = state3;
while (always)
{
// Do something
}
}
//-----------------
// Routine état 4
void subState4()
{
currState = state4;
while (always)
{
// Do something
}