0

私はarduinoを試していて、状態スイッチでいくつかのボタンをプログラムしました。「オン」だった場合は「オフ」になり、その逆も同様です。

#include <Bounce.h>

const int buttonPin = 2;     
const int ledPin =  6;      

int ledState = HIGH;     
int a = LOW;            
int b = LOW;  
Bounce push1 = Bounce( buttonPin,5 );

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  push1.update ( );
  int x = digitalRead(push1.read());
  if (x != b) {
    if (x == HIGH) {
      if (a == HIGH) {
        a = LOW;
        }
        else {
          a = HIGH;
        }
  }
  else {
    }
  }

digitalWrite(ledPin, a);
Serial.println(a);  // Weird thing
b = x;
}

それはうまくいきますが、奇妙なことは、私がプログラミングしていたときに、COMを介して出力を監視するためにいくつかのシリアルプリントを追加したことです。それがすべてうまくいった後、私は排除したかったのSerial.println(a);ですが、それはうまくいきません!

ループは、ボタンを押してもまったく反応しません。何か不足していますか?この種の原因は何ですか?多分私は何かを逃したので、新鮮な目は素晴らしいでしょう:)

どうもありがとう!

4

2 に答える 2

2

を呼び出して、ボタンの状態を読み取っていますdigitalRead(push1.read())

これはほぼ間違いなく間違っています (ただし、Bounce ライブラリは使用していません)。push1.read()おそらく HIGH (0x1) または LOW (0x0) のボタンの状態を読み取っています。このボタンの状態値は、 への呼び出しで読み取るためのピンとして使用されますdigitalRead。したがって、ボタンがあるピン2ではなく、ピン0または1の状態を読んでいるように見えます。私の記憶が正しければ、ピン 0 と 1 はハードウェアのシリアル ポートです。

変化する:

int x = digitalRead(push1.read());

に:

int x = push1.read();

そして、それがよりうまく機能するかどうかを確認してください。

Serial.println(a)は、これはニシンだと思っています。確かに遅延として機能しているでしょう。ボタンではなくシリアルポートから「ボタンの状態」( )を読み取っていると思われるため、シリアルポートとコードの間で奇妙な相互作用が発生している可能性がありxます。

于 2013-01-24T08:50:18.270 に答える
1

mtrbはその点で正しいです

int x = digitalRead(push1.read());

問題の原因です。ライブラリのArduinoのWebページを見ることができ、その例は最初は見逃されるかもしれません。

digitalWrite(LED, bouncer.read());

ただし、注目に値するのは

int x = push1.read();

ライブラリ コードによると、digitalread(buttonPin); を定期的に読み取るだけです。本当のメリットはあまりありません。通常、より有益な場合

if (push1.fallingEdge()) {
...

falling/risingEdge() 関数はステートフルであり、これらのメンバー関数は statechange をクリアすることに注意してください。したがって、新しいエッジには読み取り用のフラグが付けられます。

于 2013-01-24T14:22:36.570 に答える