Старший Пользователь
Регистрация: 07.01.2008
Город: харьков
Регион: Украина
Машина: ваз-2108(1,1) , Део\Ланос 1.5 и Hunday\Solaris 1,4
Сообщений: 176
|
Таки сборка от Lexx09 рулит.
Все починилось , как по мановению волшебной палочки. ))
Есть еще один моментик , пытаюсь объединить этот скетч со скетчем управления магнитолой через цифровой потенциометр .
Весь мозг сломал с этим скетчевым слиянием, вообщем нужна помощь !
Код:
// версия для использования кнопок руля на хундае для управления круизом(MCP4101) и рионером(MCP4150)
// добавленные функции закоментированы //* (с звездочкой)
#include <SPI.h>
// Коды имеющихся на руле кнопок
const int VOL_UP = 1;
const int VOL_DN = 2;
const int PREV_TR = 3;
const int NEXT_TR = 4;
const int MODE = 5;
const int MUTE = 6;
const int DOP_1 = 7; //*
const int DOP_2 = 8; //*
const int DOP_3 = 9; //*
const int DOP_4 = 10; //*CRUSE
const int DOP_5 = 11; //*SET-
const int DOP_6 = 12; //*REST+
int CS1 = 8; //* CS1 магнитола (2й контакт)
int CS2 = 9; //* СS2 круиз через mcp4101(2й-SW)
int CS3 = 10;//* CS3 магнитола через mcp4105(1й контакт)
int RES_PIN = A5; //* аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки
int i = 0;
int prevButton = 0;
void setup()
{
//запускаем и настраиваем SPI для двух устройств
pinMode (CS2, OUTPUT); //* на круиз
pinMode (CS3, OUTPUT); //* на магнитолу
pinMode (CS1, INPUT); //* на магнитолу 2й контакт
delay(50);
SPI.begin();
delay(50);
SPI.transfer(0); // команда
SPI.transfer(0); // значение
//настройка входа кнопок
pinMode(RES_PIN, INPUT);
delay(100);
Serial.begin(115200); //Конфигурация сом порта
}
//------------- Фильтр нажатия кнопок (сопротивление = код кнопки ) ----------
int getR() // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0
{
// читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине
int r=analogRead(RES_PIN);
//Serial.println(RES_PIN);проверка нажатия кнопок , для настройки фильтра
// Ищем, какая кнопка соответствует этому сопротивлению.
// Данные значения сопротивлений подходят для Хундай солярис , для других автомобилей числа будут другие.
if (r >= 320 && r <= 340) return (VOL_UP);
if (r >= 410 && r <= 440) return (VOL_DN);
if (r >= 90 && r <= 120) return (PREV_TR);
if (r >= 30 && r <= 50) return (NEXT_TR);
if (r >= 170 && r <= 190) return (MODE);
if (r >= 240 && r <= 260) return (MUTE);
if (r >= 380 && r <= 400) return (DOP_1); //*
if (r >= 350 && r <= 370) return (DOP_2); //*
if (r >= 280 && r <= 300) return (DOP_3); //*
if (r >= 220 && r <= 240) return (DOP_4); //*
if (r >= 200 && r <= 220) return (DOP_5); //*
if (r >= 120 && r <= 150) return (DOP_6); //*
// если ни одна из кнопок не нажата, возвращаем 0
return (0);
}
//---------- ОСНОВНОЙ ЦИКЛ ------------------
void loop() // смотрим код кнопки ,если поменялся и нет дребезга выполняем действие , до прихода нового кода кнопки .
{
int currButton = getR(); // заносим в переменную currButton код нажатой кнопки
if (currButton != prevButton) { // если значение поменялось с прошлого раза
delay(10);
currButton = getR(); // ждем 10ms и читаем еще раз, чтобы исключить "дребезг" кнопки
if (currButton != prevButton) { // если код кнопки точно поменялся с прошлого раза
//Serial.println(currButton); проверка фильтра кнопок
prevButton = currButton; // сохраняем новое значение в переменную prevButton
// Выставляем сопротивление на потенциометре, тем самым посылаем команду на магнитолу или ...
// Значения сопротивлений даны для магнитолы Pioneer и Круиза Solarisa? для магнитол других марок числа будут другие.
switch (currButton)
{
case VOL_UP: Serial.println("VOL_UP-1");digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(174); digitalWrite(CS3, HIGH);break; // 16k //21
case VOL_DN: Serial.println("VOL_DN-2");digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(133); digitalWrite(CS3, HIGH);break; // 24k //31
case PREV_TR: pinMode(CS1, OUTPUT);digitalWrite(CS3, LOW);Serial.println("PREV_TR-3");digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(202); digitalWrite(CS3, HIGH);break; // 11k //202
case NEXT_TR: pinMode(CS1, OUTPUT);digitalWrite(CS3, LOW);Serial.println("NEXT_TR-4");digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(217); digitalWrite(CS3, HIGH);break; // 8k //217
case MODE: Serial.println("MODE-5");digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(249); digitalWrite(CS3, HIGH);break; // 1.6k//249
case MUTE: Serial.println("MUTE-6");digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(242); digitalWrite(CS3, HIGH);break; // 3k //242
case DOP_1: Serial.println("DOP_1-7");digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(153); digitalWrite(CS2, HIGH);break; // -- //153
case DOP_2: Serial.println("DOP_2-8");digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(153); digitalWrite(CS2, HIGH);break; // -- //153
case DOP_3: Serial.println("DOP_3-9"); digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(153); digitalWrite(CS2, HIGH);break; // -- //153
case DOP_4: Serial.println("DOP_4-10");digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(215); digitalWrite(CS2, HIGH);break; //+3.9k//196
case DOP_5: Serial.println("DOP_5-11");digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(15); digitalWrite(CS2, HIGH);break; //-910 //46
case DOP_6: Serial.println("DOP_6-12");digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(3); digitalWrite(CS2, HIGH);break; //-220 //15
default: pinMode(CS1, INPUT);Serial.println("stop");digitalWrite(CS2, LOW); SPI.transfer(B00010001); SPI.transfer(153); digitalWrite(CS2, HIGH); digitalWrite(CS3, LOW); SPI.transfer(B00010001); SPI.transfer(255); digitalWrite(CS3, HIGH); break; // 0k
}
}
}
delay(5);
}
__________________
Intel i3/2G/SSD-250Gb/IZUMI 8"toch/iCar/ATX-12v/СитиГид
Хочу электронную приборку
Восьмерочка
Ланос
Акцент
Последний раз редактировалось sergbb; 25.06.2017 в 21:56.
|