Уважаемые учащиеся а также родители! Мы открыли новый набор в кружки робототехники Президенсткого Физико-математического лицея №239 г. Санкт-Петербурга по следующим направлениям: "BEAM-робототехника" (учимся создавать простых роботов, чтобы постичь азы роботостроения и получить необходимые навыки и знания в робототехнике и электронике); "Программирование микроконтроллеров Arduino" (учимся программировать и собирать своих первых программируемых роботов, делаем проекты и участвуем в соревнованиях); "Творческое проектирование Arduino" (создаем крутые проекты с использованием Arduino для участия в соревнованиях, конференциях выставках и тп). Обучение БЕСПЛАТНОЕ. Преподаватель: Мельников Сергей Алексеевич. Подробнее о кружках и о том, как в них попасть
Добрый вечер всем.занялся сборкой робота Fibo которого нашел в просторах инета.есть одно желание научиться писать и понимать программу.Кто знает ценные электронные книги или любую инфу выложите сюда или дайти ссылку чтобы научиться написанию программ.я не могу понять просто куда на какой порт и какие датчики надо подключать в этой программе
for(i=0; i<6; i++) //в цикле опросим все сенсоры { a=poll_sensor(i); //опрос сенсора 3 раза для исключения шума b=poll_sensor(i); //по результатам выставляем глобальный флаг с номером сработавших сенсоров c=poll_sensor(i); if(c>=gporog[i]) c=1; else c=0; if(b>=gporog[i]) b=1; else b=0; if(a>=gporog[i]) a=1; else a=0; c=c+b+a; if(c>=2)sensor_state|=1< else sensor_state&=~(1< }; if(sensor_state!=0) { env_free=0; //глобальный флаг step=0; //если препятствие есть, то обнуляем шаг }; }
void delay_walk (unsigned int time) //на вход задержка милисекундах, макс 65535, { //схлапывающаяся задержка, обнуляется как только обнаруживается препятствие gtime=time; while(gtime!=0) { check_env(); if (sensor_state != sensor_state_last && sensor_enable == 1) //если произошло изменение значения сенсоров и они разрешены { delay_ms(200); //пусть машинка прокатится по инерции к препятствию 0,2с что бы исключить различную дальность срабатывания датчиков break; }; //если произошло изменение в показаниях сенсоров то рвем задержку }; //время проверки окружения 20 мкс (0,2мс) }
//далее функции управления двигателями void f(int t) // Вперед { PORTD.1=0; PORTD.2=1; PORTD.3=0; PORTD.4=0; if(t!=0) delay_walk(t); }
void go(unsigned char napr) //Выборка направления и отдача команды двигателям { switch(napr) { case 0: stop(gTimeOfMove); break; case 1: f(gTimeOfMove); break; case 2: fr(gTimeOfMove); break; case 3: fl(gTimeOfMove); break; case 4: b(gTimeOfMove); break; case 5: br(gTimeOfMove); break; case 6: bl(gTimeOfMove); break; }; }
unsigned char next_move(void) //выясняем следующий ход { int a, b, c; a = rand()/327; //0..99 число c=0; for (b=0; b<=6; b++) //поик по таблице { if(a > c && a < (d[now][b]+c) ) break; c=c+d[now][b]; }; if (b==7)b=1; //если b будет 7 то контроллер зависает, нужно искать ошибку в алгоритме, пока просто закроем эту дыру now = b; return b; };
void decision(void) //функция, которая будет принимать решения на базе показаний датчиков { if (sensor_state==0b00000010) //если сработал какой то датчик с боков то запрещаем движение соотв бока disable_FL(); if (sensor_state==0b00000100) disable_FR(); if (sensor_state==0b00001000) disable_BL(); if (sensor_state==0b00100000) disable_BR(); //ниже уже срабатывание 2 и более датчиков if (sensor_state==0x03 || sensor_state==0x07 || sensor_state==0x05 || sensor_state==0x01) disable_allF();
if (sensor_state==0x18 || sensor_state==0x10 || sensor_state==0x30 || sensor_state==0x38) disable_allB(); //env_free у нас сбрасывается в 0 если есть препятствие if (sensor_state==0 && env_free!=1) //если сенсторы дают ноль но вокруг где то препятствие было { restore(); }; if (sensor_state!=0) //в любом случае если сработал датчик надо остановиться подумать { now=0; stop(); };
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 15,625 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off
while (1) { now=1; for (i=0;i<=5;i++) //Помигаем светодиодом после включения, заодно задержка перед троганием что бы успеть отбежать { led_on(); delay(500); led_off(); delay(500); };
Как вариант, раз в просторах интернета нашли, то и будьте добры всю нужную нам информацию и ссылки предоставить, а то название ну ни-о-чем не говорит ИМХО )
--------------------------------------------- похожий робота есть тут http://projects.roboclub.ru/?attempt но мне важнее научиться понимать и правильно самостоятельно писать программы и для этого я прошу помоши в поисках нужных уроков,заданий и нормальных и доступных книг желательно.заранее спасибо
timur999888, )) Эхх... Codepad имелось ввиду (по первой ссылке в поисковике) - интернет ресурс, на который постится программный код. Потом он публикуется и нужно просто скопировать на него ссылку. Но не факт, что сейчас именно кто-то ответит или подскажет, всё-таки лето, каникулы, отпуска, люди отдыхают.
timur999888, Вы слишком туманно и неточно формулируете свои вопросы. Как например понимать выражение: "..Скопировал программу в программу" ?! Предлагаете на форуме решить множество ваших проблем и дать один ответ. Так не бывает! Ни кто за вас учить программирование не будет, ни кто за вас писать программу не будет. Ссылки на интересующие вас книги по программированию можно за пару секунд получить в любом поисковике, набрав соответствующий запрос. Рекомендую начинать с простых, элементарных небольших программок с реакцией только на свет. Кстати, если уж вы собираете робота, потрудитесь самостоятельно нарисовать электрическую схему. Начинать сборку по нескольким ссылкам в стиле "приблизительно эта схема" не стоит, вы зря потратите своё и чужое время. Определитесь со схемой прежде чем программированием заниматься.
Спасибо за подсказку. выражение :скоприровал программу в прогрмамму я имел введу скопировал программу на писаннную на CodeVisionAVR для управлением робота в программу Codepad.и у меня траффика столько нету чтобы все книги подрят качать с инета,поэтому я обратился за помошью именно сюда.приветл примерного робота чтобы люди поняли что я добиваюсь от своего.за меня программу писать тоже не надо,я добиваюсь понять ее сам и написать ее тожесам.задаю глупые и туманные вопросы спросите почему!? потому что я не знаю что и как толом назвать.надеюсь я все правильно написал и растолковал.спасибо
Добавлено (01.08.2012, 19:17) --------------------------------------------- надеюсь в этот раз я правильно сделал и добавляю ссылку на программу для робота написанную на CodeVisionAVR ссылка http://codepad.org/Z6WfzkUh