Форум по автодиагностике, автосканерам, ремонту, обслуживанию и эксплуатации автомобилей

Форум по автодиагностике, автосканерам, ремонту, обслуживанию и эксплуатации автомобилей (http://autoprogs.ru/index.php)
-   Диагностика KIA / HYUNDAI | ремонт электроники (http://autoprogs.ru/forumdisplay.php?f=266)
-   -   Круиз контроль под управлением кнопок руля автомагнитолы на ардуино (http://autoprogs.ru/showthread.php?t=46302)

Виктор1984 04.09.2023 14:55

Круиз контроль под управлением кнопок руля автомагнитолы на ардуино
 
Вложений: 1
Расписывать много не буду.
Всё давным давно разжованно.
Хочу всем показать реализацию готового и проверенного проекта, потому что на просторах интернета ничего не нашел!

Виктор1984 04.09.2023 14:57

ПО схеме думаю все понятно. Единственное пришлось поменять номиналы некоторых резисторов, так как на используемых оптопарах есть падение напряжения от 0,04 В до 0,06 В при токе 1Ма в зависимости от производителя.
Детали:
1. Arduino nano или mini 200-300 р.
2. Оптопара транзисторная LTV-817S-TA1-C, 10 шт. 7-10 р. за шт.
3. Резисторы smd 12 шт. 1р. за шт.
4. Диод High-speed BAS32L 5шт. 3р. за шт.
5 Пьезоизлучатель .HPM14A, 5 В, 14 мм, 50р.
Итого менее 500р.
Работа кнопок:
громкость "+" "-" работает в штатном режиме
далее все остальные кнопки короткими нажатиями управляют магнитофоном а длинные круизом
Mute > Cancel
Mode > On/Off
Trek- > Set-
Trek+> Res+
Длинные нажатия озвучиваются коротким "ПИИК"
Единственное чего мы лишаемся перемотки песен и поиска каналов радиостанций с кнопок руля.
Файлы: прошивка и плата (yadi.sk/d/PAGmn7FAzdxfuQ)

----------

Версия 2:
yadi.sk/d/Q7ls4v8rWVb3wA
Работает так:
после включения все кнопки кроме "mode" работают в штатном режиме.(можем мотать песни и искать радио)
Короткое нажатие "mode" управляем магнитофоном.
После долгого удержания "mode" активируется круиз и кнопки работают как в первом варианте.

Работу обеих прошивок проверил на авто.

Виктор1984 04.09.2023 14:58

Вложений: 1
Плата

Виктор1984 04.09.2023 14:59

Вложений: 1
Канапульки

Виктор1984 04.09.2023 15:01

Вложений: 1
ЭБУ подключение

Виктор1984 04.09.2023 15:08

Делал лет 5 назад.

----------

Думаю может кому пригодиться.

----------

Код программы

Виктор1984 04.09.2023 15:12

Вложений: 1
У кого такие кнопки.

Виктор1984 04.09.2023 15:13

unsigned long kruiz_aktiviti=0;
unsigned long knopka_time=0 ; //таймер кнопки,
bool KEY_mute_activity=0; //флаг активности кнопки mute
bool KEY_ch_plys_activity=0; //флаг активности кнопки ch_plys
bool KEY_ch_minus_activity=0; //флаг активности кнопки ch_minus
bool KEY_mode_activity=0; //флаг активности кнопки mode
bool status_zumer=0;
bool zumer_activity=0;
bool kruiz_regim=0;

#define max_time 8000 //задержка на долгое нажатие
#define min_time 10
// Значения кнопок
#define KEY_vol_minus 650 //Кнопка
#define KEY_vol_plys 552 //Кнопка
#define KEY_mute 451 //Кнопка
#define KEY_mode 357 //Кнопка
#define KEY_ch_minus 228 //Кнопка
#define KEY_ch_plys 98 //Кнопка
#define NOKEY 1023 //Кнопки отпущены

#define vol_minus 7 // № пина
#define vol_plys 6 // № пина
#define mute 5 // № пина
#define mode 4 // № пина
#define ch_minus 3 // № пина
#define ch_plys 2 // № пина

#define on_of 10 // № пина
#define res_plys 11 // № пина
#define res_minus 12 // № пина
#define cancel 9 // № пина
#define zumer 8 // № пина


void setup() {
Serial.begin(9600); // initialize serial communication at 9600 bits per second:
pinMode(vol_minus, OUTPUT);
pinMode(vol_plys, OUTPUT);
pinMode(mute, OUTPUT);
pinMode(mode, OUTPUT);
pinMode(ch_minus, OUTPUT);
pinMode(ch_plys, OUTPUT);

pinMode(on_of, OUTPUT);
pinMode(res_plys, OUTPUT);
pinMode(res_minus, OUTPUT);
pinMode(cancel, OUTPUT);
pinMode(zumer, OUTPUT);

}




void loop() {


int KEY = analogRead(A0); // считываем значение напряж pin A0:

// Serial.println(analogRead(A0));// печать в порт

if(KEY>KEY_vol_plys-10&KEY<KEY_vol_plys+10){digitalWrite(vol_plys, HIGH);}// если нажали кнопку vol_plys включаем резюк vol_plys
else {digitalWrite(vol_plys, LOW);} //если отпустили выключаем

if(KEY>KEY_vol_minus-10&KEY<KEY_vol_minus+10){digitalWrite(vol_minus, HIGH);}// если нажали кнопку vol_minus включаем резюк vol_minus
else {digitalWrite(vol_minus, LOW);} //если отпустили выключаем

if(kruiz_aktiviti==1){

if(KEY>KEY_mute-10&KEY<KEY_mute+10){ //если нажали кнопку mute
KEY_mute_activity=1; //меняем статус ЧТО КНОПКА НАЖАТА
if(knopka_time<max_time){knopka_time++;} //запуск таймера
if(knopka_time==max_time){ //если таймер дотикал до максимума
digitalWrite(cancel, HIGH);zumer_activity=1; //включаем резюк на cancel
}}
else{digitalWrite(cancel, LOW);}

if(KEY>KEY_ch_plys-10&KEY<KEY_ch_plys+10){ //если нажали кнопку ch_plys
KEY_ch_plys_activity=1; //меняем статус ЧТО КНОПКА НАЖАТА
if(knopka_time<max_time){knopka_time++;} //запуск таймера
if(knopka_time==max_time){ //если таймер дотикал до максимума
digitalWrite(res_plys, HIGH);zumer_activity=1; //включаем резюк на res_plys
}}
else{digitalWrite(res_plys, LOW);}

if(KEY>KEY_ch_minus-10&KEY<KEY_ch_minus+10){ //если нажали кнопку ch_minus
KEY_ch_minus_activity=1; //меняем статус ЧТО КНОПКА НАЖАТА
if(knopka_time<max_time){knopka_time++;} //запуск таймера
if(knopka_time==max_time){ //если таймер дотикал до максимума
digitalWrite(res_minus, HIGH);zumer_activity=1; //включаем резюк на res_minus
}}
else{digitalWrite(res_minus, LOW);}}

if(kruiz_aktiviti==0){
if(KEY>KEY_mute-10&KEY<KEY_mute+10){digitalWrite(mute, HIGH);}
else{digitalWrite(mute, LOW);}

if(KEY>KEY_ch_plys-10&KEY<KEY_ch_plys+10){digitalWrite(ch_plys, HIGH);}
else{digitalWrite(ch_plys, LOW);}

if(KEY>KEY_ch_minus-10&KEY<KEY_ch_minus+10){digitalWrite(ch_minus, HIGH);}
else{digitalWrite(ch_minus, LOW);}

}

if(KEY>KEY_mode-10&KEY<KEY_mode+10){ //если нажали кнопку mode
KEY_mode_activity=1; //меняем статус ЧТО КНОПКА НАЖАТА
if(knopka_time<max_time){knopka_time++;} //запуск таймера
if(knopka_time==max_time){ //если таймер дотикал до максимума
digitalWrite(on_of, HIGH);zumer_activity=1; //включаем резюк на on_of
if(!kruiz_regim){ kruiz_regim=1;kruiz_aktiviti++ ; }
}}
else{digitalWrite(on_of, LOW);}

if(kruiz_aktiviti==2){kruiz_aktiviti=0;}

if(!status_zumer&zumer_activity){tone(zumer, 1200, 300);status_zumer=1;}




if(KEY>NOKEY-20&KEY<NOKEY+10){ //после отпускания кнопок

if(knopka_time<max_time&knopka_time>min_time) //проверяем время нажатия и какая кнопка была нажата
{
if(KEY_mute_activity){digitalWrite(mute, HIGH); delay(200);digitalWrite(mute, LOW); } //если mute коротко тогда включам резюк mute на 0,2 секунды
if(KEY_ch_plys_activity){digitalWrite(ch_plys, HIGH); delay(200);digitalWrite(ch_plys, LOW); }//если ch_plys------
if(KEY_ch_minus_activity){digitalWrite(ch_minus, HIGH); delay(200);digitalWrite(ch_minus, LOW); }//если ch_minus -----
if(KEY_mode_activity){digitalWrite(mode, HIGH); delay(200);digitalWrite(mode, LOW); }//если mode ------
}



knopka_time=0;KEY_mute_activity=0;KEY_ch_plys_acti vity=0;KEY_ch_minus_activity=0;KEY_mode_activity=0 ;status_zumer=0;zumer_activity=0;kruiz_regim=0;} //сбрасывае все щетчики и таймеры и ждем следуещего нажатия

}

Виктор1984 04.09.2023 15:16

Вложений: 1
Или меняем кнопочки.

Виктор1984 04.09.2023 15:17

Вроде всё.


Текущее время: 10:47. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод:
zCarot
Автодиагностика и автосканеры.