我正在尝试控制Arduino Uno板上的三个LED。这些 LED连接到端口D的引脚3,4,5作为输出。
端口D的引脚2连接到按钮,并进行配置 作为输入。
整个电路已经过默认的Arduino代码测试,功能齐全。但是,使用下面给出的代码(没有arduino库),无论按钮的状态如何,输入引脚(端口D上的引脚2)始终读为HIGH。
任何帮助将不胜感激。
#include <avr/io.h>
#include <util/delay.h>
#define IS_LOW(reg, pin) ((reg) & (1 << (pin)) == 0)
#define SET_BIT(reg, pin) do{(reg) |= 1 << (pin);} while(0)
#define CLEAR_BIT(reg, pin) do{(reg) &= ~(1 << (pin));} while(0)
int main (void)
{
DDRD &= ~(1 << DDD2); //pin 2 on port D as INPUT
DDRD |= 1 << DDD3; //pin 3 on port D as OUTPUT
DDRD |= 1 << DDD4; //pin 4 on port D as OUTPUT
DDRD |= 1 << DDD5; //pin 5 on port D as OUTPUT
while(1)
{
if (IS_LOW(PIND, PD2))
{
SET_BIT(PORTD, PD3);
CLEAR_BIT(PORTD, PD4);
CLEAR_BIT(PORTD, PD5);
}
else
{
CLEAR_BIT(PORTD, PD3);
CLEAR_BIT(PORTD, PD4);
SET_BIT(PORTD, PD5);
_delay_ms(250);
SET_BIT(PORTD, PD4);
CLEAR_BIT(PORTD, PD5);
_delay_ms(250);
}
}
}
答案 0 :(得分:4)
不幸的是,&
运算符的优先级低于==
运算符之一。
您应该像这样定义IS_LOW
宏:
#define IS_LOW(reg, pin) (((reg) & (1 << (pin))) == 0)