RubyからSerialPortをたたく.

SerialPortを使えばRubyからSerialPortをたたくことができます.
マイコン側のプログラムを考えてやればシリアル通信の内容によってLEDとかを操作することもできます.
とりあえず

$ sudo gem install serialport

する.
とりあえず標準入力から入力した数字に応じてLEDが光る回数をコントロールするプログラムを作ってみる.
Arduino使いましょう.
Ruby側のプログラムは,

require "rubygems"
require "serialport"
 
port = "/dev/tty.usbserial-*********"
mySerial = SerialPort.new(port, 9600, 8, 1, SerialPort::NONE)
 
while true
  print( "enter number(1..9) : ")
  if((incomingByte = gets.chomp).to_s == "q")
      break;
  else
    mySerial.putc incomingByte
  end  
end
 
mySerial.close

こんな感じ.
Arduino側は,

int rcv = 0;
 
void setup(){
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}
 
void loop(){
  if(Serial.available() > 0){
    rcv = Serial.read();
    rcv -= 48;
    Serial.print(rcv);
    for(int i = 0; i < rcv; i++){
      Serial.print("*");
      digitalWrite(13, HIGH);
      delay(300);
      digitalWrite(13, LOW);
      delay(300);
    }
  }
  delay(1000);

こんな感じ.お手軽.<追記>
Arduino.ccのPlaygroundより, ( http://www.arduino.cc/playground/Interfacing/Ruby )<追記101104>
Ruby側のプログラムでArduinoからのデータを受信するとき

{ 
while true
 #処理
 if(rcv = mySerial.getc)
   if (rcv == 'c')
     #処理
   elsif (rcv == 'd')
     #処理
   end
end}

みたいにループの中で処理(例えば時間を計ったりするとき.)を行うとき.
mySerial.getcの部分は何かデータが来るまで待ち続けるようなので処理がここで止まってしまう.
とりあえずの解決策としては,マイコンなどのデータ送信する側で意味のないデータ(ここで言えば'c'や'd'以外)を送ってやればデータ受信待ちを抜けるし,意味のないデータなので特に処理もしない.
なんかいい方法あるとは思うんだけどなー.