J'utilise un Arduino Uno et déjà mis en place pour travailler avec les interruptions sur les broches numériques 2, 3, 4 et 5 selon une explication 1 j'ai trouvé.
void setup()
contient le code suivant pour configurer les interruptions.
//Endable Interrupts for PCIE2 Arduino Pins (D0-7)
PCICR |= (1<<PCIE2);
//Setup pins 2,3,4,5
PCMSK2 |= (1<<PCINT18);
PCMSK2 |= (1<<PCINT19);
PCMSK2 |= (1<<PCINT20);
PCMSK2 |= (1<<PCINT21);
//Trigger Interrupt on rising edge
MCUCR = (1<<ISC01) | (1<<ISC01);
Et maintenant, la fonction ISR (PCINT2_vect) est déclenchée à chaque interruption. Cela fonctionne comme un charme. Ma question est la suivante: quel est le meilleur moyen / le plus rapide de savoir quelle broche a été déclenchée?
J'ai trouvé quelque chose dans Re: vaut-il mieux utiliser ISR (PCINT2_vect) ou attachInterrupt sur les broches 2, 3? , mais je ne comprends pas le code et il ne fonctionne pas hors de la boîte. Mais ça a l'air impressionnant ...
Quelle est la solution?
[2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost
Éditer:
En ce moment, je lis l'état de la broche à partir du registre de broches d'entrée:
if (PIND & 0b00000100)
Serial.println( "PIN 2" );
if (PIND & 0b00001000)
Serial.println( "PIN 3" );
if (PIND & 0b00010000)
Serial.println( "PIN 4" );
if (PIND & 0b00100000)
Serial.println( "PIN 5" );
Au final, je veux compter les interruptions sur les broches. Mais comment puis-je assurer qu'il n'y en a pas compté deux fois?
la source
Réponses:
J'ai moi-même une première solution, mais je n'ai pas pu tester la fiabilité car le matériel n'est pas fini jet.
J'ai d'abord ajouté oldPins et tickCount comme variables globales:
Et c'est comme ça que j'ai résolu l'ISR en ce moment. De meilleures solutions sont plus que bienvenues.
la source