Leonardo в качестве мозгов для игрового руля

SanSaySP
Offline
Зарегистрирован: 23.11.2017

Не подумайте, не собираюсь спрашивать как это сделать ))) вопрос именно по программированию.

Коротко: уже работает, но - в игре как бы сбита индикация педалей... короче

педаль не нажата - показывает когбудто нажата на 20%

нажимаем педаль - индикация показывает, что педаль нажимается, но посередине хода педали показывает, что уже педаль нажата полностью

продолжаем нажимать педаль - индикация показывает, что педаль когбудто опустили и опять нажимем, т.е. сбрасывается в 0% и опять начинает расти.

Вышел из ситуации так:

void loop() 
{
  int xAxis = analogRead(A0); // Считываем аналоговое значение оси Х
  if (xAxis > 730)  
    {
      Joystick.setXAxis(640); //смещение на 90
    }
  else
    {
      Joystick.setXAxis(xAxis-90);
    }
  delay(50);  
}

верный ли костыль прикрутил или нужно координально по другому выходить из ситуации?

П.С. используется библиотека Joystick

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

SanSaySP пишет:

верный ли костыль прикрутил 

Смотря чего Вам хотелось получить. Так, как это написано, Вы лишаетесь той части хода педали, когда результат >730, т.к. что бы там ни было (жим - не жми) Вы всё равно в 640 преобразуете.

Там потенциометры педалей, наверняка не доходят до крайних значений (чтобы не сломать их - см. об этом). Поэтому я бы делал так. Выводил бы в сериал результат analogRead и смаппировал бы получаемый с педали диапазон на 0-255 для последующей передачи на двигатель. именно смаппировал бы равномерно, а не переломил по одному конкретному значению, как у Вас. Вы понимаете, о чём я?

SanSaySP
Offline
Зарегистрирован: 23.11.2017

Для начала - прикольно, у меня именно такой руль ), но переделаный, об этом ниже

ЕвгенийП пишет:

Смотря чего Вам хотелось получить. Так, как это написано, Вы лишаетесь той части хода педали, когда результат >730, т.к. что бы там ни было (жим - не жми) Вы всё равно в 640 преобразуете.

Видимо не очень понятно объяснил... у меня педали переделаные и в место резюков стоят там теперь датчики холла, более того, вообще педальный блок сделан с нуля и по этому видимо ход педалей больше чем у заводских и получается за одно нажатие у меня шкала в игре 2 раза заполняется, т.е. от 0 до 100%, потом опять от 0 до 100%... при этом еще и смещение есть, т.е. не от 0 до 100, а от 50.

ЕвгенийП пишет:

Там потенциометры педалей, наверняка не доходят до крайних значений (чтобы не сломать их - см. об этом). Поэтому я бы делал так. Выводил бы в сериал результат analogRead и смаппировал бы получаемый с педали диапазон на 0-255 для последующей передачи на двигатель. именно смаппировал бы равномерно, а не переломил по одному конкретному значению, как у Вас. Вы понимаете, о чём я?

Буквально 20 минут назад я бы не понял о чем вы ))), но наткнулся на видос, где об этой функции рассказали )

Ход у меня не от 0 до 1023, а от 600 до 800, но использовав этот map решил мою проблему одной строкой, но...  основание педалей не 100% жесткое, т.е. когда выжимаешь ее на 100% можно еще немного надавить и она нажмется на 105% и вот тут косяк выходит в игре. При таком дожатии в игре на второй круг уходит заполнение, т.е. опять с нуля... в моем коде когда достигается некого максимального значения я тупо ограничиваю посылаемое значение

Joystick.setXAxis(640);

и хоть сколько не дави педаль на второй круг не пойдет, а mapом получается или не доходит до 100% или легко может в 0 свалиться.

П.С. если не очень понятно, что за "второй" круг, то просто подключите другой, не ограниченный по ходу, потенциометр и увидите, что от минимального до максимального значения потенциометра в игре или в настройках руля в винде педаль будет несколько раз заполняться от 0 до 100%

nevkon
Offline
Зарегистрирован: 20.01.2015

Поставьте перед мапом условие - при превышении максимума заменить на значение максимума. Так же и с минимумом, но на снижении.

SanSaySP
Offline
Зарегистрирован: 23.11.2017

nevkon пишет:

Поставьте перед мапом условие - при превышении максимума заменить на значение максимума. Так же и с минимумом, но на снижении.

Да, но тогда в чем будет существенная разница между моим "кривокодом" и использованием мапа?