According to the datasheet, you can use any pin for interrupting. And it is really simple to set it up (after reading it over and over many times). One thing to note though is that all pins configured to fire the interrupt will fire the same ISR (interrupt service routine) so you would need to check which pin changed in here to figure out what to do.
So first things first: add the following 3 lines of code to your setup() function:
GIMSK = (1 << PCIE); //Enable Pin Change Interrupts
PCMSK = (1 << PCINT2); //Set Pin 2 to cause an interrupt. You can also enable it on multiple pins
sei();
Now write the ISR:
ISR (PCINT0_vect) //the PCINT0_vect vector is used to identify the pin change interrupt.
{
if (PINB & (1 << PCINT2)) { // check if Pin2 is HIGH or not
//Do something
} else {
//Do something else
}
}
Remember to keep your ISR's as short as possible, i.e. you can set flags in your ISR, and then do heavy processing in your main loop if you detect the flags are set, and clear them after they have been processed.