PCCar.ru - Ваш автомобильный компьютер

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   iCarDS (http://pccar.ru/forumdisplay.php?f=121)
-   -   iCarDS + Arduino = iCarDuino (http://pccar.ru/showthread.php?t=16718)

denis239tp 05.09.2016 21:24

Ребята, здравствуйте! Очень нужна Ваша помощь! Дорос и я до ардуино... Все подключается, все работает, скетчи правятся под мои нужды. В общем все замечательно! Но, нужды растут, и вот уже скетч, который в этой теме и плагин не позволяют мне все реализовать... Что именно мне надо: мне нужно чтоб ардуино могла отсылать данные других датчиков. У меня уаз-патриот переоборудованный на пневмоподвеску. В каждом колесе у меня своя подушка, и на ней свой датчик давления. То есть 4 датчика давления. Мне нужно их показания постоянно видеть перед глазами, и в случае, если давление в подушках упадет меньше 0,4 атмосфера, включать релейным блоком подкачку до этих 0,4 атмосферы. Причем эту функцию мне нужно реализовать на уровне ардуины, то есть и без компьтера она должна подкачать подушки, но на комп данные тоже должна отправить. Соответственно в айкаре нужно сделать соответствующие датчики, которые мне будут показания выводить в атмосферах. Датчики будут питаться от ардуины, 3,3 вольта. На выходе будет напряжение примерно с 1 до 2 вольт с дискретностью 0,025 вольт.
Кроме того, у меня на машине 2 бака по 40 литров. Я бы хотел, чтоб ардуино высчитывала общее количество топлива, показывала в датчике в айкаре мне эту циферку, причем икар должен думать, что эти данные он получает с чек-инжине! То есть плагин чека должен брать эти данные с ардуины, а не с odb разъема, так как в odb эти данные у меня не передаются. ну и обсчитывать должен их как "родные". Скетч нужный я думаю смогу написать, но вот плагин айкардуино я поправить не смогу... Помогите пожалуйста это реализовать? Заранее примного благодарен!

sergbb 07.09.2016 00:55

Спасибо.
Погляжу как енто можно применить

sergbb 07.09.2016 01:06

Цитата:

Сообщение от denis239tp (Сообщение 368507)
..То есть плагин чека должен брать эти данные с ардуины, а не с odb разъема,..

Что то мне подсказывает что задачка не посильная.
- 2 плагина смотрят один компорт (ардуинки)одновременно.
- и плагин чекэджина смотрит 2 ком порта (ардуины и обд ).

denis239tp 10.10.2016 21:41

Мда... И Берснев совсем пропал. Только он, наверное, сможет помочь

sergbb 22.02.2017 21:33

Доброго.
Подскажите,кто знает,буду премного благодарен.

Как на это действие
Цитата:

Сообщение от Bersenev (Сообщение 209144)
...
- Нажимаем на кнопку ЭКРАН или ДИНАМИЧЕСКИЕ КНОПКИ, и выбираем действие для текущей кнопки ArDuino.

назначить несколько действий
котрые выполняются по очерди.
Одно нажатие одно действе.

sergbb 06.06.2017 02:11

Как то тихо в теме.

Столкнулся с проблемой работы плагина в 64х битной 10й Винде.
Симптомы как тут
При запуске iCarDS выскакивает окно "....приложение будет закрыто "и потом снова запускается iCar и дальше по кругу.

Так и не понял победили проблему или нет ???

Lexx09 06.06.2017 12:16

Какой iCarDS стоит? Оригинальный или моя сборка? Если сборка - какой версии?

Возможная причина пофиксена в билде 15 для двух плагинов.

sergbb 06.06.2017 13:40

Цитата:

Сообщение от Lexx09 (Сообщение 388472)
Какой iCarDS стоит? Оригинальный или моя сборка? Если сборка - какой версии?..

оригинальный iCarDS 1.7.0.60

Цитата:

Сообщение от Lexx09 (Сообщение 388472)
...Возможная причина пофиксена в билде 15 для двух плагинов.

Спасибо попробую


к Lexx09
Ха
Что бы попробовать наверно надо купить сборку !?

sergbb 11.06.2017 00:52

Похоже косяк глубже.
Падает при включении любого плагина.
Переустановил iCar не помогло .
Не ужели из за винды , стоит домашняя(стоковая)

В логе ошибок на лист А4 ((

sergbb 12.06.2017 22:52

Таки сборка от Lexx09 рулит.
Все починилось , как по мановению волшебной палочки. ))

Есть еще один моментик , пытаюсь объединить этот скетч со скетчем управления магнитолой через цифровой потенциометр .
Весь мозг сломал с этим скетчевым слиянием, вообщем нужна помощь !


Код:

// версия для использования кнопок руля на хундае для управления круизом(MCP4101) и рионером(MCP4150)
// добавленные функции закоментированы //* (с звездочкой)

#include

// Коды имеющихся на руле кнопок
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);
}



Часовой пояс GMT +4, время: 18:32.

Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot