##実現したいこと
arduino(今回はESP32を使用)からシリアル通信を行って数値を送り、prossesingで読み取りたいです。送る数値は出力電圧と可変抵抗の抵抗値です。※可変抵抗は圧力センサーです。
回路は下のようなものです。
※下のプログラムはシリアル通信で得たデータをCSVにまとめるプログラムも書いてあります。
##現状
「arduinoプログラム」
const double R1 = 10;//10kΩだから10000? double sensors[2]; double Vo, Rf; void setup() { Serial.begin(9600); sensors[0] = 0; sensors[1] = 0; } void loop() { double ain = analogRead(4); Vo = ain * 3.3 / 4096.0; Rf = R1*((3.3/Vo)-1); sensors[0] = Rf; sensors[1] = Vo; Serial.print(sensors[0],2); Serial.print(","); Serial.println(sensors[1],2); delay(200); }
「processing」のプログラム
import processing.serial.*; Serial mport; PrintWriter output; double[] sensors = new double[2]; int p; void setup() { mport = new Serial(this, "COM3", 9600);//シリアルポートの設定 mport.clear(); String filename = nf(year(),4) + nf(month(),2) + nf(day(),2) + nf(hour(),2) + nf(minute(),2) ; output = createWriter( filename + ".csv"); output.println( "resist x ,volt y" ); mport.bufferUntil('\n'); } void draw() { } void serialEvent(Serial myport) { // シリアルバッファーを読込み String myString = myport.readStringUntil('\n'); // 空白文字など余計な情報を消去 myString = trim(myString); // コンマ区切りで複数の情報を読み込む int sensors[] = int(split(myString, ',')); // 読み込んだ情報の数だけ、配列に格納 if (sensors.length > 1) { print(sensors[0]); print(","); println(sensors[1]); output.println( sensors[0] + "," + sensors[1] ); } } void keyPressed(){ if( key == 'q' ){ output.flush(); output.close(); exit(); } }
##結果
「arduino結果」
inf,0.00 センサーを押していないとき
2.63,2.61 押してる途中
0.00,3.30 最大値
.
.
.
.
左が抵抗で右が電圧です
圧力センサーの抵抗値が0の時ESP32の電圧になっているので結果は問題ないと思います。
「processing結果」
0,0
0,0
0,0
.
.
.
aduinoの結果が表示されてほしかったのにされません…
##質問
なぜprocessingでの結果は0になってしまうのでしょうか
void draw()のところ、何も書いてませんが問題ないでしょうか?
##環境
Windows10 64bit
CPU i5
RAM 8GB
arduinoIDE設定
ボード:ESP32 Dev Module
シリアルポート:使用できるポート確認済み(COM3)
使用した圧力センサー:FSR402
書き込みも正常に終えています。
いろんなサイトを下手に読んで切り貼りしたせいで頭の中が混乱してしまいました…
読みずらいとは思いますが皆様にご教授いただけたら思います。
回答3件
あなたの回答
tips
プレビュー