我正在研究Arduino的閃爍/衰落燈程序。我試圖建立一些基於LED狀態和某些開關組合的交互性。考慮:按下某個按鈕時,如果指示燈亮起,我想將其關閉,如果指示燈熄滅,我想將其打開。Arduino如何檢測LED的狀態?
但是,我一直未能找到有關確定LED狀態的任何信息。最近的是關於Android的this question,但我試圖找出我是否可以從Arduino平臺上做到這一點。有沒有人有任何實際經驗或建議?
我正在研究Arduino的閃爍/衰落燈程序。我試圖建立一些基於LED狀態和某些開關組合的交互性。考慮:按下某個按鈕時,如果指示燈亮起,我想將其關閉,如果指示燈熄滅,我想將其打開。Arduino如何檢測LED的狀態?
但是,我一直未能找到有關確定LED狀態的任何信息。最近的是關於Android的this question,但我試圖找出我是否可以從Arduino平臺上做到這一點。有沒有人有任何實際經驗或建議?
您有幾種選擇:
一,你可以存儲LED狀態布爾值,並按下按鈕,否定這一點,把它寫在LED端口:
void loop()
{
static int ledState = 0; // off
while (digitalRead(BUTTON_PIN) == 0)
; // wait for button press
ledState = !ledState;
digitalWrite(LED_PORT, ledState);
}
二,如果您不介意直接訪問AVR的端口:
void init()
{
DDRD = 0x01; // for example: LED on port B pin 0, button on port B pin 1
PORTB = 0x00;
}
void loop()
{
while (PINB & 0x02 == 0)
; // loop until the button is pressed
PORTB ^= 0x01; // flip the bit where the LED is connected
}
讀取輸出端口是絕對可以的。那就是
digitalWrite(LED_PORT, !digitalRead(LED_PORT));
會切換引腳。
謝謝!簡單而優雅。我將在稍後閱讀切換庫。 Avesome頭像。 :) – dwwilson66
簡單,優雅,沒有upvotes ... :( –
到AVR端口直接訪問是更加希望的。關於代碼的問題,儘管 - 仍然是一個編碼新手。 :) DDRD&PORTB ...是那些Arduino常量?任意變量名稱?十六進制值是否代表引腳號?例如,引腳8上的LED將被表示爲「PORTB = 0x08」?如何確定引腳是否在「B端口」?謝謝! – dwwilson66
@ dwwilson66這些是在''中聲明的常量。十六進制值表示作爲位掩碼的引腳號。即引腳X是'1 << x',所以引腳8(呃,引腳7)是'1 << 7 = 128 = 0x80'。確定哪個引腳在哪個端口上? AVR數據表。 –
2013-01-03 13:27:43
硬件常量...明白了。今天晚些時候我會更深入地研究數據表!非常感謝幫助我理解它! – dwwilson66