Еще один модуль расширения возможностей Bluetooth-модуля на F-6888 — контроллер резистивных кнопок на руле а/м Nissan/Infiniti. Модуль предназначен для считывания нажатий кнопок UP/DOWN и передачи сигналов в смартфон для переключения треков.
В данной версии модуля реализованы два алгоритма для нажатия кнопок UP и DOWN — соответственно «следующий трек, предыдущий трек». Физически, на плате есть возможность контролировать нажатие кнопки MODE, но программно она не реализована по причине отсутствия необходимости. Так как подключение основного Bluetooth-модуля имитирует соединение смартфона с Bluetooth-гарнитурой, то никаких более функций реализовать невозможно. Функции сопряжения, автоподключения, автовоспроизведения, паузы и т.п. реализуются программным обеспечением смартфона. Для всего этого уже написано огромное множество хороших приложений и не имеет смысла «изобретать велосипед».
Работа контроллера проверена и гарантированно работает с резистивными кнопками рулей Nissan/Infiniti 2000-х годов выпуска. Например: Infiniti FX35 S50, Nissan Murano Z50, Nissan X-Trail T31. Вполне возможно, что контроллер будет работать и с рулями других автомобилей, так как логика работы АЦП одинакова для всех и марка автомобиля значения не имеет. Но проверена данная схема только на Nissan-ах и Infiniti с рулями типа такого, как на фото ниже. «Счастливые» обладатели рулей с CAN-шиной пока «пролетают» — для этого будет отдельный, сложный и дорогой, контроллер.
Основная задача контроллера — считать сопротивление нажатой кнопки на руле и «дернуть» соответствующей «ногой» на выходе. Считывание кнопок осуществляется встроенным в микроконтроллер аналого-цифровым преобразователем по двум каналам — так устроен руль в Ниссанах (см. пример ниже). В других автомобилях все кнопки могут быть на одном канале. Тогда можно оба канала контроллера объединить, но они все равно смогут контролировать нажатие двух кнопок, что добавляет универсальности к применению контроллера. Для «совсем сложных» случаев на плате контроллера предусмотрены компенсационные делители в обоих каналах АЦП — резисторы R2-R4 и R3-R5. Т.е., при необходимости, можно подстроить вход АЦП под «конкретные» условия.
Модуль контроллера питается собственным стабилизатором напряжения и имеет защиту от переполюсовки. Может использоваться как самостоятельное устройство для управления кнопочной 1DIN магнитолой. Тогда выходы микроконтроллера PB0, PB1, PB2 просто припаиваются к соответствующим кнопкам на панели магнитолы.
Микроконтроллер управляет Bluetooth-модулем по каналу АЦП подключая соответствующий транзистор к нижнему плечу входного делителя. Резистор верхнего плеча входного делителя расположен на плате Bluetooth-модуля. Резистор нижнего плеча подключается соответствующим транзистором на плате контроллера, таким образом меняется уровень напряжения на входе АЦП Bluetooth-модуля и имитируется нажатие кнопки.
Алгоритм программирования значения кнопок в память микроконтроллера для версии прошивки 1.2:
- Обесточить модуль (например выключить зажигание или магнитолу — зависит от того, куда подключено питание модуля).
- Нажать и удерживать на руле кнопку UP (кнопку не отпускать).
- Подать питание на модуль (включить зажигание или магнитолу).
- Дождаться появления сигнала (постоянный писк зуммера на плате модуля).
- Отпустить нажатую кнопку UP.
- Нажать кнопку UP для внесения в память значения АЦП соответствующего нажатой кнопке. Подтверждением «запоминания» кнопки будет короткая пачка пиканий зуммера.
- Нажать кнопку DOWN для внесения ее в память. Подтверждением «запоминания» кнопки также будет короткая пачка пиканий зуммера.
Все, кнопки «запомнены» контроллером. Теперь нажатия кнопок на руле подтверждаются пиканьем зуммера на плате если их сопротивление совпадает с заранее запрограммированным значением в памяти контроллера. Если нужно перепрограммировать кнопки в контроллер (например при неуверенном срабатывании из-за дребезга или загрязненности контактов) просто повторяем вышеописанную процедуру сколько угодно раз. В исполняемой программе микроконтроллера задан довольно широкий диапазон погрешности считывания значения нажатой кнопки, поэтому в 99% случаев достаточно однократной настройки.