plantage d'une interruption externe

Bonjour. Le 22 février 2016, EXYACC a eu le même problème que celui que je rencontre, affichage des deux premiers caractères d'un Serial.println("...") et deadlock.

ma config :

Arduino Uno R3 un capteur qui donne le cap compas (e-boussole) un écran LCD 16x2 un capteur laser un servomoteur une photorésistance quelques LEDs dont deux gérées par interruption timer.

Le laser est externe l'écran est alimenté par une autre source.

une interruption externe (0 sur pin 2) se déroulait normalement puis s'est mise à planter.

Il s'agit d'allumer une LED ou de l'éteindre lorsqu'on coupe un faisceau laser. Avec des sorties sur le moniteur série pour le debug.

j'ai modifié mon code pour allumer la LED pendant 1 seconde en cas de coupure. surprise : le moniteur n'affiche que les deux premiers caractères du println, et deadlock.

j'ai remplacé le delay() par un comptage de microsecondes, pareil. J'ai ôté les envois au moniteur série, idem.

Au final, le sous-pgm d'interruption n'accepte d'exécuter qu'une seule instruction. J'ai positionné un flag et traité le cas dans la loop et ça marche, mais ça ne me convient pas du tout. La loop a un cycle de plusieurs secondes et je veux une réponse instantanée lors de l'interruption.

J'ai transféré le programme sur arduino nano et c'est pareil. A l'époque EXYACC n'avait pas eu d'explication à ce qui lui arrivait, on lui avait fait contourner le problème.

J'ai essayé sur l'interruption1 (pin3), même résultat.

J'ai réduit le code qui prenait 80% des possibilités du nano, ça n'a rien changé. est-ce que ça parle à quelqu'un ? (avant de vous soumettre mon code)

hello j'ai du mal à suivre

"le moniteur n'affiche que les deux premiers caractères du println, et deadlock" ... ...

"J'ai ôté les envois au moniteur série, idem."

??????

Papa22: est-ce que ça parle à quelqu'un ? (avant de vous soumettre mon code)

Ben oui mais sans code, ce n'est pas facile de deviner ce qui ne va pas...

Papa22: J'ai positionné un flag et traité le cas dans la loop et ça marche, mais ça ne me convient pas du tout.

C'est pourtant plutôt la bonne méthode, les interruptions doivent être les plus courtes possibles

Papa22: La loop a un cycle de plusieurs secondes et je veux une réponse instantanée lors de l'interruption.

Il y a des "delay()" dans ta loop pour qu'elle dure si longtemps?

Merci de vos réponses et acceptez mes excuses pour ne pas avoir répondu. des problèmes de santé m'ont écarté du sujet. Et aujourd'hui le projet en question n'est plus d'actualité. Quand je rencontrerai à nouveau le problème je reviendrai sur le sujet.

Je viens de reproduire la panne dans un autre contexte : C'est juste que le programme est trop gros pour l'arduino Uno, il va falloir soit une autre conception, soit un arduino Mega. C'est la goutte de code qui fait déborder la pile. Dans le cas présent la cause est une bibliothèque très lourde : SD.h, je vais tenter de découper le programme pour utiliser deux Uno, dont un dédié à la lecture-écriture sur la carte SD.

Encore merci à tous.