こちらを参考にmbedで動かしたのが以下。
そして、そのコードをArduinoに移植したのが以下。
意外と簡単に動かすことができます。実は学生と一緒に今日の昼に挑戦していたのですが動きませんでした。その理由はNewSoftSerialライブラリが古かったことと(1バイト送信用のwriteメソッドが使えない版)、ArduinoとRoombaのGNDを結線していなかったことでした。
NewSoftSerialライブラリの最新はこちらにあります。ただし、これをダウンロードしても使えません(2011/11/7現在)。フォルダ名とクラス名をSoftwareSerialからNewSoftSerialに変更しなければなりません。よくわからない人はこちらに変更したライブラリを置きました。利用してください。
なちなみにArduinoに移植したコードは以下です。
#include <NewSoftSerial.h> NewSoftSerial device(2, 3); void setup() { device.begin(115200); // Start device.write(128); // Start -> Passive Mode delay(50); device.write(130); // Safe Mode delay(50); delay(1000); // Forward device.write(137); // Drive device.write(0x00); // Velocity: 0x00c8 = 200 device.write(0xc8); device.write(0x80); // Radius: 0x8000 = Straight device.write(0x00); delay(1000); // Stop device.write(137); // Drive device.write(0x00); device.write(0x00); device.write(0x00); device.write(0x00); delay(500); // Backward device.write(137); // Drive device.write(0xff); // Velocity: 0xff38 = -200 device.write(0x38); device.write(0x80); // Radius: 0x8000 = Straight device.write(0x00); delay(1000); // Stop device.write(137); // Drive device.write(0x00); device.write(0x00); device.write(0x00); device.write(0x00); delay(500); // Turn in place counter-clockwise device.write(137); // Drive device.write(0x00); // Velocity: 0x00c8 = 200 device.write(0xc8); device.write(0x00); // Radius: 0x0001 = Turn in place counter-clockwise device.write(0x01); delay(500); // Turn in place clockwise device.write(137); // Drive device.write(0x00); // Velocity: 0x00c8 = 200 device.write(0xc8); device.write(0xff); // Radius: 0x0001 = Turn in place clockwise device.write(0xff); delay(1000); // Turn in place counter-clockwise device.write(137); // Drive device.write(0x00); // Velocity: 0x00c8 = 200 device.write(0xc8); device.write(0x00); // Radius: 0x0001 = Turn in place counter-clockwise device.write(0x01); delay(500); // Passive Mode device.write(128); // Start -> Passive Mode } void loop() // run over and over again { }