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

PCCar.ru - Ваш автомобильный компьютер (http://pccar.ru/index.php)
-   Общение с машиной (http://pccar.ru/forumdisplay.php?f=14)
-   -   CITROEN-ARDUINO (http://pccar.ru/showthread.php?t=23275)

xmetal 10.10.2015 16:09

я бы так записал ((bite3<<8) + byte4) / 20 + 50. По одометру идей пока нет.

T_r_D 10.10.2015 16:52

По одометру скатаюсь на работу сегодня и обратно и посмотрим что покажет.

Там впереди самое сложное останется.
Найти расход на 100км (моментальный уже есть), передачу RDS сообщений от магнитолы и второй трип счётчик который на бортовике отображается.
В принципе мне больше ни чего и не надо.

Это позволит перенести все показания которые отображаются ща на бортовике в планшет не прибегая к загрузке основной шины ELM327.

xmetal 10.10.2015 17:27

Появились мысли по одометру. Это 3 байтное число. Показания округляются отбрасывая последнюю цифру, на самом деле там:
17 36 70 - 1123398
17 36 71 - 1123399
17 36 72 - 1123400
17 36 73 - 1123401
17 36 74 - 1123402
и тд

T_r_D 11.10.2015 12:38

Прокатился.
Вот что стало
17 38 174 112401

xmetal
так я изначально 3 байта давал имея в виду что это только одометр

Как это преобразование написать в коде-то?

lti1 11.10.2015 13:57

Цитата:

Сообщение от T_r_D (Сообщение 340105)
Прокатился.
Вот что стало
17 38 174 112401

xmetal
так я изначально 3 байта давал имея в виду что это только одометр

Как это преобразование написать в коде-то?

17 38 174 в Bin это 00010001 00100110 10101110
000100010010011010101110 в Dec 1124014
То есть, что бы получить фактический пробег нужно считать так:
((bite2<<16) + (bite1<<8) + byte0) / 10

xmetal 11.10.2015 14:20

Не забываем про приведение типов
unsigned long result = (((unsigned long)data[0] << 16) + ((unsigned int)data[1] << 8) + data[2])/10;

Код:

byte data[3] = {17,38,174};

void setup() {
  Serial.begin(115200);
}

void loop() {
  unsigned long result = (((unsigned long)data[0] << 16) + ((unsigned int)data[1] << 8) + data[2])/10;
  Serial.println(result);
  delay(1000);
}


T_r_D 11.10.2015 14:48

(unsigned long)data[0] << 16)
Вот оно что!
я писал
(int)buf[2] << 16 | (int)buf[3] << 8| buf[4]
и у меня выходила охинея
Просто данные не входили!
Во блин!

Зато пока искал причину- нашёл где расход на 100км не моментальный.
2A1 байты 3 и 4

Почти всё отискал :)
Осталось найти где данные от кнопок стрелочек магнитолы в режиме отличного от меню
и данные которые передаются текстом о названии радиостанции и данные которые она передаёт

lti1 11.10.2015 14:52

xmetal, собственно так и есть, как Вы выше писали.
T_r_D, int занимает 2 байта, а unsigned long 4 байта. У Вас получается 3, по этому и получалась охинея.

T_r_D 11.10.2015 15:16

Я уже осознал свою ошибку.

Народ- сильно не бейте! Я программированием занимался последний раз лет так 15 назад.

А по существу.
Я уже имею почти все данные кроме трипа который отображается на бортовике (не знаю нафига он мне) и нету текстовой инфы с магнитолы.
На остальное описание вроде есть, добавлю в скетч и посмотрю что получается (читать данные о CD и CD Changer), а так же вывод данных настроек (Menu).
Ещё там всякие Loud, TA, RDS и прочая шняга буковками выводится, но на это тоже вроде есть описание.
Ну и надо найти где прячут нажатие на стрелочки не в режиме Menu, а так же кнопки с 1 по 6.

Тоесть по сути я чисто для себя уже заменил TORQE. Нужно ещё сделать вольтметр или поискать передаётся ли эта инфа по шине.
Пока сидел в машине, то пришла в голову идея выкинуть нафиг блок климата, а кондеем управлять с планшета.

И тут кстати я подхожу к моменту когда нужно будет писать оболочку под это всё под андройд, а в этом я уж точно чайник!

весь список того что ща уже можно читать
Speed
RPM
Instant fuel consumption /100Km
Fuel consumption /100Km
Run on current fuel level
Odometr
Themperature (not water temp)
Steering while Scroll value
Steering while key
Radio key (частично)
Radio ON/OFF
Radio source
Radio band and frequency
Volume (выводится на секунду, нужно найти где всегда инфа есть)

Нашёл где трип прячется
2A1 байты 1 и 2

Пытался там же найти среднею скорость, но толи она не так же как всё выглядит, толи она просто не там.

T_r_D 13.10.2015 22:37

Народ, помогите с выдёргиванием инфы из
1E5 байта 5.
первые два
бита это показывает меню или нет и значение этого меню.
3 бит второе меню, 4 не используется, 5,6,7 значение второго меню.
Как в коде это воплотить?
Не могу не фига сообразить!
хотелось бы в виде
if (buf[5] >> 7 == 1)
без дополнительных переменных.
Как избавится от лишних данных в байте?


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

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