実現したいこと
Arduino側でのデータをprocessingに渡し、そのデータをプロットし折れ線グラフを書こうとしているのですがうまくいきません。
前提
processingで折れ線グラフを表示したいのですが、実行をしても画面が真っ暗でなにも出てきません。
どこに問題があるんでしょうか・・・。
初学者なもので、教えていただけたら幸いです。
参考にしたサイト:https://okasho-engineer.com/processing-real-time-graph/
該当のソースコード
processing
1import processing.serial.*; 2 3Serial port; 4 5int[] PlotData = new int[300]; 6int data; //リアルタイムデータ 7 8void setup() { 9 //fullScreen(); // windowのサイズを画面いっぱいにする 10 size(500,500); 11 smooth(); 12 background(0); // 背景を黒にする 13 frameRate(10); // frame rateを5fpsに設定 14 port = new Serial(this,"COM5",115200); 15 port.clear(); 16 for(int i=0; i<300; i++) // plotするデータの初期化 17 { 18 PlotData[i] = 0; 19 } 20} 21 22void draw() { 23 background(0); 24 TimeHistory(-width/2, -height/2+height/2/5, "ECG[deg]", data); // 時間履歴の表示 25} 26 27void TimeHistory(int positionX, int positionY, String name, int data) 28{ 29 // 引数説明 // 30 // positionX, positionYはグラフを表示する枠の左上の点 31 // nameはグラフの縦軸のラベル名 32 // dataはリアルタイムのデータ 33 // 枠線の描画 34 float Width = width/3*0.85; // 枠の幅 35 float Height = height/2*0.6; // 枠の高さ 36 pushMatrix(); // 座標系の保存 37 noFill(); // 塗りつぶしなし 38 stroke(100); // 枠線の色 39 strokeWeight(3); // 枠線の幅 40 translate(positionX, positionY); // 枠の左上の点を指定 41 rect(0, 0, Width, Height); // 枠の描画 42 // メモリ線の描画 43 strokeWeight(1); // メモリ線の幅 44 for (int i=1; i<6; i++) // メモリ線の描画 45 { 46 line(0, Height/6*i, Width, Height/6*i); // 縦軸 47 line(Width/6*i, 0, Width/6*i, Height); // 横軸 48 } 49 // メモリ値の描画 50 stroke(0); 51 fill(100); // メモリ値の文字色 52 // 縦軸のメモリ値 53 textSize(Height*0.06); // 文字の大きさ 54 textAlign(RIGHT); // 文字の座標指定位置 55 int j = -300; // 縦軸の目盛りの最低値 56 for (int i=6; i>=0;i--) // メモリ戦の描画 57 { 58 text(j, -width/3*0.02, Height/6*i); // 文字の描画 59 j = j + 100; // 縦軸の目盛りの更新 60 } 61 pushMatrix(); // 座標系の保存 62 rotate(radians(-90)); // 座標軸を90度回転 63 textAlign(CENTER); // 文字の座標指定位置 64 text(name, -Height/2, -width/3*0.1); // 縦軸ラベルの描画 65 popMatrix(); // 保存した座標系の出力 66 // 横軸のメモリ値 67 textAlign(CENTER); // 文字の座標指定位置 68 text("now", Width, Height*1.08); // 文字の描画 69 j = 0; // 横軸の目盛りの最低値 70 for(int i=0; i<=5; i++) 71 { 72 text(j, Width/6*i, Height*1.08); // 文字の描画 73 j = j + 5; // 横軸の目盛りの更新 74 } 75 text("time [s]", Width/2, Height*1.2); // 横軸ラベルの描画 76 // グラフの描画 77 pushMatrix(); 78 translate(0, Height/2); // 座標の原点を縦軸の中心に移動 79 PlotData[299] = data; // データの更新 80 for(int i=0; i<300-1; i++) // plotするデータ処理 81 { 82 PlotData[i] = PlotData[i+1]; 83 } 84 for(int i=0; i<300-1; i++) 85 { 86 stroke(255, 0, 0); // 線の色 87 line(Width/300*i, Height/6*PlotData[i]/30, Width/300*(i+1), Height/6*PlotData[i+1]/30); 88 } 89 popMatrix(); 90 stroke(0); // 線の色を戻す 91 popMatrix(); // 保存した座標系の出力 92} 93 94void serialEvent(Serial port){ 95 if(port.available() >=3){ 96 if(port.read() == 'H'){ 97 int high = port.read(); 98 int low = port.read(); 99 int data = high*256 + low; 100 101 for(int i = 0; i < 300-1;i++){ 102 PlotData[i] = PlotData[i+1]; 103 } 104 PlotData[299] = data; 105 } 106 } 107} 108
Arduino
1//test01 2 3const int ECG_sensor = 0; 4 5void setup() { 6 Serial.begin(115200); 7} 8 9void loop() { 10 int value = analogRead(0); 11 Serial.write('H'); 12 Serial.write(highByte(value)); 13 Serial.write(lowByte(value)); 14 delay(100); 15} 16 17
回答2件
あなたの回答
tips
プレビュー