Код (C++): #include<Servo.h> Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; int axis_1=0; int axis_2=0; boolean axe_1_FM=0, axe_1_SM=0, axe_1_SP=0, axe_1_FP=0; boolean axe_2_FM=0, axe_2_SM=0, axe_2_SP=0, axe_2_FP=0; void setup() { Serial.begin(9600); myservo1.attach(9); myservo2.attach(10); myservo1.attach(11); myservo2.attach(12); myservo1.attach(13); myservo2.attach(8); } void loop() { axis_1=analogRead(0); axis_2=analogRead(1); if ((axis_1>=0) & (axis_1<=50)) {axe_1_FM=1; axe_1_SM=0; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=412) {axe_1_FM=0; axe_1_SM=1; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=612) {axe_1_FM=0; axe_1_SM=0; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=980) {axe_1_FM=0; axe_1_SM=0; axe_1_SP=1; axe_1_FP=0;} else {axe_1_FM=0; axe_1_SM=0; axe_1_SP=0; axe_1_FP=1;} } } } if ((axis_2>=0) & (axis_2<=50)) {axe_2_FM=1; axe_2_SM=0; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=412) {axe_2_FM=0; axe_2_SM=1; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=612) {axe_2_FM=0; axe_2_SM=0; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=980) {axe_2_FM=0; axe_2_SM=0; axe_2_SP=1; axe_2_FP=0;} else {axe_2_FM=0; axe_2_SM=0; axe_2_SP=0; axe_2_FP=1;} } } } Serial.print("Axe 1="); Serial.print(axe_1_FM,DEC); Serial.print(axe_1_SM,DEC); Serial.print(axe_1_SP,DEC); Serial.print(axe_1_FP,DEC); Serial.print(" "); Serial.print(axis_1,DEC); Serial.print(" ##### "); Serial.print(axe_2_FM,DEC); Serial.print(axe_2_SM,DEC); Serial.print(axe_2_SP,DEC); Serial.print(axe_2_FP,DEC); Serial.print(" "); Serial.print(axis_2,DEC); Serial.println(" "); delay (150); } пожалусто помогите сделать скетч чтобы когда я нажимал на 1 кнопку и двигал джостиком по оси X и Y двигались 2 серво привода по отдельности нажимаю 2 кнопку двигаются другие 2 серво привода по оси X и Y 3 кнопку нажимаю и двигается 1 серво привод нажимаю 4 кнопку 6-той серво двигатель с 0 до 180 если еще раз нажимаю опять на 0 и чтобы отодвигаю джостик по чуть чуть он двигался со скоростью Вот есть скетч от него отталкиваюсь: ЗАРАНИЕ СПАСИБО
Вставьте код правильно, плз. Для вставки кода есть кнопочка "<>" на панели инструментов редактора кода.
Если я правильно понял - вам надо ввести в код опрос кнопок, и в зависимости от нажатия той или иной кнопки активировать тот или иной сервопривод? При этом - одновременно активен к управлению джойстиком только один сервопривод, так? Если я всё правильно понял, то в псевдокоде (т.е. демонстрация работы алгоритма) ваша задача решается так: Код (C++): enum { NoServo, Servo1, Servo2, ... ServoN }; int currentServo = NoServo; // каким сервоприводом управляем Button button1, button2; // наши кнопки void detachServo(int servoNum) { if(servoNum == NoServo || servoNum == currentServo) return; // тут что-то делаем с нужной сервой } void loop() { if(button1.isClicked()) // если нажата кнопка 1 { detachServo(currentServo); // возвращаем последнюю серву, если надо, в исходную позицию currentServo = Servo1; // говорим, что рулим первой сервой } else if(button2.isClicked()) // если нажата кнопка 2 { detachServo(currentServo); currentServo = Servo2; } if(currentServo != NoServo) { // тут рулим нужной сервой c джойстика switch(currentServo) { case Servo1: // двигаем первую серву break; case Servo2: // двигаем вторую серву break; } } }
вопросик а он по скорости мне просто нужно чтобы джостик отодвинулся и серво с определенной скоростью до крайнего положения ехала
В этом случае определяете, что "джостик отодвинулся" (т.е. какие-то граничные значения с него получаете, и понимаете - вот, джойстик отодвинулся), затем простой арифметикой: допустим, у вас серву надо сдвинуть с текущей позиции (0 градусов), на позицию 180 градусов за 10 секунд. Соответственно, простейшим уравнением вы вычисляете, через какие промежутки времени надо менять позицию сервы на 1 градус, чтобы за 10 секунд она проехала все 180 градусов.
у меня есть эти значения: до 412 от не реагирует с 412 до 612 маленькая скорость от 612 до 980 быстрая скорость
Код (C++): int axis_1=0; int axis_2=0; boolean axe_1_FM=0, axe_1_SM=0, axe_1_SP=0, axe_1_FP=0; boolean axe_2_FM=0, axe_2_SM=0, axe_2_SP=0, axe_2_FP=0; void setup() { Serial.begin(9600); } void loop() { axis_1=analogRead(0); axis_2=analogRead(1); if ((axis_1>=0) & (axis_1<=50)) {axe_1_FM=1; axe_1_SM=0; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=412) {axe_1_FM=0; axe_1_SM=1; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=612) {axe_1_FM=0; axe_1_SM=0; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=980) {axe_1_FM=0; axe_1_SM=0; axe_1_SP=1; axe_1_FP=0;} else {axe_1_FM=0; axe_1_SM=0; axe_1_SP=0; axe_1_FP=1;} } } } if ((axis_2>=0) & (axis_2<=50)) {axe_2_FM=1; axe_2_SM=0; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=412) {axe_2_FM=0; axe_2_SM=1; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=612) {axe_2_FM=0; axe_2_SM=0; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=980) {axe_2_FM=0; axe_2_SM=0; axe_2_SP=1; axe_2_FP=0;} else {axe_2_FM=0; axe_2_SM=0; axe_2_SP=0; axe_2_FP=1;} } } } if(digitalRead(ButPin1)) { val = axis_1; val = (axis_2); } Serial.print("Axe 1="); Serial.print(axe_1_FM,DEC); Serial.print(axe_1_SM,DEC); Serial.print(axe_1_SP,DEC); Serial.print(axe_1_FP,DEC); Serial.print(" "); Serial.print(axis_1,DEC); Serial.print(" ##### "); Serial.print(axe_2_FM,DEC); Serial.print(axe_2_SM,DEC); Serial.print(axe_2_SP,DEC); Serial.print(axe_2_FP,DEC); Serial.print(" "); Serial.print(axis_2,DEC); Serial.println(" "); delay (150); }
а вы можете сделать чтобы были 6 переменных серво двигателей в этой программе Код (C++): #include<Servo.h> Servo myservo1; Servo myservo2; Servo myservo3; Servo myservo4; Servo myservo5; Servo myservo6; int axis_1=0; int axis_2=0; boolean axe_1_FM=0, axe_1_SM=0, axe_1_SP=0, axe_1_FP=0; boolean axe_2_FM=0, axe_2_SM=0, axe_2_SP=0, axe_2_FP=0; void setup() { Serial.begin(9600); myservo1.attach(9); myservo2.attach(10); myservo1.attach(11); myservo2.attach(12); myservo1.attach(13); myservo2.attach(8); } void loop() { axis_1=analogRead(0); axis_2=analogRead(1); if ((axis_1>=0) & (axis_1<=50)) {axe_1_FM=1; axe_1_SM=0; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=412) {axe_1_FM=0; axe_1_SM=1; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=612) {axe_1_FM=0; axe_1_SM=0; axe_1_SP=0; axe_1_FP=0;} else {if (axis_1<=980) {axe_1_FM=0; axe_1_SM=0; axe_1_SP=1; axe_1_FP=0;} else {axe_1_FM=0; axe_1_SM=0; axe_1_SP=0; axe_1_FP=1;} } } } if ((axis_2>=0) & (axis_2<=50)) {axe_2_FM=1; axe_2_SM=0; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=412) {axe_2_FM=0; axe_2_SM=1; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=612) {axe_2_FM=0; axe_2_SM=0; axe_2_SP=0; axe_2_FP=0;} else {if (axis_2<=980) {axe_2_FM=0; axe_2_SM=0; axe_2_SP=1; axe_2_FP=0;} else {axe_2_FM=0; axe_2_SM=0; axe_2_SP=0; axe_2_FP=1;} } } } Serial.print("Axe 1="); Serial.print(axe_1_FM,DEC); Serial.print(axe_1_SM,DEC); Serial.print(axe_1_SP,DEC); Serial.print(axe_1_FP,DEC); Serial.print(" "); Serial.print(axis_1,DEC); Serial.print(" ##### "); Serial.print(axe_2_FM,DEC); Serial.print(axe_2_SM,DEC); Serial.print(axe_2_SP,DEC); Serial.print(axe_2_FP,DEC); Serial.print(" "); Serial.print(axis_2,DEC); Serial.println(" "); delay (150); }