Три серво, джойстик и кнопки
- Войдите на сайт для отправки комментариев
Уважаемые форумчане! Прошу помощи. К скетчу из двух сервомашинок управляемых джойстиком (пример из Ардуино) нужно добавить еще одну сервомашинку управляемую тремя кнопками. По умолчанию серво 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]
попытку сделал – естественно неудачную (пожалуйста не смейтесь
Да, Господь с Вами, смеёмся над теми, кто не делает попыток и кому все должны.
С радостью помог бы, но как назло, под рукой ни одной сервы, проверить тупо не на чем, а я не так много работал с сервами, чтобы закрыв глаза, без проверки, хорошие коды выдавать, простите. Уверен, что ребята помогут.
Удачи Вам!
Я боюсь лезть, так как Программирую в непривычном стиле . Ладно смотри.
/* #1 серва 1 -> 8 () (servo1_pin) серва 2 -> 9 () (servo2_pin) серва 3 -> 10 () (servo3_pin) #2 джойстик ->A0 (axisX_pin) ось Х ->A1 (axisY_pin) ось Y #3 кнопка 1 -> 4 (btn1_pin) возвращения 3 сервы на начальный угол 0 нажата /1 нет кнопка 2 -> 5 (btn2_pin) поворота 3 сервы в левое положение 0 нажата /1 нет кнопка 3 -> 6 (btn3_pin) поворота 3 сервы в правое положение 0 нажата /1 нет */ //#1 #include<Servo.h> // подключение библиотеки Servo Servo servo1, servo2, servo3; const int servo1_pin = 8; // Пин для подключения 1 сервопривода const int servo2_pin = 9; // Пин для подключения 2 сервопривода const int servo3_pin = 10; // Пин для подключения 3 сервопривода int angleServo1, angleServo2, angleServo3; // переменные для хранения углов поворота сервоприводов 1, 2 и 3 //#2 const int axisX_pin = A0; // ось Х подключена к A0 const int axisY_pin = A1; // ось Y подключена к A1 //#3 const int btn1_pin = 4 ; // кнопка 1 возвращения 3 сервы на начальный угол const int btn2_pin = 5 ; // кнопка 2 поворота 3 сервы в левое положение const int btn3_pin = 6 ; // кнопка 3 поворота 3 сервы в правое положение void setup() { //#1 servo1.attach(servo1_pin); // подключить переменную servo1 к выводу servo1_pin servo2.attach(servo2_pin); // подключить переменную servo2 к выводу servo2_pin servo3.attach(servo3_pin); // подключить переменную servo3 к выводу servo3_pin //#2 angleServo1 = map(analogRead(axisX_pin), 0, 1023, 0, 180); // масштабируем значение к интервалу 0-180 ось Х angleServo2 = map(analogRead(axisY_pin), 0, 1023, 0, 180); // масштабируем значение к интервалу 0-180 ось Y //#3 pinMode( btn1_pin, INPUT_PULLUP ); // подключим кнопку 1 pinMode( btn2_pin , INPUT_PULLUP ); // подключим кнопку 2 pinMode( btn3_pin , INPUT_PULLUP ); // подключим кнопку 3 angleServo3 = 0; } void loop() { delay(300); //#1 servo1.write(angleServo1); // поворот сервоприводa 1 на полученный угол servo2.write(angleServo2); // поворот сервоприводa 2 на полученный угол servo3.write(angleServo3); // поворот сервоприводa 3 на полученный угол //#2 // поворот сервоприводa 2 на полученный угол if ( ! digitalRead(btn1_pin)) angleServo3 = 90 ; //если первая кнопка установим в среднее положение if ( ! digitalRead(btn2_pin)) angleServo3 = 0 ; //если вторая кнопка повернем влево if ( ! digitalRead(btn3_pin)) angleServo3 = 180; //если третья кнопка повернем вправо //#3 angleServo1 = map(analogRead(axisX_pin), 0, 1023, 0, 180); // масштабируем значение к интервалу 0-180 ось Х angleServo2 = map(analogRead(axisY_pin), 0, 1023, 0, 180); // масштабируем значение к интервалу 0-180 ось Y }Я поясню ТС, вот вы с двумя сервами в строках 34, 35 работаете правильно, а в строках 36, 37, 38 просто говорите что если кнопка нажата то 90! Что 90? Нужно сказать что в 3 серву нужно установить угол 90.
Пс. Вспомнился анекдот:
- Штурман, приборы?
-180!
-что 180?
-а что приборы?!
ОГРОМНАЯ Вам благодарность!!! Проверил все работает! Девиз:" Учиться, учиться и еще раз -учиться" - никто не отменял. Буду этим руководствоваться в познании "Ардуинского" творчества. Еще раз - СПАСИБО!!!