Управление сервомоторами

Юрец
Offline
Зарегистрирован: 20.01.2016
#include<Servo.h>

Servo servoG1;
Servo servoV1;
Servo servoG2;
Servo servoV2;
Servo servoG3;
Servo servoV3;                      
Servo servoG4;
Servo servoV4;

void setup()
{
  servoG1.attach(1);  // s is on pin 8
  servoV1.attach(2);
  servoG2.attach(3);
  servoV2.attach(4);
  servoG3.attach(5);
  servoV3.attach(6);
  servoG4.attach(7);
  servoV4.attach(8);

}

void loop()

{
  
  servoV3.write(45); // 3-я нога вверх
  servoG3.write(0); // 3-я нога вперёд
  delay(500);
  servoV3.write(90); // 3-я нога вниз
  delay(500);
  servoV4.write(135); // 4-я нога вверх
  servoG4.write(180); // 4-я нога вперёд
  delay(500);
  servoV4.write(90); // 4-я нога вниз
  delay(500);
  servoG1.write(180); // 1-я нога назад
  servoG2.write(0); // 2-я нога назад
  servoG3.write(90); // 3-я нога назад
  servoG4.write(90); // 4-я нога назад
  delay(500);
  servoV1.write(135); // 1-я нога вверх
  servoG1.write(0); // 1-я нога вперёд
  delay(500);
  servoV1.write(90); // 1-я нога вниз
  delay(500);
  servoV2.write(45); // 2-я нога вверх
  servoG2.write(180); // 2-я нога вперёд
  delay(500);
  servoV2.write(90); // 2-я нога вниз
  
}

Доброго всем дня. Пытаюсь написать код для управления паукоботом с 4-я ногами, по 2 сервы на каждую. Начинает работать, проходит цикл и заглючивает пострашному.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

фото, схему давай

Юрец
Offline
Зарегистрирован: 20.01.2016

Вроде разобрался. Подправил немного, работает пока.

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Зачем столько "делай(500)", Ваш робот больше ни одного датчика опросить не сможет. Посмотрите в сторону "конечных автоматов" Вот пример Вашего кода

#include<Servo.h>

Servo servoG1;
Servo servoV1;
Servo servoG2;
Servo servoV2;
Servo servoG3;
Servo servoV3;
Servo servoG4;
Servo servoV4;
unsigned long currentTime2; //Переменная для pause
byte var = 0;

void setup()
{
  servoG1.attach(1);  // s is on pin 8
  servoV1.attach(2);
  servoG2.attach(3);
  servoV2.attach(4);
  servoG3.attach(5);
  servoV3.attach(6);
  servoG4.attach(7);
  servoV4.attach(8);

}

//Функция паузы
int pause(int y)
{
  bool x = 0;
  if (millis() - currentTime2 >= y) x = 1, currentTime2 = millis();
  return x;
}

void loop()

{
//Посылаем запрос в функцию паузы- если 1 выполняем действие по очереди с паузой 500, при этом можно без тормозов опрашивать другие датчики
  if (pause (500))
  {
    switch (var) {
      case 0:
        servoV3.write(45); // 3-я нога вверх
        servoG3.write(0); // 3-я нога вперёд
        var = 1;
        break;
      case 1:
        servoV3.write(90); // 3-я нога вниз
        var = 2;
        break;
      case 2:
        servoV4.write(135); // 4-я нога вверх
        servoG4.write(180); // 4-я нога вперёд
        var = 3;
        break;
      case 3:
        servoV4.write(90); // 4-я нога вниз
        var = 4;
        break;
      case 4:
        servoG1.write(180); // 1-я нога назад
        servoG2.write(0); // 2-я нога назад
        servoG3.write(90); // 3-я нога назад
        servoG4.write(90); // 4-я нога назад
        var = 5;
        break;
      case 5:
        servoV1.write(135); // 1-я нога вверх
        servoG1.write(0); // 1-я нога вперёд
        var = 6;
        break;
      case 6:
        servoV1.write(90); // 1-я нога вниз
        var = 7;
        break;
      case 7:
        servoV2.write(45); // 2-я нога вверх
        servoG2.write(180); // 2-я нога вперёд
        var = 8;
        break;
      case 8:
        servoV2.write(90); // 2-я нога вниз
        var = 0;
        break;
    }
  }

}

 

Юрец
Offline
Зарегистрирован: 20.01.2016

спасибо большое, попробую

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Ребята, а как сделать, чтобы следующая команда начиналась только после окончательного завершения предыдущей? У меня некоторые движения не выполнились, а выполняется уже следующий.

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

А ещё, от usb работает, подключаю питание - диод горит, сервы только подёргиваются раз за цикл, и всё....

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

просили ли же фото со схемой! Скорее всего не хватает питания на сервы, нужно питать их

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Gurish пишет:

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Пробовал играть питанием, то от ардуино, то от шилды, то от разых источников питал и то, и другое....

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Так, вот и шилд появился, уже лучше... а шилд вы чем питаете? входные пины на фото свободны...

Gurish
Gurish аватар
Offline
Зарегистрирован: 06.09.2016

Я запитывал от 4-х пальчиковых батареек шилд, а ардуину пытался от кроны

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Попробуйте запитаться от нормального ИБП, а не от батареек. Земля на синеньком входе с шилда в принципе должна быть соеденина с землей на ардуино дорожкой, но вдруг нет, попробуйте соединить проводом. 

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