このコードをどこかからコピーしないことをお勧めしますが、一部のコードは意味をなさないものです。
たとえば、 'prkgbrake'とは何ですか? 「ブレーキ」とは何ですか?彼らは宣言されていません。なぜあなたは 'setup()'機能を持っていませんか?
それにもかかわらず、デバウンスは多くの方法で実現できます。私はちょうどあなたのコードを修正します。そうすれば、間違ったことを理解することができます。
int exbutton = LOW;
unsigned int _delay = 200;
int pushButton = 2;
void setup()
{
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(pushButton, INPUT_PULLUP);
}
void loop()
{
while (digitalRead(pushButton) == LOW && exbutton == LOW)
{
if((millis() - last) > _delay)
{
Serial.println("Button Pressed");
while(digitalRead(pushButton) == LOW);
}
}
last = millis();
}
Explanantion:あなたはそれをプルアップ/プルダウンを使用することをお勧めしボタンとデジタルのピンを使用する場合は、あなたのプッシュボタンを想定し
は、デジタルピン2に接続されています。あなたはそれのために外部抵抗または内部抵抗を使用することができます。内部抵抗はプルアップのみをサポートしています。
プルアップ/ダウンチェックアウトの詳細はArduino pageです。要点は、ピンを入力として使用すると、アンテナのように動作し、周囲からの信号をキャプチャすることができます。浮動状態と呼ばれます。したがって、ピンを既知の状態に保つ方が良いです。内部プルアップを使用する場合、ピンは常にHIGH
になります。したがって、ボタンの構成は、ピンを押したときにピンがLOW
になるようにする必要があります。プルアップ付き入力が有効として
Pull Up Configuration
コードpinMode(pushButton, INPUT_PULLUP);
デジタルピン2を可能にします。
loop()
は次のように動作するはずです:ボタンが押されている場合は
1)チェック(すなわち、それはLOW
ある場合)。
2)last
変数を更新しない場合。
3)そうであれば、last
を更新し、while
ループを入力します。
が_delay
より大きいかどうかを確認してください。そうでない場合は、while
ループに戻り、ボタンがまだ押されているかどうかを確認します。はいの場合は、millis()-last
が_delay
より大きいかどうかを確認します。前述の量のデバウンス遅延を経過するまで、これを継続します。ボタンは「_delay」時間前(すなわちHIGH
に行く)が押されたら、それはlast
を更新すると、ボタンが押されたかどうかと、遅延時間のカウントを開始しますされているかどうかをチェックします
5)。
N.B. _delay
変数で再生します。ボタンの応答性を定義します。