Arduino Mega 2560 Interruption extérieure

Bonjour

Je viens vers vous car je suis suis à bout d'idée pour résoudre mon problème. Voici mon code

int ledPin = 13;

int compteurBas = 0;
int compteurHaut = 0;
void setup()
{

	Serial.begin(9600);
	pinMode(ledPin, OUTPUT); // Enable Output for 
	pinMode(6, OUTPUT); //PWM OUTPUt
	sei(); //Enable Interruption
	EIMSK |= (1 << INT0);
	EIMSK |= (1 << INT1);//Enable Extern Interrupt on pin 20 and 21 INT0, INT1
	EICRA = 11; // Set detection INT1 as falling Edge, ans INT0 as Rissing Edge
	
}

ISR(INT0_vect)
{
	digitalWrite(ledPin, HIGH); 
	compteurHaut++; //Chek incrementation 
}

ISR(INT1_vect)
{
	digitalWrite(ledPin, LOW);
	compteurBas++; //Chek incrementation  
	
}

void loop()
{
	
	analogWrite(6, 175); //PWM rooter to port 20, 21 for simulate a CLK 
	//display
	Serial.print("Compteur haut");
	Serial.println(compteurHaut);
	delay(1000);
	Serial.print("Compteur bas");
	Serial.println(compteurBas);

}

Suivant le mapping INT0 et INT1 correspondant au pin20,21

Les pin 20,21 étant utilisé par le bus I2C j'ai essayé de trigger une interruption sur les PIN 2 PIN 3 car j'aurais besoin de mon bus I2c pour plus tard. Suivant le mapping de la carte les PIN 2 et PIN3 corresponde au bit INT4 et INT5 dans le registre EIMSK. Je mets donc leur bit à 1 pour autoriser l'interruption sur ces 2 pins.

Ce qui donne

void setup()
{

	Serial.begin(9600);
	pinMode(ledPin, OUTPUT); // Enable Output for 
	pinMode(6, OUTPUT); //PWM OUTPUt
	sei(); //Enable Interruption
	
	EIMSK |= (1 << INT4);
	EIMSK |= (1 << INT5);//Enable Extern Interrupt on pin 2 and 3 INT4, INT5
	Serial.println("Youppi j'ai réussi à programmer le registre EIMSK");
		
}

Mais là, le programme se bloque complètement, impossible d'afficher le Serial.println. J'ai pensé que INT 4 et INT5 ont quelques choses à voir avec la communication série. J'ai donc fait un test en demandant de mettre la led13 à l'état haut à la place d'afficher un texte et le résultat et le même !

Le programme reste bloqué à la configuration du registre EIMSK et ne réagit à plus rien il ne va même pas dans la boucle void loop()

Mapping de la carte Mega. MappingCarteArduinoMega2560

Merci d'avance pour votre aide et j’espère que j'ai été assez claire dans mes explications

Cordialement
Guillaume Shindra

Salut,

Je sais que ça fait très pro de trifouiller dans les registres ... Mais dans le monde arduino, il existe des tas de fonctions pour faire ce que l'on veut (ou presque)... Certes ça ne sera pas super optimisé, mais avant d'optimiser un truc qui ne fonctionne pas, on commence à le faire fonctionner ...

Tu as regardé du côté de la fonction attachInterrupt ???