interrupt interni arduino uno

leo72:
Non capisco proprio il tuo programma...Attacchi un interrupt al pin 2:

attachInterrupt(0, doEncoderA, CHANGE);

e poi all'interno della relativa ISR controlli lo stato dello stesso pin con un check che non capisco...

void doEncoderA(){  // interrupt 0 function

if (digitalRead(2) == HIGH) {  // look for a low-to-high on channel A

NEL MIO POST PRECEDENTE HO SPIEGATO TUTTO PER FILO E PER SEGNO :fearful: :fearful: LA PARTE IN ALTO PARLA DI ENCODER E DI COME LI LEGGO SENZA USARE ISR(); LA PARTE DI SOTTO PARLA DELLA NECESSITA' DI USARE UNA ISR() PER LEGGERE LA IMU E AVENDO GIA' PUBBLICATO IL CODICE IN DUE PARTI NEI POST PRECEDENTI, HO PUBBLICATO SOLTANTO LA PARTE DI CODICE CHE DA PROBLEMI OSSIA L'INTERRUPT.

RIPETO: LA IMU SENZA INTERRUPT FUNZIONA PERFETTAMENTE RAGAZZI SENZA ISR()! HO CAMBIATO SOLTANTO QUESTO:

   // attachInterrupt(interrupt, function, mode) specifies a function to call when an external interrupt occurs
   // attachInterrupt(0, dmpDataReady, RISING); // the 0 points correctly to INT0 / D2
      pinMode(PIN1, INPUT); digitalWrite(PIN1, LOW);         
      PCintPort::attachInterrupt(PIN1, &dmpDataReady, RISING);
    // -> if there is an interrupt from MPU-6000 to ATMEGA328, boolean mpuInterrupt will be made true

CIOE' HO SEMPLICEMENTE SOSTITUITO IL NORMALE INTERRUPT CON UNA ISR(), ma il programma stampa una sola rilevazione poi si blocca... :blush: :blush: :blush:

riposto il codice se volete(lo trovate nei post precedenti)

CHI + ESPERTO DI ME HA QUALCHE CONSIGLIO?