Управление подрулевыми кнопками
- Войдите на сайт для отправки комментариев
Втр, 13/11/2018 - 22:10
Добрый день. Помогите решить проблему. Имеется код управления джойстиком:
#include <Keypad.h>
const byte ROWS = 3; //four rows
const byte COLS = 4; //four columns
char hexaKeys[ROWS][COLS] = {
{'6','x','4','a'},
{'8','1','2','b'},
{'7','3','5','c'}
};
byte colPins[COLS] = {
6, 5, 4, 3}; //connect to the row pinouts of the keypad
byte rowPins[ROWS] = {
9, 8, 7}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
}
void loop()
{
char key = customKeypad.getKey();
if (key != NO_KEY)
{
Serial.println(key);
}
char LastJoystickKey;
switch(key){
case 'a':
if(LastJoystickKey=='b'){
Remote.next();
delay(200);
Remote.clear();
}
if(LastJoystickKey=='c'){
Remote.previous();
delay(200);
Remote.clear();
}
break;
case 'b':
if(LastJoystickKey=='a'){
Remote.previous();
delay(200);
Remote.clear();
}
if(LastJoystickKey=='c'){
Remote.next();
delay(200);
Remote.clear();
}
break;
case 'c':
if(LastJoystickKey=='a'){
Remote.next();
delay(200);
Remote.clear();
}
if(LastJoystickKey=='b'){
Remote.previous();
delay(200);
Remote.clear();
}
break;
default:{
}
if(key=='a'||key=='b'||key=='c'){
LastJoystickKey=key;
}
}
if (key == '2'){
Remote.play_pause();
delay(10);
Remote.clear();
}
if (key == '3'){
Remote.decrease();
delay(10);
Remote.clear();
}
if (key == '1'){
Remote.increase();
delay(10);
Remote.clear();
}
}
На джойстике имеется крутелка (не энкодер), которая работает по принципу замыкания контактов как и кнопка. Крутелка имеет 3 положения (3 пары замыкания контактов). Замыкания происходят по схеме 4пин+7пин, 4пин+8пин, 4пин+9пин.
Вопрос в следующем: на крутелке постоянно замкнута одна из пар контактов, из-за этого код не хочет работать, если разомкнуть (физически), то код рабочий и все кнопки кроме крутелки работают.
Помогите решить проблему.
А пробдлема-то в чём? Разомкните физически и всё работает.
И да, кода не читал, вставьте как положено, тогда может кто и почитает.
Мне крутелка нужна, а физически разомкнуть я имел ввиду с пина провод убрать
Добрый день. Помогите решить проблему. Имеется код управления джойстиком:
не помогло
не помогло
что не помогло то?
Вы выражайтесь яснее - напишите четко, как оно должно работать и как оно сейчас "не работает" или работает не так.
Насколько я пониманию в автомобилях, крутилка там скорее всего что-то типа переключателя света или паузы в дворниках? - ваша ошибка в том, что по смыслу это не кнопка, а переключатель, оно с этим кодом работать не будет, тут логика другая нужна. Чтобы эту логику сформулировать - нужно то описание, которое я просил выше. Пока будете описывать - может и сами разберетесь, что в коде поменять.
С кнопками я думаю понятно. Принцип работы крутелки: крутится на 360 градусов, при этом имеет 3 положения(замыкания), всегда замкнута в каком-то положении
https://www.drive2.ru/l/6899697/
нужна нормальная принципиальная схема чтобы было проще понять как подключены кнопки. Не зная этого, делать что либо бесполезно
Конечно исходя из схемы если одна из кнопок крутилки постоянно замкнута остальное будет работать не корректно. Я вообщето имел в виду схему на авто а не как вы к ардуино подключили
Да, нет, нормально там всё с кнопками. Вот смотрите. Пины 3-6 ставим в INPUT и притягиваем к ... ну, скажем к земле. Пины 7-9 никогда не включаем в режим OUTPUT два сразу - только по одному.
Итак,
1) ставим пины 8 и 9 в INPUT, а пин 7 в OUTPUT и подаём на него HIGH. Если на одном (или больше) из пинов 3-6 появился HIGH, значит соответсвующая кнопка (1--3 или ENC1 нажата).
2) ставим пины 7 и 9 в INPUT, а пин 8 в OUTPUT и подаём на него HIGH. Если на одном (или больше) из пинов 3-6 появился HIGH, значит соответсвующая кнопка (4--6 или ENC2 нажата).
3) ставим пины 7 и 8 в INPUT, а пин 9 в OUTPUT и подаём на него HIGH. Если на одном (или больше) из пинов 3-6 появился HIGH, значит соответсвующая кнопка (7--9 или ENC3 нажата).
Вот так их все и сканируем постоянно. Нормально получается.
Спасибо за помощь
Ну, Вы поняли принцип опроса? Пример нужен, а то в соседней теме вроде валялся.
Да, понял
Вот в этой теме есть описание похожей схемы, но там ещё диоды есть, чтобы пины не пожечь (помните моё замечание про "никогда два сразу", так вот там это не страшно). А у Вас на диодах сэкономили, но принци тот же. И там, кстати, тоже "подрулевые", посмотрите если интересно.
Да, нет, нормально там всё с кнопками. Вот смотрите. Пины 3-6 ставим в INPUT и притягиваем к ... ну, скажем к земле. Пины 7-9 никогда не включаем в режим OUTPUT два сразу - только по одному.
Итак,
1) ставим пины 8 и 9 в INPUT, а пин 7 в OUTPUT и подаём на него HIGH. Если на одном (или больше) из пинов 3-6 появился HIGH, значит соответсвующая кнопка (1--3 или ENC1 нажата).
2) ставим пины 7 и 9 в INPUT, а пин 8 в OUTPUT и подаём на него HIGH. Если на одном (или больше) из пинов 3-6 появился HIGH, значит соответсвующая кнопка (4--6 или ENC2 нажата).
3) ставим пины 7 и 8 в INPUT, а пин 9 в OUTPUT и подаём на него HIGH. Если на одном (или больше) из пинов 3-6 появился HIGH, значит соответсвующая кнопка (7--9 или ENC3 нажата).
Вот так их все и сканируем постоянно. Нормально получается.
спасибо, поучительно. как всегда от вас супер полезная инфа!
Кстати, если пины 3-6 притянуть не к земле, а к питанию - всё то же самое, только HIHG везде на LOW заменяем.
Кстати, если пины 3-6 притянуть не к земле, а к питанию - всё то же самое, только HIHG везде на LOW заменяем.
Спасибо
это ведь матрица кнопок. Титановый велосипед клапы , я так понимаю, это поддерживает. Читаем внизу про марицу. Т.к. диодов нет нужно использовать режим 1-Key rollover или 2-key rollover
взято оттуда
получилось сделать? а то у меня мой код не хочет запускаться?
получилось сделать? а то у меня мой код не хочет запускаться?
я запретил.
!секретная инфа - титановый велосипед пины матрицы не жгёть, хоть все провода скрути в кучку.
#всего то нужно при опросе матрицы в оутпут переводить только один пин, а отсальные должны быть в инпут.
*Kein Nagel, kein Zauberstab. Clapautius.
получилось сделать? а то у меня мой код не хочет запускаться?
это ведь матричный джойстик
это ведь матричный джойстик
даже не знаю, что сказать по этому поводу.
ок. это что-то и, что?