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
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...
![]()
riposto il codice se volete(lo trovate nei post precedenti)
CHI + ESPERTO DI ME HA QUALCHE CONSIGLIO?