Показать сообщение отдельно
Старый 12.06.2017, 22:52   #790
sergbb
Старший Пользователь
 
Аватар для sergbb
 
Регистрация: 07.01.2008
Город: харьков
Регион: Украина
Машина: ваз-2108(1,1) , Део\Ланос 1.5 и Hunday\Solaris 1,4
Сообщений: 176
sergbb is on a distinguished road
По умолчанию

Таки сборка от 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.
sergbb вне форума   Ответить с цитированием