リアルタイムで変化する変数を行列に格納したい。

8 ビュー (過去 30 日間)
雷太 鈴木
雷太 鈴木 2022 年 12 月 8 日
移動済み: Atsushi Ueno 2022 年 12 月 9 日
for t1 = 1 : n
t = t1 - t0; %時刻
theta = a * sin(omega * t); %角度θ
value = ((4095.0/(2.0*pi))*theta)+2048; %指令値
Value = round(value); %指令値valueを切り捨てたValue
str1 = sprintf("%d",Value); %数値を文字列に
writeline(s,str1);
writeline(s,"R");
m=0.5;
pause(m)
P=[t;theta;Value];
end
  3 件のコメント
交感神経優位なあかべぇ
交感神経優位なあかべぇ 2022 年 12 月 8 日
編集済み: 交感神経優位なあかべぇ 2022 年 12 月 8 日
現状はfor文の下記になっていますが、
for t = 1 : n
% 処理
pause(0.5);
end
下記のようにwhile文にすれば解決する(n番目以降の値も記録される)という認識でよいのでしょうか?
t = 1;
while true
% 処理
pause(0.5);
t = t + 1;
end
雷太 鈴木
雷太 鈴木 2022 年 12 月 9 日
移動済み: Atsushi Ueno 2022 年 12 月 9 日
そのようにやったのですが、リアルタイムで出てくる値をひとつづつ格納したいのですが、その方法が分かりません

サインインしてコメントする。

回答 (1 件)

Hernia Baby
Hernia Baby 2022 年 12 月 9 日
リアルタイムで格納が曖昧ですが、Pに1行ずつデータを付け足すプログラムを作りました。
clc,clear;
m = 0.5;
P = [];
n = 10;
t0 = 0;
a = 1;
omega = deg2rad(30);
for t1 = 1 : n
t = t1 - t0; %時刻
theta = a * sin(omega * t); %角度θ
value = ((4095.0/(2.0*pi))*theta)+2048; %指令値
Value = round(value); %指令値valueを切り捨てたValue
%% ここは置いときます
% str1 = sprintf("%d",Value); %数値を文字列に
% writeline(s,str1);
% writeline(s,"R");
%% ここで結果をコマンドウィンドウで確認できます
% fprintf('value = %i\n',value);
pause(m)
P=[P; t,theta,Value];
end
結果を見てみましょう
P
P = 10×3
1.0e+03 * 0.0010 0.0005 2.3740 0.0020 0.0009 2.6120 0.0030 0.0010 2.7000 0.0040 0.0009 2.6120 0.0050 0.0005 2.3740 0.0060 0.0000 2.0480 0.0070 -0.0005 1.7220 0.0080 -0.0009 1.4840 0.0090 -0.0010 1.3960 0.0100 -0.0009 1.4840
  1 件のコメント
雷太 鈴木
雷太 鈴木 2022 年 12 月 9 日
編集済み: 雷太 鈴木 2022 年 12 月 9 日
ありがとうございます。おかげで実行結果のようにできました。
もう一つ質問したいのですが、自分はこのプログラムでロボットをシリアル通信で動かしているのですが、
この秒数だとカクカク動いてしまうため、滑らかに動かすために、時間を経過時間で表したいのですが、どのように表したらよいか教えて頂けますでしょうか。よろしくお願いします。

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMATLAB 入門 についてさらに検索

タグ

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!