【发布时间】:2013-01-03 11:36:52
【问题描述】:
我正在为 Arduino 开发闪烁/褪色灯程序。我正在尝试建立一些基于 LED 状态和某些开关组合的交互性。考虑:按下按钮时,如果 LED 亮起,我想将其关闭,如果 LED 熄灭,我想将其打开。
但是,我找不到任何有关确定 LED 状态的信息。最接近的是this question 关于 Android,但我正在尝试找出是否可以从 Arduino 平台执行此操作。有没有人有任何实践经验或建议?
【问题讨论】:
我正在为 Arduino 开发闪烁/褪色灯程序。我正在尝试建立一些基于 LED 状态和某些开关组合的交互性。考虑:按下按钮时,如果 LED 亮起,我想将其关闭,如果 LED 熄灭,我想将其打开。
但是,我找不到任何有关确定 LED 状态的信息。最接近的是this question 关于 Android,但我正在尝试找出是否可以从 Arduino 平台执行此操作。有没有人有任何实践经验或建议?
【问题讨论】:
读取输出端口是绝对可以的。那就是
digitalWrite(LED_PORT, !digitalRead(LED_PORT));
将切换引脚。
【讨论】:
您有多种选择:
一,您可以将 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
}
【讨论】:
PORTB = 0x08?我如何确定一个引脚是否在“端口 B”上?谢谢!
<avr/io.h> 中声明的常量。十六进制值将引脚号表示为位掩码,即。 e.引脚 X 是 1 << x,所以引脚 8(嗯,它是引脚 7)是 1 << 7 = 128 = 0x80。确定哪个引脚在哪个端口上? AVR 数据表。