2012年3月1日木曜日

Arduino-Processing間シリアル通信

Processingをいじってみました。
送信されてきたシリアルデータをバーグラフにするものです。
サンプルや他サイトを参考にしました。



Arduinoは1バイトのシリアルデータを受け取るまで待機してます。
バッファを監視していて、1バイトのデータを受け取ると、アナログ入力0~2の3つのデータを送信。

Processing側は、
void draw(){...}でバーグラフ3本の描画をループ。

シリアルポートにイベントが発生すると、バッファに2個より多いデータがあるかを確認し、順番に3つの変数に代入し、次のデータを送信させる合図として1バイト送信します。
それをもとにバーグラフを描画します。

◆Processing側
import processing.serial.*;
Serial myPort;
int v0,v1,v2;
PFont font;

void setup(){
  myPort=new Serial(this,"COM7",9600);
  myPort.write(255);
  size(255*2,310);
  strokeWeight(2);
  font = loadFont("AmericanTypewriter-24.vlw");
  textFont(font,24);
}

void draw(){
  background(200);
  fill(255,0,0);
  text("value 0 :" + v0,0,34);
  fill(255,0,0);
  rect(0,40,v0*2,50);

  fill(0,255,0);
  text("value 1 :" + v1,0,124);
  fill(0,255,0);
  rect(0,130,v1*2,50);

  fill(0,0,255);
  text("value 2 :" + v2,0,214);
  fill(0,0,255);
  rect(0,220,v2*2,50);
}

void serialEvent(Serial myPort){
  if (myPort.available()>2){
  v0 = myPort.read();
  v1 = myPort.read();
  v2 = myPort.read();
  myPort.write(255);
  }
}

◆Arduino側
int v0,v1,v2;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available () > 0){
    v0 = analogRead(A0);
    v1 = analogRead(A1);
    v2 = analogRead(A2);
    v0=map(v0,0,1023,0,255);
    v1=map(v1,0,1023,0,255);
    v2=map(v2,0,1023,0,255);
    Serial.write(v0);
    Serial.write(v1);
    Serial.write(v2);
    Serial.read();
  }
}



環境:Arduino Uno R3、Arduino 1.0、Processing 1.5.1




0 件のコメント:

コメントを投稿