адаптер кнопок в автомобиль
- Войдите на сайт для отправки комментариев
Сб, 27/06/2020 - 00:32
Добрый день , пожалуйста подскажите по коду .
нашел код для матричного джойстика рено и магнитолы алпайна . Адаптер был собран на ардуино нано.
Залил код в про микро и подключил джойстик согласно схеме _не работает ... дописываю команду для монитора порта, что бы проводком замыкать и проверить алгоритм работы, но при запуске монитора загорается диод около 14 контакта и в мониторе порта без остановки отображается названия кнопок.
Пожалуйста , подскажите где ошибка. Не должно ведь быть проблем из-за различных схем
Схема джойстика https://a.d-cd.net/f4f8accs-960.jpg
///////////////////////////////////////////////////////////////// // alpine #define alpinePin 12 #define cmdPower 0x09 #define cmdSource 0x0A #define cmdBand 0x0D #define cmdVolumeDown 0x15 #define cmdVolumeUp 0x14 #define cmdUp 0x0E #define cmdDown 0x0F #define cmdLeft 0x13 #define cmdRight 0x12 #define cmdPlay 0x07 #define cmdAProc 0x06 #define cmdMute 0x16 #define cmdAngleUp 0x4C #define cmdAngleDown 0x4B #define cmdCDChange 0x03 ///////////////////////////////////////////////////////////////// // джойстик #define rows 3 #define cols 2 // номера кнопок в соответствии со схемой const byte keys[rows][cols] = { {1,4}, {2,5}, {6,3} }; // состояния направлений енкодера const byte encoderdirection[3][3] = // 0 - на месте, 1 - вниз, 2 - вверх { {0, 1, 2}, // 0 {2, 0, 1}, // 1 {1, 2, 0} // 2 }; // 10 9 8 7 6 5 // строки // красный ч красный // коричневый ч желтый 6 // черный ч черный // столбцы // зеленый б красный // голубой б черный // желтый б желтый // номера пинов const byte rowPins[rows] = {10, 9, 8}; // строки (желтый, зеленый, голубой) const byte colPins[cols] = {7, 5}; // столбцы (черный, красный) #define encoderPin 6 // пин енкодера (коричневый) byte encodervalue; // маски для клавиш #define MaskMediaButton 1 #define MaskRadioButton 2 #define MaskVolumeUpButton 4 #define MaskVolumeDownButton 8 #define MaskOkButton 16 #define MaskMuteButton 32 #define MaskScrollDown 64 #define MaskScrollUp 128 unsigned long starttime; bool workkbd; ///////////////////////////////////////////////////////////////// void setup() { Serial.begin(115200); int i; // строки - на выход for (i = 0; i < rows; ++i) { pinMode(rowPins[i], OUTPUT); } // столбцы - на вход for (i = 0; i < cols; ++i) { pinMode(colPins[i], INPUT); digitalWrite(colPins[i], HIGH); // включаем подтягивающий резистор } // столбец для енкодера pinMode(encoderPin, INPUT); digitalWrite(encoderPin, HIGH); // включаем подтягивающий резистор encodervalue = 0; // управление Alpine pinMode(alpinePin, OUTPUT); starttime = millis(); workkbd = false; } // сканирование джойстика byte scan(void) { int i, j; byte code = 0; for (i = 0; i < rows; ++i) { digitalWrite(rowPins[i], LOW); // кнопки for (j = 0; j < cols; ++j) { if(digitalRead(colPins[j]) == false) { code |= 1 << (keys[i][j] - 1); } } // енкодер if (digitalRead(encoderPin) == false) { int oldencodervalue = encodervalue; encodervalue = i; switch (encoderdirection[oldencodervalue][encodervalue]) { case 1: // вниз code |= 64; break; case 2: // вверх code |= 128; break; } } digitalWrite(rowPins[i], HIGH); } return code; } // отправка байта void SendByte(byte data) { for (int i = 0; i < 8; ++i) { digitalWrite(alpinePin, HIGH); delayMicroseconds(560); digitalWrite(alpinePin, LOW); if (data & 1) { // 1 delayMicroseconds(1680); } else { // 0 delayMicroseconds(560); } data >>= 1; } } // отправка команды void Send(byte command) { digitalWrite(alpinePin, HIGH); delayMicroseconds(9000); digitalWrite(alpinePin, LOW); delayMicroseconds(4500); SendByte(0x86); SendByte(0x72); SendByte(command); SendByte(~command); digitalWrite(alpinePin, HIGH); delayMicroseconds(560); digitalWrite(alpinePin, LOW); } // цикл программы void loop(void) { byte code; code = scan(); if (workkbd == false) { if (millis() - starttime > 3000) workkbd = true; return; } if (code & MaskMediaButton) Send(cmdDown); Serial.print("niz"); if (code & MaskRadioButton) Send(cmdUp); Serial.print("verx"); if (code & MaskVolumeUpButton) Send(cmdRight); Serial.print("pravo"); if (code & MaskVolumeDownButton) Send(cmdLeft); Serial.print("levo"); if (code & MaskOkButton) Send(cmdPlay); Serial.print("play"); if (code & MaskMuteButton) Send(cmdMute); Serial.print("mute"); if (code & MaskScrollDown) Send(cmdVolumeDown); Serial.print("volniz"); if (code & MaskScrollUp) Send(cmdVolumeUp); Serial.print("volup"); }
а автор кода и схемы чо говорит?
а автор кода и схемы чо говорит?
у него он работает , он его и выложил https://www.drive2.ru/l/4434802/
начт, ищи ошибки в своей схеме.
начт, ищи ошибки в своей схеме.
код полностью скопирован, добавлена только команда для монитора и изменен пин вывода на магнитолу. джойстик не подключен, а монитор показывает циклическое "нажатие " всех кнопок
предъяви автору, чо за х-ня. Нам это зачем?
rtyz - в коде явных проблем не вижу. Похоже на то, что у вас с автором кода разные джойстики - у него нормально замкнутый, а у вас - разомкнутый. Попробуйте поменять полярность кнопок в коде
предъяви автору, чо за х-ня.
и на бапки его, на щотчег!!! стрясёшь на нульцевую тачилу!!! с джойстиком!!!
rtyz - в коде явных проблем не вижу. Похоже на то, что у вас с автором кода разные джойстики - у него нормально замкнутый, а у вас - разомкнутый. Попробуйте поменять полярность кнопок в коде
они оба матричные отличаются только количеством кнопок . Можете более подробно про полярность подсказать ? по кодам управления nec алпай и кенвуд совпадают и решил подключить с новым кодом , реакции магнитолы 0 (
предъяви автору, чо за х-ня. Нам это зачем?
У вас раздвоение личности? пишите нам ..
Уважаемый ,для этого и задан вопрос в этом разделе. Форум и создан , что бы найти ответ на вопрос. Я не смог понять почему так работает - задал вопрос.
Если Вам нечего посоветовать или вы в этом деле умный, то не стоит заходить в песочницу и писать ерунду не по теме.
Код мне нужен, может кому-то еще пригодится. Вам не нужен и я рад за вас.
Если Вам нечего посоветовать или вы в этом деле умный, то не стоит заходить в песочницу и писать ерунду не по теме.
Не, я в этом деле тупое, как пропка, жывотнае. :)
Дет, ща тэндэция такайа, адын дурак запостил это гавно ради хайпа, другой дурак собрал это гавно из-за тупости и уже задайот вапросы уже на другом форуме. Счас этт норм. Пара уже привыкнуть к такой херне.
У меня на работе так было - мужики разберут-соберут->не работает... и так раза по три-четыре... потом начальник бежит, мол иди, думай, что там не так. Так-шо я привыкший к такай херне... ))))))))))))))))))))))))))))
Дет, ща тэндэция такайа, адын дурак запостил это гавно ради хайпа, другой дурак собрал это гавно из-за тупости и уже задайот вапросы уже на другом форуме. Счас этт норм. Пара уже привыкнуть к такой херне.
У меня на работе так было - мужики разберут-соберут->не работает... и так раза по три-четыре... потом начальник бежит, мол иди, думай, что там не так. Так-шо я привыкший к такай херне... ))))))))))))))))))))))))))))
Ещё один баран на этом форуме. Откуда вас за день столько? Этот код работает у 3 на драйве. На ютюбе есть видео.
Я рад что вы не дурак, а очень умный Homo sapiens
Если нечего по теме сказать, проходим мимо ... А умничать знаете где можно
Я рад, что вы не дурак, а очень умный Homo sapiens
Поставьте в 139 строке вывод code в монитор, и посмотрите что там творится.
Я вот раза 3 уже писал на заказ, код сопряжения джойстика с магнитолой.
Почему то в мыслях даже не было в открытый доступ выкладывать, что у меня, что у заказчиков.
Что я делаю не так ?
Автору кода, за один обработчик энкодера памятник нужно ставить, посмертно...
Поставьте в 139 строке вывод code в монитор, и посмотрите что там творится.
Спасибо вечером попробую
В цепочки ифов со 198 строки вставьте фигурные скобки.
Так чего бы не спросить у тамошних баранов, раз они баранистее местных?
Ещё один баран на этом форуме. Откуда вас за день столько?
Откуда? Дык мы другие "бараны", мы "сверху" смотрим на других баранов. Просто мы поднимаемся выше в горы, там воздух свежее и травка зеленее, да и меньше народу-больше кислороду!!!
Аткуда нас столько? Да ладно, нас очень мало, ежли взять "разрез" даже по этому форуму --- корректно отвечающих гораздо меньше чем корректно задающих вопросы, тем паче, шо есть ещё и некорректно заданные вопросы, их так-же не мало. И если поделить все корректные на отвечающих = цифра будет катастрофически мала!
Так-шо небзди!
Так чего бы не спросить у тамошних баранов, раз они баранистее местных?
Там тактика другая, смотришь отзывы на драйве и то-же самое видео на ютубе -------- бараны разные!!!
Там чото-типа "кукушка хвалит петуха за то, что хвалит он кукушку"
Ээтт счас норм, пиривыкайтЭ.
rtyz, всё получилось?
rtyz, всё получилось?
да, в мониторе все работает.
только осталось понять почему магнитола не реагирует . Коды верные
Protocol NEC (Kenwood modification)
Address 0x46B9
SRC 0x13 (без повторов)
ATT 0x16 (без повторов)
VolumeUp 0x14
VolumeDn 0x15
AUD 0x17
Play/Pause 0x0E (без повторов)
Up 0x0D
Down 0x0C
Left 0x0A
Right 0x0B
Phone 0x92
2-ZONE 0x82
DIRECT/OK 0x0F (без повторов)
1 0x01 (без повторов)
2 0x02 (без повторов)
3 0x03 (без повторов)
4 0x04 (без повторов)
5 0x05 (без повторов)
6 0x06 (без повторов)
7 0x07 (без повторов)
8 0x08 (без повторов)
9 0x09 (без повторов)
0 0x00 (без повторов)
R.VOL Dn 0x81
R.VOL Up 0x80