Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > Робототехника

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.06.2017, 08:29   #40
serjrobi
Junior Member
 
Регистрация: 26.12.2016
Сообщений: 5
Вес репутации: 0
serjrobi is an unknown quantity at this point
По умолчанию

Нуждаюсь в подробных комментариях по логике работы программы-

#include <CyberLib.h> #define motors_init {D4_Out; D5_Out; D6_Out; D7_Out;} #define robot_go {D4_Low; D5_High; D6_High; D7_Low;} #define robot_back {D4_High; D5_Low; D6_Low; D7_High;} #define robot_stop {D4_Low; D5_Low; D6_Low; D7_Low;} #define robot_rotation_left {D4_Low; D5_High; D6_Low; D7_High;} #define robot_rotation_right {D4_High; D5_Low; D6_High; D7_Low;} #define size_buff 5 //размер массива sensor uint16_t sensor[size_buff]; //массив для хранения замеров дальномера uint8_t stat=0; //направление разворота, присвоение переменной stat
//значения =0 void setup() { motors_init; //инициализация выходов моторов D11_Out; D11_Low; //динамик D14_Out; D14_Low; //пин trig ультразвукового сонара D15_In; //пин echo ультразвукового сонара randomSeed(A6_Read); //Получить случайное значение for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота wdt_enable(WDTO_500MS); //Сторожевая собака 0,5сек. } void loop() {Start uint16_t dist=GetDistance(); //производим замер дистанции

//присвоение переменной stat значения = 255;200;130 (ms задержки или скорость вращения ?)
void setup() 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) // объявл переменн arr -? ; dur-длит паузы { switch (arr) //смотрим в каком направление разворачиваться
// как получились значения arr=0 arr=255 ?? { case 0: robot_rotation_right; break; case 255: robot_rotation_left; break; } delay_ms(dur); //угол разворота 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;


---------------------------------------------
serjrobi вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:10. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика