Вот программный код для движения робота вперед/назад на полной скорости void setup(){ pinMode(3,OUT); // Motor A1 pinMode(5,OUTPUT);// Motor A2 pinMode(6,OUTPUT); // Motor B2 pinMode(9,OUTPUT); // Motor B1 }void Forward() { // Подпрограмма движения робота вперед digitalWrite(3,HIGH); digitalWrite(5,LOW); digitalWrite(6,HIGH); digitalWrite(9,LOW); } void Backward(){ // Подпрограмма движения робота вперед digitalWrite(3,LOW); digitalWrite(5,HIGH); digitalWrite(6,LOW); digitalWrite(9,HIGH); } void loop(){ Forward(); delay(1000); Backward(); delay(1000); }
У меня есть пару вопросов.Что нужно поменять в этом коде, что бы робот двигался с меньшей скорость.или даже лучше как программируется скорость движения робота? как сделать так,что бы робот двигался вперед потом назад раза 3 и останавливался?? Помогите пожалуйста.
int cnt = 0; void loop(){ if (cnt < 3){//выполняется пока cnt(счётчик) меньше трёх Forward(); delay(1000); Backward(); delay(1000); cnt++;//увеличивает счётчик на единицу } }
Добавлено спустя 4 минуты 49 секунд: do..while...можно использовать, вариантов много...
Добавлено спустя 2 минуты 22 секунды: Хотя для робота, такой способ не очень подходит. Поскольку пока он движется во время delay(1000), программа не способна обрабатывать датчики...
робот не сможет ездить медленней или туда сюда пока не начнёшь изучать avr123.nm.ru - Краткий курс AVR ты видимо не понимаешь что есть такое "Цикл" и как туда поставить условие чтобы робот делал 3 движения это есть самые азы. управление скоростью несложно но так же требует изучения.
А я правильно понимаю, что сейчас у человека робот с бешеной скоростью несется ровно одну секунду вперед, потом секунду назад, потом опять вперед и т.д.? И похоже комнаты (или зала, или стадиона) не хватает и надо, чтобы робот ехал помедленнее??? А то на стенах сколы, да и робот не выдерживает?
А еще "назад три раза" - это хорошо. Расстояние от Москвы до Питера - где-то семьсот с лишним тысяч раз...
vadinator писал(а):Какие драйвера двигателей у вас? Для того, что бы останавливался...можно ввести условие if в котором проверяется переменная-счётчик... типа:
int cnt = 0; void loop(){ if (cnt < 3){//выполняется пока cnt(счётчик) меньше трёх Forward(); delay(1000); Backward(); delay(1000); cnt++;//увеличивает счётчик на единицу } }
Добавлено спустя 4 минуты 49 секунд: do..while...можно использовать, вариантов много...
Добавлено спустя 2 минуты 22 секунды: Хотя для робота, такой способ не очень подходит. Поскольку пока он движется во время delay(1000), программа не способна обрабатывать датчики...
Не знаю какие там драйвера, у меня есть конструктор POP-bot. вот хочу понять как вообще это работает.инструкция не как не помогает.Спасибо за ответ.
Добавлено спустя 49 секунд:
Myp писал(а):робот не сможет ездить медленней или туда сюда пока не начнёшь изучать avr123.nm.ru - Краткий курс AVR ты видимо не понимаешь что есть такое "Цикл" и как туда поставить условие чтобы робот делал 3 движения это есть самые азы. управление скоростью несложно но так же требует изучения.
Вот изучаю, но самому как то не разобраться,всё как то не понятно написано
Добавлено спустя 52 секунды:
dccharacter писал(а):А я правильно понимаю, что сейчас у человека робот с бешеной скоростью несется ровно одну секунду вперед, потом секунду назад, потом опять вперед и т.д.? И похоже комнаты (или зала, или стадиона) не хватает и надо, чтобы робот ехал помедленнее??? А то на стенах сколы, да и робот не выдерживает?
А еще "назад три раза" - это хорошо. Расстояние от Москвы до Питера - где-то семьсот с лишним тысяч раз...
Что это за язык? Похож на С, но есть какие-то странные команды. Предлагаю сделать по простому. Попробовать ведь можно. Любой мотор обладает инерцией и не может мгновенно разогнаться и остановиться. Если выдать команду вперед на небольшое время, потом стоп на небольшое время, потом повторить эту пару команд нужное количество раз - робот обязан поехать с меньшей скоростью. Попробуйте, может получится.
Radist писал(а):Что это за язык? Похож на С, но есть какие-то странные команды. Предлагаю сделать по простому. Попробовать ведь можно. Любой мотор обладает инерцией и не может мгновенно разогнаться и остановиться. Если выдать команду вперед на небольшое время, потом стоп на небольшое время, потом повторить эту пару команд нужное количество раз - робот обязан поехать с меньшей скоростью. Попробуйте, может получится.
В инструкции написано,что это С++. спасибо попробую.
Среда программирования Wiring для Arduino... вот статейка http://artspb.com/books/atmel/index.php?start=10 Для управления моторами в данном примере используется процедура Forward с параметрами скорости для левого и правого мотора...
void setup() { pinMode(3,OUTPUT); // Motor A pinMode(5,OUTPUT); // Motor A pinMode(6,OUTPUT); // Motor B pinMode(9,OUTPUT); // Motor B pinMode(2,OUTPUT); // Swith Left pinMode(4,OUTPUT); // Swith Right } void Forward(int Lspeed, int Rspeed) { analogWrite(3,Lspeed); digitalWrite(5,LOW); analogWrite(6,Rspeed); digitalWrite(9,LOW); } void Motor_Stop() { digitalWrite(3,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); digitalWrite(9,LOW); } void loop() { Forward(80,255); if(digitalRead(4)==0) { Motor_Stop(); while(1); } }
Тоже самое пишется и для процедуры Backward...просто вместо дискретных сигналов для драйверов мотора (типа включил и выключил), на драйвер подаётся аналоговый (вернее широтно-импульсный) сигнал и мотор работает не на полной скорости а на пропорциональной заданному значению... Читайте на форуме о Arduino и Wiring/Processing
это движение по кругу...когда я начинаю изменять что то...он у меня не движется..уже кучу времени пытаюсь втыкнуть в программный код..ничего не получается... по идее нужно совместить то что у меня написано с движением по кругу...но че то не как не выходит