読者です 読者をやめる 読者になる 読者になる

Max/MSPからArduinoに接続したサーボモータを動かす

シンガポールにきてからArduinoを使い始めた。Max/MSPからArduinoサーボモータを動かす上手い方法が見つからなかったので、自分なりに作ってみた。なおArduinoはUnoを使用。サーボモータは Tower Pro SG90。サーボはArduino Unoのアナログ3番ピンに接続します。

四谷工作研究所+建築発明工作ゼミのコードを流用させてもらいました。
http://kousaku-kousaku.blogspot.com/2008/06/arduino.html
http://artstudium.org/kousaku/2007/06/arduino.html

#include 
Servo servo;
int pulseWidth;
int sum;
const int KETAMAX = 3;
int keta;

void setup(){
  Serial.begin(9600);
  servo.attach(3);
  iniKeta();
}

void loop(){
  if(Serial.available()>0){
    int val = Serial.read();
    if(val == 's'){
      iniKeta();
    }else{
      val -= 48;
      for(int i=1; i < keta; i++){
        val *= 10;
      }
      sum += val;
      keta --;
      if(keta == 0){
        Serial.println(sum);
      }
    }
  }
  pulseWidth=map(sum,0,255,544,2400);
  servo.writeMicroseconds(pulseWidth);
}

void iniKeta(){
  keta = KETAMAX;
  sum = 0;
}

こんなかんじでパッチを繋ぎます。

これでスライドバーからサーボモータを0〜180度・256段階の数値で動かせるようになりました。
しかし、ほんとのところ、こんなに回りくどいやり方をしなければならないんだろうか。もっとスマートな方法あったら教えてください。