void init_external_interrupts() { //===================================== external interrupt =========================================================== //enable external interrupt 0, 1 and 3 EIMSK |= (1 << INT3) | (1 << INT1) | (1 << INT0); //any edge (change) of external interrupt 0, 1 and 3 EICRA |= (1 << ISC30) | (1 << ISC10) | (1 << ISC00); EICRA &= ~((1 << ISC31) | (1 << ISC11) | (1 << ISC01)); } ISR(INT0_vect) { if (!(debounceMem & 1<<1)) { if (PIND & KEY_2_PORT) { Keyboard.press(KEY_2_CHAR); } else { Keyboard.release(KEY_2_CHAR); } debounceMem |= 1<<1; START_TIMER1; } } ISR(INT1_vect) { if (!(debounceMem & 1<<0)) { if (PIND & KEY_1_PORT) { Keyboard.press(KEY_1_CHAR); } else { Keyboard.release(KEY_1_CHAR); } debounceMem |= 1<<0; START_TIMER0; } } ISR(INT3_vect) { if (!(debounceMem & 1<<3)) { if (PIND & KEY_3_PORT) { Keyboard.press(KEY_3_CHAR); } else { Keyboard.release(KEY_3_CHAR); } debounceMem |= 1<<3; START_TIMER3; } }