Я новичок в программировании AVR. Я пытаюсь построить линейный последовательный робот, используя atmega8, который может припарковаться, когда инфракрасные датчики обнаруживают черный. мои датчики подключены к PORTD2
и PORTD3
, а мои моторы подключены к PORTB0
и PORTB4
. Я планировал запустить, а затем задержать двигатель на 3 секунды и отключить их, но робот начал работать беспорядочно. Пожалуйста, помогите мне узнать, что не так с моим кодом.Линейный следящий робот с использованием atmega8
#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;
}
Какие именно датчики? Действительно ли они падают ниже активного низкого напряжения, когда «темный»? Кроме того, вы можете проверить только соответствующие контакты, а не весь порт. Вы объявляете весь порт D в качестве входов, а некоторые из них могут плавать и давать неожиданные значения. –