【发布时间】:2015-10-09 07:25:10
【问题描述】:
我正在尝试控制 Arduino Uno 板上的三个 LED。这些 LED 连接到端口 D 的引脚 3、4、5 作为输出。
端口 D 的 2 号针连接到一个按钮,并且已配置 作为输入。
整个电路已经使用默认的 Arduino 代码进行了测试,并且功能齐全。然而,使用下面给出的代码(没有 arduino 库),无论按钮的状态如何,输入引脚(端口 D 上的引脚 2)总是读取为高电平。
任何帮助将不胜感激。
#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);
}
}
}
【问题讨论】:
-
你确定输入pullup/pulldown吗?
-
你写的PIN2是指PORTD的第二个pin还是PORTD的第三个pin?
标签: c arduino embedded avr avr-gcc