Я новичок в программировании AVR, и я пытаюсь реализовать резкий поворот вправо с помощью atmega8. Я смог реализовать прямой путь, но не смог реализовать резкий поворот вправо. Вот мой код:Внесите резкий поворот вправо, используя atmega8 для линейного повторителя
`#include <avr/io.h>
#include<util/delay.h>
int main(void)
{
DDRC=0b00000000;
DDRB=0b11111111;
int count=1,right=1;
while(1)
{
if((PINC&=0b00011111)==0b00000000)
{
PORTB=0b00000110;
}
else if((PINC&=0b00011111)==0b00001110)
{
PORTB=0&00100111;
}
else if((PINC&=0b00011111)==0b00001100)
{
PORTB=0b00000111;
}
else if((PINC&=0b00011111)==0b00000110)
{
PORTB=0b00100110;
}
else if((PINC&=0b00011111)==0b00001111)
{
if(count)
{
PORTB=0b0010011;
_delay_ms(200);
count--;
}
else if(((PINC&=0b00011111)==0b00000110)&&~(count))
{
PORTB=0B00000111;
}
}
else if((PINC&=0b00011111)==0b00011110)
{
if(right)
{
PORTB=0b0010011;
_delay_ms(200);
right--;
}
else if(((PINC&=0b00011111)==0b00000110)&&~(right))
{
PORTB=0B00100110;
}
}
}
}
Это, похоже, не работает для правого и левого поворотов. Любая идея, где я ошибаюсь?
сложно дать ответ, не понимая, какое оборудование вы используете ... сколько датчиков вы используете ... 5? Вместо того, чтобы попытаться вычесть фактически прочитанное значение из «значения центра» 01110, и работать с разницей ... помните состояния 10000 и 00001, хотя там, где робот проходит по краю. – MikeD
этот код беспорядок. должен действительно '' определять 'некоторые константы или объявлять некоторые' inline' -функции для проверки состояний входов (например, 'static inline bool RightSensorSensesLine() {return PINC & 0b00011111;}'. Как мы должны понимать ваш код со всеми этими беспорядочными, одинаково выглядящими двоичными литералы, не понимая смысла своих бит? –