Управление камерной площадкой с сохранением текущей позиции
- Войдите на сайт для отправки комментариев
Здравствуйте!
Наткнулся в интернете на данное видео https://www.youtube.com/watch?v=Nlvvvr9frJo
Хотелось бы понять ,как было осуществлено сохранение позиции серв когда джойстик возвратился в исходное положение.
Взяв обычный код, для управление джойстиком двумя сервами :
#include
const int servo1 = 3; // первая серва
const int servo2 = 10; // вторая серва
const int joyH = 3; // выход L/R джойстика Parallax
const int joyV = 4; // выход U/D джойстика Parallax
int servoVal; // переменная для хранения данных с аналогового пина
Servo myservo1; // создаем объект Servo для управления первой сервой
Servo myservo2; // создаем объект Servo для управления второй сервой
void setup() {
// Servo
myservo1.attach(servo1); // подключаем серву
myservo2.attach(servo2); // подключаем серву
// Инициализация серийного протокола связи
Serial.begin(9600);
}
void loop(){
// отображаем значения с джойстика с использованием серийного монитора
outputJoystick();
// считываем значение с джойстика по горизонтали (значение между 0 и 1023)
servoVal = analogRead(joyH);
servoVal = map(servoVal, 0, 1023, 0, 180); // масштабируем полученное значение для использования с серводвигателем (результат возвращается в диапазоне от 0 до 180)
myservo2.write(servoVal); // выводим ротор сервы в положение в соответствии с полученным масштабированным значением
// считываем значение джойстика вдоль вертикальной оси (значение от 0 до 1023)
servoVal = analogRead(joyV);
servoVal = map(servoVal, 0, 1023, 70, 180); //масштабируем полученное значение для использования с сервой (диапазон: от 70 до 180)
myservo1.write(servoVal); // выводим ротор второй сервы в соответствии с полученным масштабированным значением
delay(15); // ждем, пока серва обеспечит заданное положение
}
/**
* отображаем значения джойстика
*/
void outputJoystick(){
Serial.print(analogRead(joyH));
Serial.print ("---");
Serial.print(analogRead(joyV));
Serial.println ("----------------");
}
Задал те положения джойстика, при которых не надо управлять сервами.
#include <Servo.h>
Servo myservo1;
Servo myservo2;
byte pos1 = 90;
byte pos2 = 90;
String inputString = "";
boolean stringComplete = false;
void setup()
{
myservo1.attach(9);
myservo2.attach(8);
Serial.begin(9600);
inputString.reserve(200);
}
void loop()
{
if (stringComplete) {
pos1 = inputString[0];
pos2 = inputString[1];
myservo1.write(pos1);
myservo2.write(pos2);
delay(15);
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
Серва начала крутить до упору и не останавливаться.
Далее пришла в голову идея убрать из сервы патенциометр ФИЗИЧЕСКИ, и все получилось, не буду в даваться в технические подробности=). Но возникли другие проблемы, хлипкость конструкции , так как потенциометр являлся валом одной из шестеренок ,а тот вал который поставил я не очень прочно крепиться. (Серва TOWER Pro MGG90).
В интернете нет по данной истории ровным счетом ничего, кроме выше изложенного видео.
Подскажите пожалуйста куда копать, в какую степь, какая логика написания должна быть.
Возможно ли исключить как то программно получение информации с сервы о ее место положение, что б не удалять потенциометр физически.