Using INT2/3 on Arduino Micro (Atmega32u4) My project is using almost all the pins on this board and I require an interrupt pin to read radio state (rather than polling). I'm using I2C, so that leaves INT2 and INT3, which are the TX and RX pins for USB/Serial1. According to the documentation, disabling serial, using Serial.end(), should allow me to take control of those pins. However, using the pins as interrupt handlers doesn't work. Here is a sample sketch:

static int ledpin = 13;
volatile byte state = LOW;

void func()
{
  state = !state; 
}

void setup() {
  Serial.end();

  pinMode(ledpin, OUTPUT);

  // INT2
  pinMode(0, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(0), func, CHANGE);

  // INT3
  pinMode(1, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(1), func, CHANGE);
}

void loop() {
  digitalWrite(ledpin, state); 
}


This example is mostly copy-pasted from the Arduino website. All the other interrupts work fine, only INT2 and INT3 don't. 

Is there a way to use these interrupts?
You problem isn't with your pins or code, but with debouncing the signals. I've changed the "func()" method to read:

void func()
{
  static uint32_t lastChange = 0; // Note millis() don't change inside ISR, but can be read
  if (millis() - lastChange &gt; 100)
  {
    state = !state;
  }
  lastChange = millis(); // Set new value
}


which will ignore spurious interrupts if they occur within 100ms of each other. This solves the issue that you are seeing, I've tested it on an Arduino Micro I have lying around.