Problème AttachInterrupt

Bonjour, je tente de faire un programme qui compte des ticks sur la pin 18 que je simule en branchant/débranchant un jumper sur une broche 5V de ma Arduino Mega. Pour vérifier le bon fonctionnement du programme, j'affiche le résultat sur le moniteur série mais pour une raison qui m'échappe, ça se bloque aléatoirement et n'affiche plus rien en plus d'incrémenter parfois 5 fois d'un coup, parfois une seule fois malgré e fait que je n'ai fait que brancher une fois ma pin à 5 volts.

Voici mon code:

// A_TICK et B_TICK peuvent être connectés uniquement sur les pins 2, 3, 18, 19, 20 ou 21
#define A_TICK 18
#define B_TICK 19

// Compteur de ticks des encodeuses gauche et droite
int A_cpt_tick=0, B_cpt_tick=0;

void setup()
{
  pinMode(A_TICK, INPUT);
  pinMode(B_TICK, INPUT);
  attachInterrupt(5, A_inc_tick, RISING);
  //attachInterrupt(4, B_inc_tick, RISING);
  Serial.begin(9600);
}

void loop()
{
}

void A_inc_tick()
{
  A_cpt_tick++;
  Serial.print("Tick A: ");
  Serial.println(A_cpt_tick);
  Serial.print("Tick B: ");
  Serial.println(B_cpt_tick);
  Serial.println();
}

/*void B_inc_tick()
{
  B_cpt_tick++;
  Serial.print("Tick A: ");
  Serial.println(A_cpt_tick);
  Serial.print("Tick B: ");
  Serial.println(B_cpt_tick);
  Serial.println();
}*/

Si vous pouviez m'aider, merci :)

Bonjour,

Comme il a été dit des dizaines de fois sur ce forum, une routine d'interruption se doit d'être brève et ne doit pas comporter de serial.print (blocages).

1-Tes serial.print doivent être dans loop(). 2-Les variables utilisées dans une ISR (la fameuse routine) dont tu veux avoir accès dans loop (les compteurs) doivent être déclarées 'volatile'. En ce qui concerne l'incrémentation aléatoire, lorsque tu branche ton fil, tu pense avoir fait un bon contact en une seule fois et bien non, tu a certainement des rebondissements donc plusieurs interruptions. Tu peux filtrer en utilisant la fonction 'millis' dans ton ISR en ne prenant en compte (incrément du compteur)que des impulsions ayant une certaine durée (par exemple 100ms).

L'interruption c'est quelque chose de très formateur. Ca vaut le coup de bien comprendre son fonctionnement.

Roger.

En effet, cela semble bien mieux fonctionner. Merci pour l'aide :)