秒数を決めての出力

조회 수: 12 (최근 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일
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 CenterFile Exchange에서 ネットワーク接続と調査에 대해 자세히 알아보기

태그

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!