roboforum.ru

Технический форум по робототехнике.

Помогите с программным кодом!

Помогите с программным кодом!

AvK » 20 янв 2011, 03:30

Вот программный код для движения робота вперед/назад на полной скорости
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 и останавливался??
Помогите пожалуйста.

Re: Помогите с программным кодом!

vadinator » 20 янв 2011, 09:30

Какие драйвера двигателей у вас?
Для того, что бы останавливался...можно ввести условие 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), программа не способна обрабатывать датчики...

Re: Помогите с программным кодом!

Myp » 20 янв 2011, 11:02

робот не сможет ездить медленней или туда сюда пока не начнёшь изучать avr123.nm.ru - Краткий курс AVR
ты видимо не понимаешь что есть такое "Цикл" и как туда поставить условие чтобы робот делал 3 движения
это есть самые азы.
управление скоростью несложно но так же требует изучения.

Re: Помогите с программным кодом!

dccharacter » 21 янв 2011, 02:17

А я правильно понимаю, что сейчас у человека робот с бешеной скоростью несется ровно одну секунду вперед, потом секунду назад, потом опять вперед и т.д.? И похоже комнаты (или зала, или стадиона) не хватает и надо, чтобы робот ехал помедленнее??? А то на стенах сколы, да и робот не выдерживает?

А еще "назад три раза" - это хорошо. Расстояние от Москвы до Питера - где-то семьсот с лишним тысяч раз...

Re: Помогите с программным кодом!

AvK » 21 янв 2011, 21:59

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 писал(а):А я правильно понимаю, что сейчас у человека робот с бешеной скоростью несется ровно одну секунду вперед, потом секунду назад, потом опять вперед и т.д.? И похоже комнаты (или зала, или стадиона) не хватает и надо, чтобы робот ехал помедленнее??? А то на стенах сколы, да и робот не выдерживает?

А еще "назад три раза" - это хорошо. Расстояние от Москвы до Питера - где-то семьсот с лишним тысяч раз...


ДА всё именно так;)

Re: Помогите с программным кодом!

Radist » 21 янв 2011, 22:45

Что это за язык? Похож на С, но есть какие-то странные команды. Предлагаю сделать по простому. Попробовать ведь можно. Любой мотор обладает инерцией и не может мгновенно разогнаться и остановиться. Если выдать команду вперед на небольшое время, потом стоп на небольшое время, потом повторить эту пару команд нужное количество раз - робот обязан поехать с меньшей скоростью. Попробуйте, может получится.

Re: Помогите с программным кодом!

AvK » 22 янв 2011, 00:30

Radist писал(а):Что это за язык? Похож на С, но есть какие-то странные команды. Предлагаю сделать по простому. Попробовать ведь можно. Любой мотор обладает инерцией и не может мгновенно разогнаться и остановиться. Если выдать команду вперед на небольшое время, потом стоп на небольшое время, потом повторить эту пару команд нужное количество раз - робот обязан поехать с меньшей скоростью. Попробуйте, может получится.

В инструкции написано,что это С++. спасибо попробую.

Re: Помогите с программным кодом!

vadinator » 22 янв 2011, 08:10

Среда программирования 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 :)

Re: Помогите с программным кодом!

AvK » 22 янв 2011, 18:23

это движение по кругу...когда я начинаю изменять что то...он у меня не движется..уже кучу времени пытаюсь втыкнуть в программный код..ничего не получается...
по идее нужно совместить то что у меня написано с движением по кругу...но че то не как не выходит


Rambler\'s Top100 Mail.ru counter