MATLABでのシリアルポートの値の表示と保存

19 Ansichten (letzte 30 Tage)
Ochi Kai
Ochi Kai am 1 Okt. 2022
Kommentiert: Ochi Kai am 4 Okt. 2022
Arduinoで加速度ジャイロセンサを使い、
Serial.println(gx); %%これはArduinoコードの一部です
としてgxの値をMATLABでも表示させたく、
arduin = serialport('COM18',9600); %シリアルポートに接続
fopen(arduin);
fwrite(arduin,'a')
gx = zeros(100,1); %ここにデータを保存
uicontrol('String','Pause','Callback','jin=0;');
jin=1;
while(jin)
gx(end) = fscanf(arduin,'%d')
drawnow;
plot(gx)
gx(1:end-1)=gx(2:end);
title('mpu signal');
xlabel('time[s]');
ylabel('angle');
end
fclose(arduin);
% csvwrite('raw.txt',theta)
とすると、データをリアルタイムで表示することは出来るのですが、例えばArduinoのコードを
Serial.print(gy); Serial.print(" , "); %%これはArduinoコードの一部です
Serial.println(gx);
といった感じで2つのデータを表示、保存したい場合はどのようにコードを変更すればよいのでしょうか?
ご教授お願いいたします。

Antworten (1)

Atsushi Ueno
Atsushi Ueno am 1 Okt. 2022
Bearbeitet: Atsushi Ueno am 1 Okt. 2022
gxを1列から2列に増やせば、新たな変数gyを作らなくても2つのデータを同時に扱えます。
arduin = serialport('COM18',9600); %シリアルポートに接続
fopen(arduin);
fwrite(arduin,'a')
gx = zeros(100,2); % ここにデータを保存(1列⇒2列に拡張)
uicontrol('String','Pause','Callback','jin=0;');
jin=1;
while(jin)
temp = fscanf(arduin,'%d,%d'); % 受信データは[gx; gy]のベクトルで受け取る見込み
gx(end,:) = temp'; % 転置したベクトル1行をgxの最後の行に追加する
drawnow;
plot(gx)
gx(1:end-1,:)=gx(2:end,:); % ここも変更
title('mpu signal');
xlabel('time[s]');
ylabel('angle');
end
fclose(arduin);
csvwrite('raw.txt',gx); % 保存はコメントアウトされたこのコードでOK
writematrix(gx,'raw.txt'); % R2022aなら、開発が続いているこっちの方が良いです
  4 Kommentare
Ochi Kai
Ochi Kai am 4 Okt. 2022
ありがとうございます。
一応そちらでも試してみたのですが上手くいきませんでした。
Aruino側ではint型でgx,gyを宣言しています。それに伴い
temp = fscanf(arduin,'%d , %d')
としましたが、値がAruinoのシリアルポートと違う値を出します。
gxを見てみると、1列目と2列目が同じ値を取得している為、グラフ上でも2つの線は完全に被っています。
Ochi Kai
Ochi Kai am 4 Okt. 2022
現状を簡潔にまとめます、
Serial.print(gx);Serial.println(gy); %これはAruinoのコード、gxとgyはint型
delay(100);
としていて、Aruinoのシリアルモニタでは求めている数値がしっかりと反映されています。
temp = fscanf(arduin,'%d,%d');
これがMATLABコードで、恐らくAruinoの1つ目のgxは上手く表示されていますが、gx(MATLAB側の変数)を見ると1列目と2列目が全く同じ値(Aruinoのgxの値)を取得している状態です。

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu MATLAB Support Package for Arduino Hardware finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!