とある自作キーボードキットにあったPro MicroというArduino Leonardo互換機のプログラムを書き換えて、ちょっとした装置を作ろうと思った。
その装置とは、シリアル入力からusbキーボード入力に変換する装置。
Pro Microをusbキーボードとして認識させ、Pro Microでセンサーやゲームパッドからシリアル入力を受け、その受信したデータをつかってPro Microにキーボード入力させるというもの。
無限ループのところ(void loop() 云々とういうところ)にKeyboard.print("A");
と書き、ループを抜けだせないようなプログラムを書いてしまった。
するとusbキーボードとしてPro Microは認識され、ものすごいスピードで 'a' を入力し続け、他のプログラムを動かしたりするのも困難となってしまった。
プログラムを上書きしよいとしてこ、Arduino IDEを操作する間にも 'a' が入力され、ビルドエラーになってしまった。
純正のArduino LeorardoはICSP(In Circuit Serial Programming)を用いて対処できるかもだが、Pro MicroにはICSP用の端子(回路も?)準備されていない。万事休すかと思ったが、リセット(RST端子とGND端子を短絡する)の状態にしながら母艦であるMacにusbで接続し、Arduino IDEの書き込みボタンを押し、微妙なタイミングでリセットを解除(短絡を解除)すると、無事書き込むことができた。
こんなハードウェア破壊的なプログラムを容易に書けるとは、、、。