-1

ボタンが押された回数を追跡する簡単な Arduino ゲームを作成しようとしています。各ユーザーに 1 つずつ、2 つのボタンがあり、Arduino が選んだ乱数に最も近い人が勝ちます。勝者ボタンの横にあるライトである「優勝」が点灯します。しかし、私はわだち掘れのように思われることに行き詰まっています。先に進む前に、私が arduino/C++ 環境全体にかろうじて 2 週間しか経っていないため、私の知識はかなり低いことを明かします。

基本的に私が実現したいのは、ゲームが一定時間 (たとえば 5 秒) 続き、5 秒後にすべてのボタン プッシュが集計および比較され、勝者が選ばれることです。その後、ゲームは自動的にリセットされ、再びプレイできるようになります。私が立ち往生しているのは、タイミング機能です。gameClock私はもともと関数から変数を減算していましたが、関数millis()をリセットするのは悪い習慣であると読みましたmillis()。おそらく、私のコードによって、私が達成しようとしていることをよりよく理解できるでしょう。

#include <Bounce.h>
  //Using Arduino UNO
  #define RBUTTON 2
  #define RRLED 3
  #define RGLED 4
  #define MBLED 5  
  #define LGLED 6
  #define RLLED 7
  #define LBUTTON 8

  Bounce BounceR = Bounce(RBUTTON, 5);
  Bounce BounceL = Bounce(LBUTTON, 5);

  int lastStateR = 0;
  int lastStateL = 0;
  int switchLCount = 0;
  int switchRCount = 0;
  long gameClock = 5000;

  void setup() {            
    //LED from left to right
    pinMode(RBUTTON, INPUT);
    pinMode(RRLED, OUTPUT); //Red
    pinMode(RGLED, OUTPUT); //Green
    pinMode(MBLED, OUTPUT); //Blue
    pinMode(LGLED, OUTPUT); //Green
    pinMode(RLLED, OUTPUT); //Red
    pinMode(LBUTTON, INPUT);
    Serial.begin(9600);

  }

  void loop() {
    BounceR.update();
    BounceL.update();
    int total = switchRCount + switchLCount; 


    int valueR = BounceR.read();
    int valueL = BounceL.read();


if (valueL != lastStateL) {
  if (valueL == HIGH) {       
      switchLCount++;
      Serial.print("Left button:");
      Serial.println(switchLCount);
      Serial.print("Total: ");
      Serial.println(total);      
    }  
}
  lastStateL = valueL;

if (valueR != lastStateR) {
  if (valueR == HIGH) {
      switchRCount++;
      Serial.print("Right button: ");
      Serial.println(switchRCount);
      Serial.print("Total: ");
      Serial.println(total);

    } 
}
  lastStateR = valueR;

  }
4

1 に答える 1

3

この件に関するヘルプについては、arduino.cc フォーラムを参照してください。知識のアーカイブ全体に加えて、arduino の経験が豊富な多くの人がいます。

スケッチには基本的に 3 つの問題があります。まず、あなたが言ったように、gameClock はあなたが望むようには機能していません。カウンターを使用するだけではそれをカットすることはできません。わずか 16Mhz でも、arduino は 5 秒よりもはるかに短い時間でそれを通り抜けます。実際に時間を計る必要があります。

次に、ボタンの「デバウンス」が壊れています。ボタンのデバウンスは、実際にはかなりトリッキーです。幸いなことに、多くの人がすでに問題を解決しています。Arduino ライブラリ、フォーラム、プレイグラウンドを確認してください。ここでの問題は、lastDebounceTime 変数を何も設定しないことです。

最後に、スケッチはゲームごとに 1 回だけボタンを読み取ります。それは他のすべてを捨てます。それはあなたのデバウンスを殺し、ボタンを押す回数を台無しにします。

私はあなたにそれを解決する機会を与えるために今停止します. さらにヘルプが必要な場合は、別のコメントを投稿してください。

于 2013-12-19T23:51:56.870 に答える