В настоящее время я работаю над электронным проектором, и есть небольшая проблема со значениями джойстика. Значения "правильные", но выглядят странно.
Обычно работает классическая ось с джойстика (например, слева направо).
Но вот что я читал из этого:
На данный момент я использую следующее обходное решение, чтобы получить линейную прогрессию от -128 до +128:
if (value > 0)
value = -(128 - value);
else
test = 128 + value;
Проблема заключается в том, что я должен делать это на нескольких входах, по 2 оси на один оборот, по 3 джойстика на устройство, 4 общих устройства, поэтому 24 раза, и мне нужно поддерживать время ответа менее 20 мс для всей операции. И этот долбаный цикл!
Я могу бинарно манипулировать значением. Вот как я на самом деле сосредоточился на этом. Исходный дамп содержит массив из 0 и 1, считываемый с контроллера ввода/вывода
for (i = 0; i<8; i++) {
value |= raw_dump[pos + i] ? (0x80 >> i):0 ;
}
У вас есть идеи или хороший алгоритм? Я начинаю отступать, и я полностью всасываю двоичную манипуляцию...: '(
Похоже, какой бы механизм не выполнял выбор, джойстик фактически возвращает беззнаковый байт в диапазоне 0.. 255, с 0 в крайнем левом и 255 в крайнем правом углу.
Вы можете преобразовать это значение в диапазон -128 до 127 с помощью одного оператора:
value = (value & 0xFF) - 128;
Если value
является байтовой переменной, вы можете сократить это значение до:
value ^= 0x80;
Это преобразование должно быть очень быстрым на любом процессоре, даже с частотой 1 МГц 6502.
Я не уверен, о чем идет ваш второй бит кода. Если бы вы могли описать, что вы пытаетесь сделать там, я могу предложить более глубокое понимание.