Arduinoマイコンにて、変数が正常に初期化できません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kerotan0820
記事: 91
登録日時: 14年前

Arduinoマイコンにて、変数が正常に初期化できません

#1

投稿記事 by kerotan0820 » 10年前

Arduinoマイコンで、ドットマトリクスLEDに出力される矢印を早押しするゲームを作成しております。
本課題を終えた後の追加課題ではありますが、丸投げはしたくないので何かヒントだけでもいただけると幸いです。

まずプログラムはこちらです。
https://ideone.com/yFlsTi

プログラムの内容は、
起動後にメニューを表示し、左右のタクトスイッチを押すことでアプリを切り替え(表示機の数字も切り替える)。
上のタクトスイッチを押すことでゲームを開始します。

現在困っているのは2つ目の早押しゲームです。
表示されている矢印の向きのボタンを押す作業を10回行い、その速さを競います。
まずは10回の入力を受け付けてくれるか試しました。
すると、1回目の実行では正常に10回受けつけてメニューへ戻るのですが、2回目以降は10回未満しか受け付けてくれません。

カウント回数を示す content_haya はきちんと初期化していますし、そのほかにも初期化を忘れている場所が見当たりません。
この問題が全く埒が明かないため困っております。

何かお気づきの箇所がありましたらご教示いただけると幸いです。
けろけろにゃー (」・ω・)」うー!

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: Arduinoマイコンにて、変数が正常に初期化できません

#2

投稿記事 by みけCAT » 10年前

改善するかはわかりませんが、とりあえずinterrupt関数内で値を変化させるグローバル変数全てにvolatileをつけてみてください。
attachInterruptで指定した関数のなかでは次の点に気をつけてください。

・delay関数は機能しません
・millis関数の戻り値は増加しません
・シリアル通信により受信したデータは、失われる可能性があります
・割り当てた関数のなかで値が変化する変数にはvolatileをつけて宣言すべきです
(http://www.musashinodenpa.com/arduino/r ... 0&pos=3045)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kerotan0820
記事: 91
登録日時: 14年前

Re: Arduinoマイコンにて、変数が正常に初期化できません

#3

投稿記事 by kerotan0820 » 10年前

>>みけCAT様

こんにちは。
ご指摘ありがとうございます。確かに volatile をつけるように書いてありました。
しかし付け加えたものの入力を受け付けなくなってしまう現象は改善されませんでした。
content_haya のクリアとミスの判定文を無くしたところ、何度実行しても入力を受け付けなくなるということは無くなりました。
やはり初期化が正常になされていないようなのですが、原因がわからず今も考えております。

追記>05.19_03:16
チャタリングが原因の可能性が大きい気がしてきました。
メニューで上を押した際にチャタリングが発生すると無条件に判定が行われてしまいバグが起きるようです。
はっきりそうとは分かっていないので、ゲーム開始までのカウントが終わるまで入力を受け付けないフラグを立ててみたいと思います

追記>05.19_06:27
https://ideone.com/vpOHI5
全く入力できなくなるという現象が発生すると、USBを挿し直すまで治らなかったのですが
5回に1度ほどしかバグらなくなりました。
何が原因かはっきりとわからないのですが、millis()関数の使い方を少し変えただけです。
もやもやが残りますが、課題は一応これで提出としたいと思います。

解決とはいっておりませんが、だいぶ改善でき、色々なこともわかったの一応これで解決としたいと思います。
有難うございました。
けろけろにゃー (」・ω・)」うー!

閉鎖

“C言語何でも質問掲示板” へ戻る