使用atmega8的线跟随机器人

时间:2014-02-03 03:59:27

标签: avr atmega

我是AVR编程的新手。我正在尝试使用atmega8构建一个Line follower机器人,当红外传感器检测到黑色时,它可以自行停放。我的传感器已连接到PORTD2PORTD3,我的电机已连接到PORTB0PORTB4。我计划运行然后将电机延迟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;
} 

2 个答案:

答案 0 :(得分:0)

您可以尝试将传感器声明为易失性:

volatile uint8_t sensor;

答案 1 :(得分:0)

如果您正在编译任何优化,延迟功能将无法正常工作。

否则,它看起来很简单,具体取决于传感器和电机的细节。这种行为有什么不稳定的?