我是AVR编程的新手。我正在尝试使用atmega8构建一个Line follower机器人,当红外传感器检测到黑色时,它可以自行停放。我的传感器已连接到PORTD2
和PORTD3
,我的电机已连接到PORTB0
和PORTB4
。我计划运行然后将电机延迟3秒并关闭它们但机器人已经开始随意工作。请帮我查一下我的代码有什么问题。
#include<avr/io.h>
#include<util/delay.h>
int main()
{
DDRD=0b00000000;
DDRB=0b11111111;
uint8_t sensor;
uint8_t A= 0b00000000;
while(1)
{
A=0b00000000;
sensor = PIND;
A= sensor|0b11110011;
switch(A)
{
case 0b11110011:
PORTB=0b00010001;
_delay_ms(3000);
PORTB=0b00000000;
break;
case 0b11111011:
PORTB=0b00000001;
break;
case 0b11110111:
PORTB=0b00010000;
break;
case 0b11111111:
PORTB=0b00010001;
break;
}
}
return 0;
}
答案 0 :(得分:0)
您可以尝试将传感器声明为易失性:
volatile uint8_t sensor;
答案 1 :(得分:0)
如果您正在编译任何优化,延迟功能将无法正常工作。
否则,它看起来很简单,具体取决于传感器和电机的细节。这种行为有什么不稳定的?