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è?????