2016-05-20 5 views
2

ボタンを押したときにledをオフにするArduino回路をまとめました。それが来たら一度押すとコードをどのようにコード化すればいいのですか?任意の助けいただければ幸いArduino Button with LED

私の現在のコードは次のとおりです。あなたが望むすべてがこれを行う場合には

int ledred = 12; 
    int ledgreen = 8; 
    int BUTTON = 4; 
    int speakerPin = 1; 

    void setup() { 
    // initialize the digital pin as an output. 
    Serial.begin(9600); 
    pinMode(ledgreen, OUTPUT); 
    pinMode(ledred, OUTPUT); 
    pinMode(BUTTON,INPUT); 
    } 

void loop() { 
if(digitalRead(BUTTON) == HIGH){ 
    digitalWrite(ledred,HIGH); 
    digitalWrite(ledgreen,HIGH); 
    }else 
    { 
    digitalWrite(ledred,LOW); 
    digitalWrite(ledgreen,LOW); 
    } 
    } 

答えて

1

、あなたは割り込みピンのいずれかを使用してRISING(またはFALLING)のイベントを見ることができます。 this exampleに似

何か:

const byte ledPin = 13; 
const byte interruptPin = 2; 
volatile byte state = LOW; 

void setup() { 
    pinMode(ledPin, OUTPUT); 
    pinMode(interruptPin, INPUT_PULLUP); 
    attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING); 
} 

void loop() { 
    digitalWrite(ledPin, state); 
} 

void blink() { 
    state = !state; 
} 

マインドあなたはまだいくつかdebouncing strategyが必要な場合があります。

また、割り込みを使用する必要はありませんが、エッジ検出アルゴリズムが必要です。これらは上記のdebouncing記事で非常によく説明されています。 UNOボードの割り込みピンは謙虚なボタン押下では使用できないほど貴重なので、私は個人的にこれらを好む...:o)

+0

これは最初の文を除いて良い答えのようです。私は信号が上がったり下がったりするのを見て、それが新しいボタン・プレスであるかどうかを教えてくれません。 –

+0

@AdrianMcCarthy、あなたはバウンスのために意味ですか?私はすでにボタンの割り込みを使用していると確信しているからです。それは、バウンスのためにそれほど正確には行かなかっただけです。理想的な(またはハードウェアデバウンスされた)ボタンで、うまくいくはずです。 – heltonbiker