目的
前回の実験ではArduino側で読み取った値をうまくprocessing側に表示
できなかった。ここの改善を図る。
方法
(1)arduino側プログラム
Arduino側のint型は2バイトで0~1023を表示可能だが
シリアル通信によって送ることが可能なデータ量は1バイトで
0~255となるため、Arduino側でシリアル通信で送る値を
map関数によって変更した。図1にプログラムコードを記載した。
void setup() {
Serial.begin(115200);
}
void loop() {
int val =map( analogRead(0),0,1023,0,255);
Serial.write(val);
}
図1:Arduino側プログラム
(2) Proessing側プログラム
こちらのコードは変更を加えていない。Processingの
プログラムコードは図2に示した。
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.5;
noStroke();
fill(#F7114F);
ellipse(x,500-y,10,10);
if(x>width){
x = 0;
background(255);
}
}
void serialEvent(Serial myPort){
y = myPort.read();
}
図2:Processing側プログラム
>espressif ESP-WROOM-02 Wi-Fiモジュール 価格:864円 |
結果
値がジャンプすることなくproessing側で表示することが出来た。
考察
まだprocessing側で表示できるのはArduino側のセンサー1個
のみのデータである。複数のセンサーの値を表示するには
配列と繰り返しの工夫を加をすれば可能ではないか。