Вопрос по преобразованию байтового сигнала в резистивный
- Войдите на сайт для отправки комментариев
Привет всемогущие, помогите разобраться. Хочу подружить мультируль в авто с магнитолой используя SoftwareSerial.
На руле 4 кнопки, сам руль при нажатии любой кнопки выдаёт байтовый сигнал по одному проводу, на магнитолу необходимо подать одним проводом со стабильным напряжением при нажатии кнопки руля (т.е. при нажатии разных кнопок - на магнитолу разное напряжение). Напряжение любое до 5v, а магнитола подстроится. Получается сигнал на магнитолу можно снять с ардуино с конкретного пина или определить пины на которых при нажатии кнопки будет выдаваться +5v на определённых пинах а там уже через резистивные делители соеденить и подать на магнитолу
Сам знаком с ардуино только 2-ую неделю. Накопал такой вот скетч, который читает сигнал от руля "как я понял это пин 2" и выдаёт "как я понял на пины 4,5,6,7 напряжение +5v" при нажатии соответствующей кнопки, а так же при нажатии должен загораться светодиод и гаснуть при отпускании. К сожалению с автором скетча связи уже нет(. Автор писал, что делал на версии 1.0.1. Я поступил также - плату подключил к компу, прошил, подключил - не работает((. Светодиод не загорается, при нажатии кнопок по очереди замерял напряжение на всех пинах 4,5,6,7. На всех пинах плавающее напряжение при нажатии любой кнопки руля.
Светодиод рабочий, с платой вопросов нет, при заливке скетча ошибок небыло. Разобрал код, всё вроде логически верно. Может неправильно подключаю или не стыковка где в скетче.
Прошу помидорами не кидать если что. Помогите подружить руль с магнитолой. Заранее Спасибо!
/* Опытным путем определил коды кнопок 00 7b 4b cf cf 7b cb 4b 4b cf cf cf cf 00 Громкость + 00 7b 4b cf cf 7b 4b 4b cb cf cf cf cf 00 Громкость - 00 7b 4b cf cf 7b cb 4f 4b cb 7b cf ff 00 Поиск вперед 00 7b 4b cf cf 7b 4b 7b 4b 7b cf cf ff 00 Поиск назад При длительном нажатии идет код кнопки и после него последовательность 00 ff которя повторяется до тех пор пока кнопка не будет отпущена в коде кнопки явно виден префикс 00 7b 4b cf cf 7b Код кнопки определяется байтами с 7 по 11 включительно */ #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); byte VolUpArray[] = { 0x00, 0x7b, 0x4b, 0xcf, 0xcf, 0x7b, 0xcb, 0x4b, 0x4b, 0xcf, 0xcf, 0xcf, 0xcf, 0x00}; byte VolDwArray[] = { 0x00, 0x7b, 0x4b, 0xcf, 0xcf, 0x7b, 0x4b, 0x4b, 0xcb, 0xcf, 0xcf, 0xcf, 0xcf, 0x00}; byte SeekUpArray[] = { 0x00, 0x7b, 0x4b, 0xcf, 0xcf, 0x7b, 0xcb, 0x4f, 0x4b, 0xcb, 0x7b, 0xcf, 0xff, 0x00}; byte SeekDwArray[] = { 0x00, 0x7b, 0x4b, 0xcf, 0xcf, 0x7b, 0x4b, 0x7b, 0x4b, 0x7b, 0xcf, 0xcf, 0xff, 0x00}; byte BufArray[15]; boolean VolUpKey; boolean VolDwKey; boolean SeekUpKey; boolean SeekDwKey; int led = 13; byte ii; unsigned long time; void setup() { pinMode(led,OUTPUT); //Будет отражать нажатие кнопки pinMode(4,OUTPUT); // для резистивного делителя pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); mySerial.begin(2400); // на скорости 2400 - читаются следующие данные } void loop() // run over and over { ii =0; VolUpKey = true; VolDwKey = true; SeekUpKey = true; SeekDwKey = true; Sig(0); digitalWrite(led,LOW); if (mySerial.available() > 0) { // В буфере порта есть данные ii =0; BufArray[ii] = mySerial.read(); time = millis(); while(ii <=11) { if (BufArray[ii] != VolUpArray[ii] && VolUpKey) VolUpKey = false; if (BufArray[ii] != VolDwArray[ii] && VolDwKey) VolDwKey = false; if (BufArray[ii] != SeekUpArray[ii] && SeekUpKey) SeekUpKey = false; if (BufArray[ii] != SeekDwArray[ii] && SeekDwKey) SeekDwKey = false; if (mySerial.available() > 0) { ii++; BufArray[ii] = mySerial.read(); } if ((millis() - time) >300) ii = 14; } if (ii >=11) { if (VolUpKey) Sig(1); if (VolDwKey) Sig(2); if (SeekUpKey) Sig(3); if (SeekDwKey) Sig(4); //Для контроля включаем/ыфключаем светодиод if (VolUpKey || VolDwKey || SeekUpKey || SeekDwKey) { digitalWrite(led,HIGH); } else { digitalWrite(led,LOW); Sig(0); } // Ждем перерыва в поступлении данных больше чем 0,2 сек., т.е. пока не будет отпущена кнопка // При нажатой кнопке здесь будет последовательность 00 ff 00 ff 00 ff ....... // Если нужно сделать повторение нажатия кнопки, это можно сделать обаботкой этих данных time = millis(); while( abs(millis() - time ) < 300) { if (mySerial.available() > 0) { ii = mySerial.read(); time = millis(); } else { delay(100); } } } } } //////////////////////////////////////////////////////////////////////////////// // Установка выходного сигнала для магнитолы // Если значение level от 1 до 4 один выход будет в 1. // В остальных случаях все каналы выключены //////////////////////////////////////////////////////////////////////////////// void Sig(int level){ // Установим на одном из выходов (4...7) единицу for( int cikl=1; cikl <5; cikl++){ if (level == cikl) { digitalWrite(cikl+3, HIGH); } else { digitalWrite(cikl+3, LOW); } } }
avasilkov547, из Вашего сообщения трудно понять, чего Вы на самом деле хотите:
1. Если "разобраться" - то начинать следует с изучения языка программирования, потом - практикум - помигать светодиодом и пр. В результате Вы научитесь разрешать подобные проблемы самостоятельно. Но срок будет исчисляться месяцами.
2. Если "подружить...", то обращайтесь в раздел "Ищу исполнителя", где за денежку заказываете работу. Ваша проблема будет разрешена в кратчайшие сроки, но самостоятельно решать подобные проблемы Вы, естественно, не научитесь.
avasilkov547, из Вашего сообщения трудно понять, чего Вы на самом деле хотите:
1. Если "разобраться" - то начинать следует с изучения языка программирования, потом - практикум - помигать светодиодом и пр. В результате Вы научитесь разрешать подобные проблемы самостоятельно. Но срок будет исчисляться месяцами.
2. Если "подружить...", то обращайтесь в раздел "Ищу исполнителя", где за денежку заказываете работу. Ваша проблема будет разрешена в кратчайшие сроки, но самостоятельно решать подобные проблемы Вы, естественно, не научитесь.
помигать светодиодом пробовал, в коде раборался, все стало понятно кроме библиотеки SoftwareSerial.
а тут прошу помощи подсказать что куда подключать при использовании такого скетча, многие писали что всё работает, только у меня не выходит(
avasilkov547, я, честно говоря, сколько ни перечитывал, так и не сумел понять Вашего исходного сообщения.
Я так понимаю, что если Вы хотите создать какое-либо устройство, то следует составить схему и написать скетч. При этом скетч должен соответствовать схеме.
Схемы я не вижу. И из сообщения №2, если я его правильно понял, следует, что схемы у Вас просто нет. А для чего тогда написан скетч?
Нич-чего не понимаю!
так а схема тут и не нужна. пин 2 читает сигнал от руля и выдаёт на пины 4,5,6,7 напряжение, в зависимости от нажатой кнопки. т.е. вход исходного сигнала и выход необходимого, аппаратная часть состоит и 1 платы ардуино и всё
Так пин 2 и читает. И выдает. Просто читает херню какую-то и херню выдает. Тут даже код не нужен, чтобы понять этот простой факт.
Ссылку на первоисточник в студию
странно . Руль выдает сериалом? Четто я такого не встречал пока. Как правило резистивная матрица.
и проблема согласования руля и чужой магнитолы - в трансляции одних сопротивлений в другие
а исчо встречал подобие шима, который на рц цепоке формирует напряжение. Кстати выдаваемый сериалом байт своим напонением вполне может имитировать шим.
тут источник готового решения https://passatworld.ru/showthread.php/172379-Zastavlyaem-rabotat-shtatnye-knopki-na-rule/page19?p=5116949&viewfull=1#post5116949
И на сколько я успел разобраться в ардуино, может сейчас скажу глупость но вроде как pin 2 неможет работать по цифре, типа нет символа "~" возле пина
Ссылку на первоисточник в студию
странно . Руль выдает сериалом? Четто я такого не встречал пока. Как правило резистивная матрица.
и проблема согласования руля и чужой магнитолы - в трансляции одних сопротивлений в другие
а исчо встречал подобие шима, который на рц цепоке формирует напряжение. Кстати выдаваемый сериалом байт своим напонением вполне может имитировать шим.
В том то и проблемма, кнопки на руле НЕ резистивная матрица! при включенном зажигании на этот провод приходит приверно 4,7v а при нажатии на любую кнопку напряжение падает до 3,6 и скачет рандомно +-1v, т.е. если бы кнопки были резистивные на мультиметр подавалось бы стабильное напряжение при нажатии и при нажатии разных кнопок - разное напряжение. и это точно не ваговский can! т.к. для can-шины нужно минимум 2 провода.
К сути: Опытным путем автор скетча определил коды кнопок (незнаю как) и написал сие творение. пишет что всё работает
Для UART тоже нужны два провода и земля. А после информациии о чтении CAN через резистивный делитель я просто вашу сцылку закрыл и забыл. Что ваш там автор определил и в какой канаве торчит сейчас - никому неизвестно.
Для UART тоже нужны два провода и земля. А после информациии о чтении CAN через резистивный делитель я просто вашу сцылку закрыл и забыл. Что ваш там автор определил и в какой канаве торчит сейчас - никому неизвестно.
читать can-шину это для других модификаций. у меня НЕ CAN!!! у меня сигнал Serial
Хорошо, допустим что ваш волшебный руль имеет один провод и гонит по нему даннные, которые вы принимаете как можете - т.е. полагая, что это uart.
Зачистите loop() и сделайте там Sig(0); delay(1000); Sig(1); delay(1000); Sig(2);... и т.д. Это переберет все уровни громкости, так? Замерьте напряжение на выводах - меняется? Магнитола реагирует?