interrupt interni arduino uno

leo72:
Intanto noto una cosa, interrupt_count devi dichiararlo di tipo volatile perché altrimenti il compilatore potrebbe ottimizzarla con risultati imprevedibili.
Questo vale per tutte le var globali usate nelle ISR. Quindi:

volatile uint8_t interrupt_count[20]={0};

latest_interrupt_pin dichiarala globale per ogni ISR, è meglio.

void quicfunc1() {
byte latest_interrupted_pin=PCintPort::arduinoPin;
interrupt_count[latest_interrupted_pin]++;
};

void quicfunc2() {
byte latest_int_pin=PCintPort::arduinoPin;
interrupt_count[latest_int_pin]++;
};

Tanto ti serve solo come var temporanea.

volatile uint8_t latest_interrupted_pin;
volatile uint8_t interrupt_count[20]={0}; // 20 possible arduino pins

void quicfunc1() {
  latest_interrupted_pin=PCintPort::arduinoPin;
  interrupt_count[latest_interrupted_pin]++;
};

void quicfunc2() {
  latest_interrupted_pin=PCintPort::arduinoPin;
  interrupt_count[latest_interrupted_pin]++;
};

Intendi con latest_interrupted_pin comune alle due funzioni giusto?
Continua a funzionare bene ma soltanto in un verso di rotazione della ruota : (
ma perchè?????