PS/2キーボードのライブラリ改造を行なっていたら、Arduino Leonardoで動作がおかしい。Arduino UNO R3だと期待通りに動作する。どちらもマイコンからはピンが直接出ているので何が違うのか調べていたら、外部割り込みの番号とピン番号のアサインが違うことがわかった。
参考:Arduinoリファレンス attachinterrupt()
再現環境を作った。(Arduino IDE 1.0.1、MacOSX)

以下のスケッチを使う。
Arduino UNO R3の場合は割り込み番号0、ピン2/割り込み番号1、ピン3の組み合わせで動作。
Arduino Leonardoの場合は割り込み番号1、ピン2/割り込み番号0、ピン3の組み合わせで動作する。
この様に食い違っている。
参考:Arduinoリファレンス attachinterrupt()
再現環境を作った。(Arduino IDE 1.0.1、MacOSX)

以下のスケッチを使う。
// 20120703 Arduino IDE1.0.1
// Arduino UNO R3 INT_NUM=0,PIN=2 / INT_NUM=1,PIN=3
// Arduino Leonardo INT_NUM=0,PIN=3 / INT_NUM=1,PIN=2 (wrong)
#define INT_NUM 1
#define INT_PIN 3
int led = 13;
volatile int state = LOW;
void setup()
{
pinMode(led, OUTPUT);
pinMode(INT_PIN, INPUT_PULLUP);
attachInterrupt(INT_NUM, blink, CHANGE);
}
void loop()
{
digitalWrite(led, state);
}
void blink()
{
state = !state;
}
ピン2またはピン3に押ボタンを接続して、設定通りだとボタンを押せばLEDが反転する(チャタリングはとりあえず無視して)。Arduino UNO R3の場合は割り込み番号0、ピン2/割り込み番号1、ピン3の組み合わせで動作。
Arduino Leonardoの場合は割り込み番号1、ピン2/割り込み番号0、ピン3の組み合わせで動作する。
この様に食い違っている。