And I don't believe there is a 3rd interrupt available on the 328. If you want more interrupts, you'll need to upgrade. I know for sure the 1280 (Arduino Mega) has like 5 or 6 interrupts?

What are you trying to do with the interrupts exactly? There may be a way to utilize just 1 interrupt to handle multiple buttons.

For example.. if that's what you're doing.. using multiple buttons, you can use an analog input pin, set resistors on each of the buttons, and use analog-read to get button pushes. This way, you only use 1 pin for like.. 3 buttons or how many ever you're using, and anytime one of those 3 buttons is pushed, it interrupts, but only using 1 arduino pin.

You will notice that I have given examples which use each of the corresponding masks and pin change interrupt enable bits.

Now, that you've configured the board for interrupts, we may now tell it what to do when an interrupt occurs. In your posted code example, we simply had one interrupt service routine run, but now that we have the board configured for interrupts on 3 pins, lets setup 3 different interrupt service routines.

Can this be modified to have FALLING or RISING interupts, or do I simply check inside the ISR the pins for HIGH or LOW?

No, this is strictly for pin CHANGE interrupts.

Yes, you will have to implement your own system of detecting rising vs falling.

Mind you, remember to keep your interrupt service routine short, as when in a heavy ISR block, you run the risk of missing another interrupt. Depending on the device you have hooked up on this pin, consider debouncing.

Finally, turn off interrupts when you're inside an ISR, as you shouldn't allow an interrupt while you're already servicing one.

atomic(off); //resets the interrupt control registers to enable interrupts}

Be warned, depending on whether or not you are actually using all 3 pin change interrupt capabilities, you might need to modify the hex values in the atomic(on) define statement above. Please see section 12.2.4 in the atmel data sheet for more details.

Some good reading, although doesn't have anything on pin change interrupts, but I believe that you will need to include the headers that they include in their code snippet. http://gonium.net/md/2006/12/20/handling-external-interrupts-with-arduino/

Good luck. Let me know if you have issues, as I haven't tested the above code.

Yes you may use digitalRead inside the ISR, but if you're finding it too slow you might have to ready the binary data directly from the register.

Don't forget to declare any variables used by the ISR as volatile.

Also, at the end of your setup() method, you'll want to call sei(). This will set the global interrupt enable bit. In case you ever want to reset the bit, (thereby turning off interrupts), you may use cli().