Капитан
Сообщений всего: 46
Дата рег-ции: Май 2010
|
Надеюсь тема ещё жива?
подкорректируете мой код? Выложу его блок-схему и написанный кусок, тупо содрать готовый не получается под свои нужды. Да и охото своё сделать.
===
int IRD = 12; //ДАТЧИК ДВИЖЕНИЯ ТЁПЛОГО ТЕЛА
int IRBL = 11; //ИНФРАКРАСНЫЙ БАМПЕР ЛЕВЫЙ
int IRBR = 10; //ИНФРАКРАСНЫЙ БАМПЕР ПРАВЫЙ
int Lmotor = 9; //ЛЕВЫЙ МОТОР
int Rmotor = 8; //ПРАВЫЙ МОТОР
enum {STOP, PERED, ZAD, LEVO, PRAVO};
void go(unsigned char direction){
switch (direction) {
case STOP:
Lmotor=LOW; // БЛОК "СТОП", МОТОРЫ ОТКЛЮЧЕНЫ
Rmotor=LOW;
break;
case PERED:
Lmotor=HIGH; //БЛОК "ВПЕРДЕ!", МОТОРЫ ВКЛЮЧЕНЫ
Rmotor=HIGH;
break;
case ZAD:
Lmotor=HIGH; //БЛОК "НАЗАД", МОТОРЫ ВКЛЮЧЕНЫ ОБРАТНЫМ ПОЛЮСОМ,( ЕЩЁ НЕ ЗНАЮ, КАК ПРИДУМАТЬ )
Rmotor=HIGH;
break;
case LEVO:
Lmotor=LOW; //БЛОК "ВЛЕВО", ЛЕВЫЙ МОТОР ВЫКЛЮЧЕН (СТОИТ НА ПЯТКЕ)
Rmotor=HIGH; //------------, ПРАВЫЙ МОТОР ВКЛЮЧЁН
break;
case PRAVO:
Lmotor=HIGH; //БЛОК "ВПРАВО", ЛЕВЫЙ МОТОР ВКЛЮЧЁН
Rmotor=LOW; //------------, ПРАВЫЙ МОТОР ВЫКЛЮЧЕН (СТОИТ НА ПЯТКЕ)
break;
}
}
void setup()
{
pinMode(IRD, INPUT); //устанавливаем 12 КОНТАКТ В РЕЖИМ ВВОДА
pinMode(IRBL, INPUT); //устанавливаем 11 КОНТАКТ В РЕЖИМ ВВОДА
pinMode(IRBR, INPUT); //устанавливаем 10 КОНТАКТ В РЕЖИМ ВВОДА
pinMode(Lmotor, OUTPUT); //устанавливаем 9 КОНТАКТ В РЕЖИМ ВЫВОДА
pinMode(Rmotor, OUTPUT); //устанавливаем 8 КОНТАКТ В РЕЖИМ ВЫВОДА
}
void loop()
{
if(((IRD==0) && (IRBL==0) && (IRBR==0))) go(PRAVO); // все датчики свободны движение в право
if(((IRD==1) && (IRBL==0) && (IRBR==0))) go(PERED); // датчик движения сработал, путь свободен
if(((IRD==1) && (IRBL==1) && (IRBR==1))) go(LEVO); // датчик движения сработал, путь закрыт, движение в лево
if(((IRD==1) && (IRBL==1) && (IRBR==0))) go(PRAVO); // датчик движения сработал, правый бампер сработал, движение в право
if(((IRD==1) && (IRBL==0) && (IRBR==1))) go(LEVO); // датчик движения сработал, левый бампер сработал, движение в лево
if(((IRD==0) && (IRBL==1) && (IRBR==1))) go(PRAVO); // датчик движения не работает, бампер сработал, движение в право
if(((IRD==0) && (IRBL==0) && (IRBR==1))) go(LEVO); // датчик движения не работает, правый бампер сработал, движение в лево
if(((IRD==0) && (IRBL==1) && (IRBR==0))) go(LEVO); // датчик движения не работает, левый бампер сработал, движение в право
}
===
это пока приблизительный код.
в теории на ардуинки поставлю инфракрасный датчик движения и пару ир-бамперов, последоватьльно опрашивая каждый из них (в связке по три, как в примере) будет происходить ответная реакция выводом на моторы.
Только вот думаю не будет ли данная последовательность сильно тормозить процесс реагирования всей системы в целом?(Отредактировано автором: 13 Февраля, 2013 - 15:31:20) |