Поворот турели на заданный угол.
- Войдите на сайт для отправки комментариев
Чт, 20/10/2022 - 15:33
Друзья, пытаюсь тут создать турельку, да вот столкнулся с проблемой: всё не могу придумать как сделать, так что бы при последовательном нажатии на три цифровые клавише ну пульте ДУ, турель поворачивался на заданный угол. Буду рад любой помощи. Вот, собственно сам код:
#include <Servo.h> #include <IRremote.h> int RECV_PIN = 4; IRrecv irrecv(RECV_PIN); decode_results results; Servo servZ; Servo servX; int Zpos = 60; int Xpos = 60; int x = 0; void setup() { servZ.attach(8); servX.attach(10); irrecv.enableIRIn(); servZ.write(Zpos); servX.write(Xpos); } void loop() { if (irrecv.decode(&results)) { if (results.value == 16718055) { up(); } else if (results.value == 16730805) { down(); } else if (results.value == 16716015) { left(); } else if (results.value == 16734885) { right(); } else if (results.value == 16738455) { axisX(); } irrecv.resume(); } delay(100); } void up() { Zpos=Zpos+10; servZ.write(Zpos); delay(100); } void down() { Zpos=Zpos-10; servZ.write(Zpos); delay(100); } void left() { Xpos=Xpos-10; servX.write(Xpos); delay(100); } void right() { Xpos=Xpos+10; servX.write(Xpos); delay(100); } void axisX() { x = 0; if (irrecv.decode(&results)){ while (results.value != 16726215){ for (int i = 3; i > 1; i--){ if (results.value == 16750695){ int x = x + pow(0, i); } else if (results.value == 16753245){ int x = x + pow(1, i); } else if (results.value == 16736925){ int x = x + pow(2, i); } else if (results.value == 16769565){ int x = x + pow(3, i); } else if (results.value == 16720605){ int x = x + pow(4, i); } else if (results.value == 16712445){ int x = x + pow(5, i); } else if (results.value == 16748655){ int x = x + pow(6, i); } else if (results.value == 16769055){ int x = x + pow(7, i); } else if (results.value == 16754775){ int x = x + pow(8, i); } else if (results.value == 16748655){ int x = x + pow(9, i); } } } if(results.value == 16726215){ servX.write(x); } } }
а в чем проблема?
В этом скетче уже есть код, который поворачивает турель вправо и влево. Не работает?
А вообще конечно, в условиях военного времени спрашивать, "как создать турельку"? Паспорт предьявите сначала
Это гособоронзаказ
Это гособоронзаказ
Не, там спецификация была бы листов на сто.
Я что то в коде не увидел , даже отдаленной попытки обработки ни одной "цифровой "клавише" ", а нужно аж три...
Непорядок
А вообще, для начала нужно написать обработчик всех кнопок пульта, и желательно не в том виде, который сейчас, а потом уже пытаться их обрабатывать.
А шо, так можно было?
Сначала сделайте на трёх кнопках, а уж потом подключите ДУ.
Отрефакторил твой код для удобства.
У тебя по логике по нажатию на кнопку "BUTTON_AXIS_X" запускается бесконечный цикл, который ожидает нажатия клавиш.
Далее жмешь 3 цифры.
И "BUTTON_STOP" для применения нового значения.
Правда тут странный алгоритм расчета, может стоит на него обратить внимание.
И думаю баг в том, что ты не сбрасываешь значение в "results.value" (внутри бесконечного цикла) и получается нажав на любую цифру у тебя цикл успевает накрутить огромное значение и servX.write(x) не может его обработать.
Добавь логи в код и сам поймешь в чем дело.