Clignotement intempestif led avec Serial.print

Bonjour,

Je teste actuellement un module anénomètre (Lextronic) avec une led qui s'éteint à chaque tour, pas de soucis.

Néanmoins si je souhaite en plus, afficher dans la console la valeur du signal renvoyé par l’anémomètre en affichant à chaque itération de boucle (HIGH ou LOW) grâce aux lignes commentées Affiche l'état, la led ne s'éteint plus correctement à chaque tour et lorsque elle allumée son intensité ''clignote''.

Comme si le fait d'envoyer la valeur sur la console via Serial.println faisait clignoter la led alors qu'elle est branchée sur le port 7. De plus, sur la console une succession de HIGH et LOW s'affichent qui ne correspondent pas à la réalité (alors que, si j'enlève ces 2 lignes, la led s'éteint bien une fois par tour)

Une idée de pourquoi le comportement de la led change ?

Merci d'avance et bonne soirée.

int BP;
void setup() {
  pinMode(7, OUTPUT);
  pinMode(4, INPUT);
  Serial.begin(9600);

}
// Boucle principale
void loop() {
  BP=digitalRead(4); // Lecture du capteur
 
 if (BP == LOW) {
   digitalWrite(7, HIGH); // Allume la Led
   Serial.println("LOW"); // Affiche l'état
   }
   else {
   digitalWrite(7, LOW); // Eteint la Led à chaque passage
   Serial.println("HIGH"); // Affiche l'état
   }
}

Essaye en changeant le débit de la liaison série :

Serial.begin(115200);

et en le réglant sur la même valeur dans la console.

Quel Arduino utilises-tu ?

En changeant le débit le comportement de la led est toujours affecté mais j'ai testé différent débit et apparemment la led clignote à une fréquence proportionnelle au débit (à 1,000,000 je ne vois plus de clignotement tellement la fréquence est élevée mais à 4800 la fréquence de clignotement est bien plus basse).

J'utilise un Arduino Uno + Platine Grove - Base Shield V2.0

T'as essayé de changer le port 4 par un autre?
Autre test fou est de enlever le 2 lignes serial.println et mettre la led sur le port 1. (court-circuit entre port 4 et 1???)

Le problème doit venir du fait que la boucle loop() s'exécute très vite. De ce fait, il y a beaucoup de message "HIGH" ou "LOW" qui s'accumulent dans le buffer d'émission du port série. Or, lorsque le buffer est plein, l'exécution du programme est bloquée jusqu'à ce que le buffer soit en partie libéré.

La solution selon moi consisterait à n'envoyer un message que lors du changement d'état de BP et non en permanence.