Arduino pro mini + alpine
- Войдите на сайт для отправки комментариев
Пнд, 24/07/2017 - 18:43
Уважаемые програмеры прошу вашей помощи.
Есть такая тема как управление магнитолой Алпайн с помощью команд ардуинки.
Я нашел немного инфы на эту тему, считал значение подрулевых кнопок, запилил скетч и никак не могу довести до ума. Ошибки компиляции для платы и тд. В програмировинии не силен.
вот скетч ( куски выдраные из другиг проэктов + свои доработки)
///////////////////////////////////////////////////////////////// // alpine #define Alpine 2 #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 ///////////////////////////////////////////////////////////////// // маски для клавиш const int sourse =1 ; const int vol_up =2 ; const int vol_dn =3 ; const int next =4 ; const int pre =5 ; const int mute =6 ; int wheelPin=A0; // аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки int i=0; int prevButton=0; int getR() // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0 { // читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине int r=analogRead(wheelPin); // Ищем, какая кнопка соответствует этому сопротивлению. if (r >= 731 && r <= 734) return (vol_up); if (r >= 793 && r <= 798) return (vol_dn); if (r >= 759 && r <= 761) return (pre); if (r >= 826 && r <= 828) return (next); if (r >= 836 && r <= 838) return (sourse); if (r >= 768 && r <= 770) return (mute); // если ни одна из кнопок не нажата, возвращаем 0 return (0); } // цикл программы void loop(void) { if (1 == (sourse)) { SendCommand(cmdSource); Serial.print("sourse"); Serial.println(); } if (4 == (next)) { SendCommand(cmdRight); Serial.print("next"); Serial.println(); } if (5 == (pre)) { SendCommand(cmdLeft); Serial.print("pre"); Serial.println(); } if (6 == (mute)) { SendCommand(cmdMute); Serial.print("Mute"); Serial.println(); } if (2 == (vol_up)) { SendCommand(cmdVolumeDown); Serial.print("volup"); Serial.println(); } if (3 == (vol_dn)) { SendCommand(cmdVolumeUp); Serial.print("voldn"); Serial.println(); } } // Отправка байта (протокол NEC-Clarion) void SendByte(byte data) { for (int i = 0; i < 8; i++) { digitalWrite(Alpine, HIGH); delayMicroseconds(560); // Пауза между битами digitalWrite(Alpine, LOW); if (data & 1) // Последний бит умножаем на 1 { delayMicroseconds(1680); // Логическая единица } else { delayMicroseconds(560); // Логический ноль } data >>= 1; // Новый, сдвинутый вправо байт (на 1 бит) } } // Отправка команды void SendCommand(byte command) { // Что-то вроде приветствия, // особенность модифицированного протокола NEC digitalWrite(Alpine, HIGH); delayMicroseconds(9000); digitalWrite(Alpine, LOW); delayMicroseconds(4500); // Адрес протокола (общедоступная справочная инфа) SendByte(0x86); SendByte(0x72); // Отправка команды SendByte(command); SendByte(~command); // Для определения последнего бита (конец посылки) digitalWrite(Alpine, HIGH); delayMicroseconds(560); digitalWrite(Alpine, LOW); delay(50); // Техническая пауза }
хтеее setup ?
1. Данная ошибка у меня не воспроизводится.
2. Вам уже сказали выше - где функция setup() ? Зачем Вы её удалили? Во всех скетчах должны обязательно присутствовать функции setup() и loop()
Циклическое выполнение всех команд без нажатия на кнопки
Идеальные кнопки? Разброс значений менее 15мВ?
Циклическое выполнение всех команд без нажатия на кнопки
Теперь скетч компилируется нормально:
Скетч использует 2 150 байт (6%) памяти устройства. Всего доступно 30 720 байт.
Все компилит нормально. Циклически выполняется все заданые функции , а нужно по нажатию кнопки.
Да кнопки идеальные. Помогите плиз
Заработало. выбросил много лишнего. но не все. Рабочий скетч nisan xtrail .
Не уверен что это заработает.
Работает Отлично. Спасибо. Укажите пожалуйста где сменить значение задержки между нажатиями, а то долго сильно жать на кнопку нужно для срабатывания. говорю я немного дубовый в этом
А там долго жать не надо. Надо нажать и отпустить. Срабатывает при переходе (ничего не нажата)-> (нажата нужная кнопка). А вот удерживая одну кнопку перейти на другую не получится.
ПС: Этот код переделывал с этого. #11 А вот если долгое нажатие вызывает повторное нажатие, то надо брать отсюда #28
может и так. но у меня по другому. вот видос. поправь код пожалуйста. не удоюно так.
https://youtu.be/PgedJIxjPZs
может и так. но у меня по другому. вот видос. поправь код пожалуйста. не удоюно так.
Еще раз, про идеальные кнопки, подумай!!!!
Я походу задолбал но эта часть теперь не выполняется
тот скетч что я наваял работает корректно до ужаса
Попробуйте адаптировать под вашу цель эту программу.
Вот эта точно работает.
ПС: А эта уже не уверен
всеми спасибо огромное за помощ. подшаманил свой код (который как не странно работает идеально). уже стоит на машине все прекрасно и работает. кого заинтересует инфа фотки есть
Поделись пожалуйста рабочим кодом.
нашел такой скетч Вроде он, давно было не помню. или в 8 посте он. не помню.
и там кнопки все с одинаковым сопротивлением. нужно резисторов подобавлять чтобы считывало разные значения
Спасибо большое. Этот код нерабочий, 8-ой пост - рабочий. Подружил sony rm-x4s с alpine cde-185 на основе кода в посте №8
Всем привет а можно схему нарисовать к Ардуино нано .просто не могу понять куда чё подключать.