Je suis en ce moment dans la programmation d'un robot avec une Arduino que j'ai réalisé moi même.
J'utilise dans ce programme des interruptions. Et comme on ne peut utiliser des delay dans les interruptions je pensais faire une fonction dans le delay.
Mais ce que je voulais savoir c'est si, on fait une fonction dans une interruption on quitte l'interruption. Et on peux donc faire des delay dans la fonction sans aucun problèmes non?!
Si non comment faire ?
Tu peux appeler des fonctions dans une interruption, mais tu reste toujours dans ce qu'on appelle le contexte d'interruption.
Tant que la fonction d'interruption ne se termine pas, tu reste dans ce contexte et tu ne peut pas faire ce qui est interdit dans un contexte d'interruption.
Note que c'est une mauvaise idée de mettre des délais dans une fonction d'interruption parce que tant que dure cette fonction d'interruption, aucune autre interruption ne peut s'exécuter. Ceci peut bloquer des interruptions qui sont critiques pour le bon fonctionnement de ton Arduino comme par exemple la gestion de la liaison série ou d'autre périphériques interne (fonctions basées sur des timers, ...).
Il est d'usage dans une fonction d'interruption de faire rapidement le traitement de base et de déléguer a une "tâche" moins prioritaire.
Sur Arduino, tu n'as pas de tâche, threads etc... donc il faut faire plus malin.
Par exemple, dans ta fonction d'interruption, fait le minimum puis mémorise dans une variable globale (par ex "intr_millis") la valeur de millis() et positionne une variable globale à 1 (par ex "intr_ok")
mon_interruption()
{
// fait ce qu'il y a faire avant le délai
...
// initie un délai pour le traitement différé
intr_millis = millis();
intr_ok = 1;
}
Dans la loop, teste :
if ( intr_ok && (millis() > (intr_millis + DELAY) ) )
{
intr_ok = 0; // on remet le flag a zéro pour la prochaine interruption
// fait ici ce que tu aurait fait après le délai
}