・目的
Arduinoで所得したデータをシリアル通信でprocessingに送りグラフを表示。
・使用したもの
Arduino uno
ブレッドボード
ジャンパワイヤー
可変抵抗
processing 3.2.1
・方法
(1)回路
図1のように組む。
図1:可変抵抗
(2)Arduino側のプログラム
アナログピン0から値を読み取るので0ピンを読み取るようにセット
読み取った値をvalに代入
int val = analogRead(0);
以下にてシリアル通信で値を送る
Serial.write(val);
今回使ったコードを図2に示した
void setup() {
Serial.begin(115200);
}
void loop() {
int val = analogRead(0);
Serial.write(val);
delay(100);
}
図2:Arduino側
(3)processing側のプログラム
Arduinoが接続しているポートアドレスを入力する
今回はCOM3だったので、そう記入した。
myPort = new Serial(this,"COM3",115200);
import processing.serial.*;
Serial myPort;
float x;
int y;
void setup() {
background(255);
size(800,500);
myPort = new Serial(this,"COM3",115200);
y = 500;
}
void draw() {
x+=0.1;
noStroke();
fill(#F7114F);
ellipse(x,500-y,10,10);
if(x>width){
x = 0;
background(255);
}
}
void serialEvent(Serial myPort){
y = myPort.read();
}
図3:processing側
(4)実行
Arduino unoをパソコンに接続し、(3)で作ったprocessingを起動させる。
可変抵抗のつまみを回しグラフの変化を観察する。
・結果
Arduinoとprocessing間での通信は一応成功した。しかし可変抵抗を回し
ていくと、途中で値がゼロに飛んでしまう。またグラフも滑らかではなく
速く可変抵抗のツマミを回すとグラフが線でなく点になってしまった。
これの解決作がこちらの記事
Arduino側のコードを一部改良すればいい
・考察
- グラフの値がゼロに飛ぶ理由について
まず、可変抵抗の値をうまく読み取れていない可能性を考慮し、
シリアル通信にて取得データを確認した。取得したデータは0~1023
であり正常であった。よって、問題はprocessing側有る可能性が出てきた。
次にprocessing側がシリアル通信にて取得したデータを確認するため
以下のプログラムを実行した。
import processing.serial.*;
Serial myPort;
int x;
void setup(){
size(1000,1000);
myPort = new Serial(this, "COM3",115200);
}
void draw() {
background(255);
ellipse(width/2,height/2,x,x);
textSize(16);
println(str(x));//下のバーに値を表示
}
void serialEvent(Serial myPort){
x = myPort.read();
}
結果は0~255までしか表示されておらず、受け取った値が255を
超えると0にジャンプする
以上の結果からシリアル通信が問題だと考えられる。
Arduinoで使われるint型は2バイトシリアル通信では1バイトずつ
データを送るので、ここを処理しないとうまく表示できないことが
分かる。
<参考文献>
http://d.hatena.ne.jp/kougaku-navi/20141008/p1