Три серво, джойстик и кнопки
- Войдите на сайт для отправки комментариев
Уважаемые форумчане! Прошу помощи. К скетчу из двух сервомашинок управляемых джойстиком (пример из Ардуино) нужно добавить еще одну сервомашинку управляемую тремя кнопками. По умолчанию серво 3 устанавливается на угол 90°, 3-я кнопка при кратковременном нажатии устанавливает серво 3 в крайне левое положение, 2-я кнопка – в крайне правое. 1-я кнопка возвращает серво 3 на угол 90° из любого положения. Важно серво, находясь в одном из крайних положений, и при случайном нажатии кнопки перевода в противоположное положение останавливалась в среднем положении. Дополнительно хотелось бы иметь возможность корректировать угол поворота и скорость вращения сервомашинки. В этом деле мне до чайников еще далеко, но попытку сделал – естественно неудачную (пожалуйста не смейтесь над древним человеком за мое художество). Велико желание воплотить в жизнь это устройство! Спасибо.
[code] #include<Servo.h> // подключение библиотеки Servo #define BUT_1 4 // BUT_1 кнопка возвращения 3 сервы на начальный угол #define BUT_2 5 // BUT_2 кнопка поворота 3 сервы в левое положение #define BUT_3 6 // BUT_3 кнопка поворота 3 сервы в правое положение Servo servo1, servo2, servo3; const int pinServo1 = 8; // Пин для подключения 1 сервопривода const int pinServo2 = 9; // Пин для подключения 2 сервопривода int pinServo3 = 10; // Пин для подключения 3 сервопривода int angleServo1, angleServo2, angleServo3 = 0; // переменные для хранения углов поворота сервоприводов 1, 2 и 3 const int axisX = A0; // ось Х подключена к A0 const int axisY = A1; // ось Y подключена к A1 int valX, valY = 0; // переменные для хранения значений осей Servo myServo; void setup() { servo1.attach(pinServo1); // подключить переменную servo1 к выводу pinServo1 servo2.attach(pinServo2); // подключить переменную servo2 к выводу pinServo2 myServo.attach(pinServo3); // подключить переменную servo3 к выводу pinServo3 myServo.write(90); // устанавливает 3 серву в среднее положение pinMode(BUT_1, INPUT); // для считывания состояний кнопоки 1 digitalWrite( BUT_1 , HIGH ); // подтяжка pinMode(BUT_2, INPUT); // для считывания состояний кнопоки 2 digitalWrite( BUT_2 , HIGH ); // подтяжка pinMode(BUT_3, INPUT); // для считывания состояний кнопоки 3 digitalWrite( BUT_3 , HIGH ); // подтяжка } void loop() { valX = analogRead(axisX); // значение оси Х valY = analogRead(axisY); // значение оси Y angleServo1 = map(valX, 0, 1023, 0, 180); // масштабируем значение к интервалу 0-180 ось Х angleServo2 = map(valY, 0, 1023, 0, 180); // масштабируем значение к интервалу 0-180 ось Y servo1.write(angleServo1); // поворот сервоприводa 1 на полученный угол servo2.write(angleServo2); // поворот сервоприводa 2 на полученный угол if ( ! digitalRead(BUT_1)) 90; //если первая кнопка установим в среднее положение if ( ! digitalRead(BUT_2)) 0; //если вторая кнопка повернем влево if ( ! digitalRead(BUT_3)) 180; //если третья кнопка повернем вправо delay(300); // пауза для ожидания поворота сервоприводов } [/code]
попытку сделал – естественно неудачную (пожалуйста не смейтесь
Да, Господь с Вами, смеёмся над теми, кто не делает попыток и кому все должны.
С радостью помог бы, но как назло, под рукой ни одной сервы, проверить тупо не на чем, а я не так много работал с сервами, чтобы закрыв глаза, без проверки, хорошие коды выдавать, простите. Уверен, что ребята помогут.
Удачи Вам!
Я боюсь лезть, так как Программирую в непривычном стиле . Ладно смотри.
Я поясню ТС, вот вы с двумя сервами в строках 34, 35 работаете правильно, а в строках 36, 37, 38 просто говорите что если кнопка нажата то 90! Что 90? Нужно сказать что в 3 серву нужно установить угол 90.
Пс. Вспомнился анекдот:
- Штурман, приборы?
-180!
-что 180?
-а что приборы?!
ОГРОМНАЯ Вам благодарность!!! Проверил все работает! Девиз:" Учиться, учиться и еще раз -учиться" - никто не отменял. Буду этим руководствоваться в познании "Ардуинского" творчества. Еще раз - СПАСИБО!!!