忘れないうちにメモ.
Arduinoでサーボとタイマー割り込みとPWMを2チャンネル使うには一工夫いります.
内部のタイマーユニットの競合を考えて使い分けないといけません.
詳しくはこちらのサイトの書かれています.
http://blog.livedoor.jp/kan0ken1/archives/51843697.html
Arduinoの標準のPWMによるアナログ出力であるanalogWriteを使おうとすると,MsTimer2は使えないことになり,別のタイマーを使わないといけません.
ArduinoのPlaygroundにTimer1ライブラリが公開されており,タイマー割り込みが使えます.
http://playground.arduino.cc/Code/Timer1
ところが,Timer1はArduinoの標準のサーボライブラリと競合してしまいサーボライブラリが使えませんが,Timer1ではpwm出力も同時に利用することができます.このpwm出力を使ってサーボをコントロールできます.
ということで,センサステアリング式ロボトレーサの制御は,
ラインセンサやジャイロの監視 -> Timer1によるタイマー割り込み
ステアリングサーボ -> Timer1 の pwm出力(9ピン)
左右モータ -> analogWrite (Timer2を使ったpwm(3,11ピン),回転方向は12,13ピン)
エンコーダA相の監視 -> チャンネル0(2ピン)の外部割り込み,B相は4ピン
と割り当てることで解決しました.
光センサ5本(A0-A4),ジャイロ1本(A5)でアナログポート全部,
光センサ用の赤外LED点灯(10ピン),
スタートスイッチ(5ピン)
セットスイッチ(6ピン)
表示用LED0(7ピン)
表示用LED1(8ピン)
ブザー(LED1と兼用8ピン)
で開いてるピンなし.ArduinoUNOをほぼフル機能で使ってる感じです.
〈 Arduino 〉Arduino UNO