Хмм... критикуйте...
Робот должен аццко по умному искать свет. Всего на борту три фотоэлемента и два бампера. один фотоэлемент находится около баттареи от которой робот заряжается.
(это типо зверская улыбочка такая...)
Кстати программа непроверенна - как накатал сразу вывесил
CODE:include <avr/io.h>
void delay(unsigned short ms)
{
unsigned short i, j, k, s;
for (i=0; i<ms; i++)
for (j=0; j<185; j++)
k++;
}
void forward()
{
PORTC |= _BV(PC1);
PORTC |= _BV(PC0);
}
void left()
{
PORTC |= _BV(PC1);
PORTC &= ~_BV(PC0);
}
void right()
{
PORTC |= _BV(PC0);
PORTC &= ~_BV(PC1);
}
void stop()
{
PORTC &= ~_BV(PC1);
PORTC &= ~_BV(PC0);
}
int solar() //здесь и далее если bool выдает ошибку. Почему?
{
stop();
while (PINB & (1<<PINB1)) // если = 1 стоять
{}
}
int leftsolar()
{
if (PINC & (1<<PINC5)) //если левый = 1 делать правым пока правый = 0
{
right();
while (!(PINC & (1<<PINC4)))
{}
stop();
}
}
int rightsolar()
{
if (PINC & (1<<PINC4)) //аналогично но наоборот
{
left();
while (!(PINC & (1<<PINC5)))
{}
stop();
}
}
int leftbumper()
{
if (!(PINC & (1<<PINC3))) //если левый бампер зажат ( у меня стоят NC ) делать левым пока зажат
{
left();
while (!(PINC & (1<<PINC3)))
{}
stop();
}
}
int rightbumper()
{
if (!(PINC & (1<<PINC2))) //аналогично но наоборот =)
{
right();
while (!(PINC & (1<<PINC2)))
{}
stop();
}
}
int main(void)
{
DDRС = 0x1f;
DDRB = 0xff;
while (1)
{
while (((PINC & _BV(PINC5))) & ((PINC & _BV(PINC4)))) //пока на обоих фотосенсорах 1 двигаться вперед
{
forward();
}
//ну тут я подумал: а если нет 1? то пусть фигарит покругу =)
Solar();
leftsolar();
rightsolar();
leftbumper();
rightbumper();
{
stop();
left(); //посмотреть свет слева...
delay (1000);
right(); //справа...
delay (2000);
forward(); //и если нету... двигать вперед. в итоге получится что он будет каждый раз поворачивать на определенный градус, засчет этого будет происходить движение по кругу
delay (10000);
}
}
} |