我是AVR编程的新手。我正在尝试建立一个使用atmega8的直线跟随器机器人,它可以在两个红外传感器检测到黑色时自动停车。我的传感器连接到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;
} 发布于 2014-02-03 12:16:05
您可以尝试将传感器声明为易失性:
volatile uint8_t sensor;
发布于 2014-02-04 00:42:19
如果您使用任何优化进行编译,则延迟函数不能正常工作。
否则,它看起来很简单,这取决于传感器和马达的细节。这种行为有什么不稳定之处?
https://stackoverflow.com/questions/21519435
复制相似问题