if( dist < 10) {rotation(stat, 255);} else //если 10см максимальный угол разворота if( dist < 20) {rotation(stat, 200);} else //если 20см средний угол разворота if( dist < 40) {rotation(stat, 130);} else //если 40см минимальный угол разворота {robot_go; stat=~stat;} //поехали!!! wdt_reset(); //покормить собаку End;} //*************************************************** void rotation(uint8_t arr, uint8_t dur) { switch (arr) //смотрим в каком направление разворачиваться { case 0: robot_rotation_right; break; case 255: robot_rotation_left; break; } delay_ms(dur); //угол разворота robot_stop; //стоп мотор! } //*************************************************** uint16_t GetDistance() { uint16_t dist; for (uint8_t i = 0; i < size_buff; ++i) //производим несколько замеров { D14_High; delay_us(10); D14_Low; //запустить измерение dist = pulseIn(15, HIGH, 2400); //считываем длительность времени прохождения эха, ограничить время ожидания if(dist==0) dist=2400; sensor[i]=dist; //сохранить в массиве delay_ms(40); //задержка между посылками wdt_reset(); //покормить собаку, что бы она не сбежала } dist=(find_similar(sensor, size_buff, 58))/58; // //фильтруем показания датчика и переводим в см return dist; } //*************************************************** void beep(uint8_t dur, uint16_t frq) { dur=(1000/frq)*dur; //рассчет длительности бипа for(byte i=0; i<dur; i++) { D11_High; delay_us(frq); D11_Low; delay_us(frq); } }
Снимал видео несколько раз, но робот почему то сразу выбирался из ловушки
Но вот наконец то попался вариант, когда робот покрутился прежде чем выбраться