• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:waitのつもりがwaitされない!)

waitしない!C言語初心者のライントレーサー作成方法

このQ&Aのポイント
  • C言語初心者の方が作成したライントレーサーですが、後進がうまくいかない問題が発生しています。
  • プログラムの中でmotor=0x60となっている箇所が後進の処理をしている部分ですが、何らかの原因で後進ができていないようです。
  • 原因として、プログラム中のwait関数の処理がうまく動作していない可能性が考えられます。

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

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.4

motorはmainで定義した自動変数ですから、これに何を書き込んでもプログラムの外部へは何も反映されません。 質問ではTRISBやPORTBが何か記載がありませんが、質問のプログラムで後退だけでもモータが動くことを考えると、これらの変数がモータの制御ポートを表しているのでしょう。 無限ループの中を PORTB=0x90; wait(1000); PORTB=0x60; wait(1000); にしてどうなるか確認してみましょう。

maruyama6611
質問者

お礼

おおおぉ! 動きました! No.3のお礼のように、motorの値をPORTBに代入させていたのですが、これだとしっかりと動きました。 motorをPORTBに代入させるとだめなんですかね。。。 ともかく、ありがとうございます!

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

#2でも言われてますが「前進の命令が送られてないから」ですね。 motor=0x90だけではモーターへの指令になりません。

maruyama6611
質問者

お礼

>motor=0x90だけではモーターへの指令になりません。 TRISB=0x00; でpicマイコンのポートBを出力と設定し、 PORTB=motor でポートBにmotorの値を代入しています。 後退はするので、その設定自体はあっていると思うんです。 (自信はありませんが・・・) 後退するということは、何らかの理由でmotor=0x90という指令がスキップされてしまっているのでしょうか?

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> PORTB=motor; これで命令送ってるんだと思いますが 実際に送られる命令がどうなっているか、自分がマイコンになったつもりでプログラムを追ってみたらどうです?

maruyama6611
質問者

お礼

別に問題ないと思うのですが…(泣

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

最適化で、forがまるまる削除されてたりしませんか? それか、実行時間が短かすぎてウェイトの役目をはたしてないか。

maruyama6611
質問者

お礼

最適化はしてませんので、問題ないと思います。 試しにwaitの値を一ケタ増やしてみました。 すると、スイッチを入れた後にほんの少し間をあけてから後進しました。 ということはwaitされている?のでしょうか。 それはともかく、なぜ後退するんですか?? プログラム的には前進と後退を無限ループさせているので、後退しかしないというのはおかしいと思うのですが。。。 結局何が違うのでしょうか。。。