Arduinoで外部割込みが使えたら…と思っていたら、ちゃんと関数があるでないの。
attachInterrupt関数がそれだ。
ハイロ―のレベルだけでなく、波形の立ち上がり立下りでもOK。

しかしだ、これには注意すべき点があって、内部カウンターを使用するdelay()関数とやらが使えないので、ディレイしたい場合は、同関数が使えない。
(詳しくはこちら
困った…と思っていたら、実は逃げ道があった。
ディレイにdelay()関数、micros() 関数、millis() 関数、delayMicroseconds関数という関数を使う方法があるけれど、内部カウンターを唯一使わないdelayMicroseconds関数を使うことで、回避できるというのだ。

実際にやってみると、何事もなかったかのようにすんなりと動いた。
16383マイクロ秒(=16.383ミリ秒)以内の値を指定したとき、正確に動作するとのこと。
attachInterrupt関数を使っている際、16ミリ秒以上のディレイをするには、delayMicroseconds(10)と10ミリ秒位に設定してfor関数などでループを掛けると使いやすい。

割り当てた関数のなかで値が変化する変数にはvolatileをつけて宣言すべきとか、シリアル通信で受信したデータが失われる場合もあるのだとか。使い方にはくれぐれも注意!