秒数を決めての出力

18 ビュー (過去 30 日間)
Ochi Kai
Ochi Kai 2022 年 9 月 2 日
コメント済み: Ochi Kai 2022 年 9 月 7 日
ロボットを自作し、Bluetooth接続にてMATLABから操作出来るものを作成しました。
現状、コマンドウィンドウもしくはプログラムにおいて
fprintf(device,'1');という風に1を入力すると前進、fprintf(device,'0');という風に0を入力すると停止するようにつくっています。
例えばワークスペース内に変数A=[1;1;1;1;1;0;0;0;0;0]があったとします。1秒ごとにこれらの値を出力し、ロボットを操作したい(今回の場合は5秒前進し、5秒止まり終了したい)のですが、for文などを使う際に秒数を決めて動かすにはどのようにすればよいのでしょうか?for文以外の手法でも構いません。よろしくお願いいたします。

採用された回答

交感神経優位なあかべぇ
交感神経優位なあかべぇ 2022 年 9 月 3 日
編集済み: 交感神経優位なあかべぇ 2022 年 9 月 3 日
timerを使用した例も貼り付けます。
A = [1;1;1;1;1;0;0;0;0;0];
htimer = timer('ExecutionMode', 'fixedRate', 'Period', 1, 'TimerFcn', @(htimer, event) TimerFcn(htimer)); % 1秒ごとにTimerFcnを実行するタイマーを作成
start(htimer);% タイマーの実行
function TimerFcn(htimer)
A = evalin('base', 'A'); % ベースワークスペースからAをコピー
device = evalin('base', 'device');
fprintf(device, num2str(A(1)));% Aの先頭データをロボットに指示
A(1) = [];% Aの先頭データを削除
assignin('base', 'A', A);% ベースワークスペースのAを上書き
if isempty(A)% Aにデータがなくなり次第、タイマーをストップする。
stop(htimer)
end
end
  4 件のコメント
Ochi Kai
Ochi Kai 2022 年 9 月 3 日
ちなみに以下のような警告が発生しています。
警告: Period プロパティの精度は 1 ミリ秒に制限されています。ミリ秒未満の精度
は無視されます。
Ochi Kai
Ochi Kai 2022 年 9 月 7 日
0.1秒ごとにすることで上手くできました。
ありがとうございました。

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

その他の回答 (1 件)

Atsushi Ueno
Atsushi Ueno 2022 年 9 月 3 日
pause関数で待ち時間を作れば、やりたい事が出来ます。
A = [1;1;1;1;1;0;0;0;0;0];
for a = num2str(A)' % Aを文字に変換⇒転置してfor文でアクセス
fprintf(device,a);
pause(1.0);
end
  1 件のコメント
Ochi Kai
Ochi Kai 2022 年 9 月 3 日
詳しくご回答ありがとうございます。
実際に実行してみたところ、提示していただいたプログラムにて上手く実行できました。
しかし、今回分かりやすくするために1秒ごととさせていただいたのですが、厳密には0.001953秒(1/512秒)毎に動かしたいと考えています。
たとえばA=[1,1,1,,,0,0,0]で1×1024の行列があり、前進1秒停止1秒で動かしたいのですが、実際にやってみるとやはりラグのせいか、1秒でなく15秒ほど動いてしまいます。
これを解決できる方法など、思いつけばお伺いできないでしょうか?
重ねての質問となり申し訳ありませんが、よろしくお願いいたします。

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

カテゴリ

Help Center および File Exchangeネットワーク接続と調査 についてさらに検索

タグ

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!