• ベストアンサー

PICのプログラミングについて質問です

現在PICを制御するためのプログラムを組んでおり、その中で「連続で二回スイッチを押すとループを脱出」という動作をさせようと考え、以下のようなものを組んでみましたが、うまくループから脱出してくれませんでした。 悪い場所はなんとなくわかっているのですが・・・希望のように動作させるにはどのようにプログラムを組めばいいのか考えつかず困っています (;--) while(t == 3) { for( i = 0; i < 3000; ){ if(RA1 == 0) { for ( k = 0; k< 3000; ){ if(RA1 == 0) { t = 4; break;   } else { k++; DelayMs(1); } } } else { i++; DelayMs(1); } } }

質問者が選んだベストアンサー

  • ベストアンサー
  • maku_x
  • ベストアンサー率44% (164/371)
回答No.1

2重ループからの脱出ですから、goto もアリかと思いつつ、 > for( i = 0; i < 3000; ){ > if(RA1 == 0) { > for ( k = 0; k< 3000; ){ は、 for( i = 0; (i < 3000) && (t == 3); ){ if(RA1 == 0) { for ( k = 0; (k < 3000) && (t == 3); ){ で脱出できるかと。

chicken773
質問者

お礼

なるほど・・・多重ループから脱出はこのようにする方法が・・・ これは知りませんでした、お答え有難うございます(^^ お陰で無事装置を動作させる事ができました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

すでに遅いと思いますがアドバイスを。 1.スイッチのチャタリングが考慮されていません。 ハード的にチャタリング除去されていない場合はプログラムで除去する必要があります。 http://www.picgames.org/modules/tinyd1/index.php?id=5 2.「連続で二回スイッチを押すとループを脱出」は、次のようにループを分けて考えた方が簡単です。 (1)ONを待つループ。 (2)OFFを待つループ。 (3)ONを待つループ。(2)から一定時間経過してしまったら(1)のループへ戻る。 (4)ここに抜けてくれれば条件成立です。

chicken773
質問者

お礼

この部分でチャダリングを考慮するのを忘れていました(;^^ 有難うございます。 お二方のアドバイスのお陰で無事装置を動作させる事ができました! 感謝の気持ちでいっぱいです

すると、全ての回答が全文表示されます。

関連するQ&A