Управление сервомоторами
- Войдите на сайт для отправки комментариев
Втр, 01/03/2016 - 14:28
#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 сервы на каждую. Начинает работать, проходит цикл и заглючивает пострашному.
фото, схему давай
Вроде разобрался. Подправил немного, работает пока.
Зачем столько "делай(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; } } }спасибо большое, попробую
Ребята, а как сделать, чтобы следующая команда начиналась только после окончательного завершения предыдущей? У меня некоторые движения не выполнились, а выполняется уже следующий.
А ещё, от usb работает, подключаю питание - диод горит, сервы только подёргиваются раз за цикл, и всё....
просили ли же фото со схемой! Скорее всего не хватает питания на сервы, нужно питать их
Пробовал играть питанием, то от ардуино, то от шилды, то от разых источников питал и то, и другое....
Так, вот и шилд появился, уже лучше... а шилд вы чем питаете? входные пины на фото свободны...
Я запитывал от 4-х пальчиковых батареек шилд, а ардуину пытался от кроны
Попробуйте запитаться от нормального ИБП, а не от батареек. Земля на синеньком входе с шилда в принципе должна быть соеденина с землей на ардуино дорожкой, но вдруг нет, попробуйте соединить проводом.
п.с. что то мне подсказывает что паучек с воселмью сервами на 3 батарейках пальчиковых далеко не убежит....