Pour ma bonne compréhension des interrupt

Bonjour

J'ai du mal à comprendre la différence qu'il y a entre une fonction "attachinterrupt()" et une fonction "void xxx()" qui peut être appelée dans la boucle principale du programme.
De ma compréhension, l'intérêt d'une fonction interrupt, est qu'elle ne s'exécute que lorsqu'un changement d'état s'opère sur la pin déclarée dans la fonction interrupt, alors qu'une sous fonction voidxxx(), ne s'exécute que lorsqu'elle est appelé dans la boucle principale (qui elle s'exécute en continu et indéfiniment). Du coup je ne vois pas bien la différence entre les deux méthodes. Si quelqu'un peut m'éclairer, je l'en remercie

En effet une interruption peut se déclencher lors du changement d'état d'une entrée. Ça se fera de manière automatique.

Si tu voulais faire ça de manière classique il te faudrait mettre un test sur l'état de la pin en question, stocker l'état précédent pour le comparer à l'état courant et appeler ta fonction si tu détectes un changement. Et pour être sûr de ne pas louper un changement d'état, il faudrait mettre ces tests un peu partout dans ton code.

Ça deviendrait vite assez lourd à programmer...

Re

Et bien merci pour cette réponse ultra rapide! Et je viens de comprendre l'intérêt de l'interruption, qui est de ne jamais rater le changement d'état sur la pin en question.
Sinon, est-ce que je me trompe si je dis qu'une sous fonction "voidxxx()" s'execute que si elle est appelée dans le programme principal? Et enfin est-il possible d'appeler une sous fonction à l'intérieur d'une fonction d'interruption?

la fonction est appelée lors du changement d'état indépendamment de ce que la loop() était en train de faire, même si vous étiez dans un delay() par exemple.

➜ pas besoin d'écouter en permanence l'état de la pin. c'est utile quand on veut capturer un événement furtif ou important qui nécessite une prise en compte immédiate (même si son traitement approfondi peut être fait plus tard).

un bouton d'arrêt d'urgence par exemple pourrait être géré par une interruption. un bouton standard, si la loop ne prend pas trop longtemps, est simplement traité par lecture de l'état de la pin.

Merci, très clair pour l'utilité des interruptions.

Oui, mais il faut savoir que pendant une fonction d'interruption usuellement on n'a plus accès à l'horloge (millis delay...) et qu'elle de doit pas dépasser le temps qui sépare deux interruptions. En général on fait des fonctions courtes, et c'est rare qu'il y ait un appel.
Souvent l'interruption lit une valeur et c'est loop() qui l'affiche.

Oui on peut appeler des fonctions, c'est juste du code normal qui s'exécute.

+1 sur l'importance (généralement) de conserver le code des interruptions aussi court que possible (en temps d'exécution)

pour être plus précis, on a accès à milis() mais il ne s'incrémente plus dans l'interruption

Merci à tous, je crois que j'ai toutes mes réponses. Bonne journée

le temps qui sépare deux interruptions du timer qui sert à l'horloge puisque quand on entre dans une interruption on bloque les interruptions et on les libère à la sortie de l'interruption : c'est pour cela qu'une interruption doit être le plus court possible.
"Il paraîtrait" que bloquer les interruptions dans une interruption n'est pas obligatoire mais AMHA il faut sacrément bien maîtriser le sujet.

Dans un micro contrôleur il y a de nombreuses sources d’interruption.
Toutes n'ont pas la même priorité, sinon ce serait la cacophonie. La datasheet de chaque micro indique le classement en terme de priorité.
Celles dont tu parles sont des interruptions directes sur les broches d'entrée/sortie.

Celles dont parle villeroi sont des interruptions quand le compteur du timer déborde ( quand il atteint sa capacité maximale de comptage il retourne à 0 et génère une interruption pour le signaler).

PS : au moins sur l'atmega 328p, si seules quelques broches sont dotées d'une fonction interruption directe prioritaire, toutes les autres broches (sauf A6 et A7) sont dotées d'une interruption sur le port (groupe d'E/S), moins prioritaires et un peu moins simples à utiliser, en connaître l'existence peut dépanner.