Я пытаюсь сопоставить джойстик с сервоприводом, но мне нужно, чтобы сервопривод был равен 0, когда джойстик находится во множественном числе. И до 180 когда радость идет вперед или назад

servo joystick

Я пытаюсь сопоставить джойстик с сервоприводом, но мне нужно, чтобы сервопривод был равен 0, когда джойстик находится во множественном числе. И до +180, когда радость идет вперед или назад.

Я просто не могу понять, как соотносится или настраивается код для этой части. Я помню, что видел это раньше, но мои навыки Google подводят меня, и я, кажется, не могу найти его снова. Спасибо

, 👍1

Обсуждение

это простая арифметическая задача ... преобразуйте -180 0 180 в 180 0 180, @jsotola

джсотола. Я знаю, что это должно быть что-то простое. Но, похоже, не могу заставить его работать. Любая помощь в том, чтобы на самом деле это сделать, была бы признательна, @hendr13x

Вы можете сопоставить значения от -180 до 180, а затем принять их абсолютное значение. Я уверен, что для этого есть функция, @chrisl

используйте что-то вроде этого " если (вал < 0) вал = 0 - вал;`, @jsotola


2 ответа


1

Вы можете использовать функцию карты, см. раздел Функция карты Arduino.

Таким образом, в вашем случае, предполагая значение 0..1023, исходящее от аналогового вывода, где 0 должно быть сопоставлено с -180 и 1023 с +180, вы получаете

int mappedValue = map(value, 0, 1023, -180, 180);

(обратите внимание, что я предполагаю, что вы имеете в виду -180, когда назад, +180, когда вперед).

ОБНОВЛЕНИЕ

Похоже, что значение 0 (назад) должно быть сопоставлено с 180, 512 (нейтральное) - с 0 и 1023 (прямое) - с 180 (снова).

Для этого вам понадобятся две карты в зависимости от значения:

int mappedValue = 0;
if (value < 512) // Backwards
{
    mappedValue = map(value, 0, 511, 180, 0);
}
else // Forward
{
    mappedValue = map(value, 512, 1023, 0, 180);
}
,

Я пытаюсь заставить сервопривод двигаться на + 180, когда радость идет вперед. А также +180, когда радость отступает. И сервомотор, чтобы сидеть на 0, когда радость в сети. Используемый сервопривод имеет диапазон от 0 до 180, @hendr13x

и каковы значения джойстика в прямом, нейтральном и обратном положениях?, @Michel Keijzers

Значения джойстика равны 0 для "назад". 1023 для "вперед". Спасибо, @hendr13x


2

Попробуйте вот это, хотя другие ответили вам правильно :

#include <Servo.h>
Servo myservo;
int potpin = 1;
int val;

void setup () {
    myservo.attach(9);
}

void loop () {
    val = analogRead(potpin);
    val = map(val, 0, 1023, 0, 360);
    myservo.write(val);
    delay(20);
}

Подключите сигнальный провод вашего серводвигателя к ШИМ контакту № 9 Arduino Подключите выход вашего джойстика к контакту A1 вашего arduino

На самом деле я не уверен ни в одной из этих строк, и я забыл правильную форму, если она не сработала, измените эту строку :

val = map(val, 0, 1023, 0, 360);

К этому :

val = map(val, 0, 1023, -180, 180);

Я думаю что оба они работают

Удачи вам

,