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)

lti1 13.10.2015 23:00

Цитата:

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

Не совсем понятно, что Вы имеете ввиду, может это:
if (bitRead(buf[5], 6) == 1)

T_r_D 15.10.2015 00:46

Цитата:

Сообщение от lti1 (Сообщение 340373)
Не совсем понятно, что Вы имеете ввиду, может это:
if (bitRead(buf[5], 6) == 1)

ВО СПАСИБО!
Именно это и имел в виду!

и тогда вопрос в догонку.
Это один бит считать, а считать скажем два или три и получить число?
Ну тоесть в моём случае вытащить значение меню.
Есть такой же простой способ?

lti1 15.10.2015 10:14

Цитата:

Сообщение от T_r_D (Сообщение 340460)
ВО СПАСИБО!
Именно это и имел в виду!

и тогда вопрос в догонку.
Это один бит считать, а считать скажем два или три и получить число?
Ну тоесть в моём случае вытащить значение меню.
Есть такой же простой способ?

Один из вариантов так:
PHP код:

int per;

bitWrite(per0bitRead(buf[5], 5));
bitWrite(per1bitRead(buf[5], 6));
bitWrite(per2bitRead(buf[5], 7)); 


xmetal 15.10.2015 12:12

Есть способ проще. Любые биты или группу бит можно проверить битовой маской: if ((buf[5] & 0x70) >> 4 == 7) - проверяем 5,6,7 биты, если они все в 1, то условие срабатывает.

Для наглядности маску можно написать в битовом виде: if ((buf[5] & B01110000) >> 4 == 7)

T_r_D 16.10.2015 01:28

Вот так
if (bitRead(buf[5], 6) == 1)
и так
if (buf[5], 6 == 1)
Hе работает!

Хорошая была попытка.
Ещё есть идеи?

А, стоп! Заработало. Я не учёл что оно с право налево идёт.

За одно походу нашлась средняя скорость.

И в догонку.
Ардуина с шилдом тормозят.
Похоже что надо поставить апаратный фильтр в шилде, а то очень много сообщений сыпется.
Как это реализовать?

T_r_D 17.10.2015 01:25

Всё, с показаниями бортового компа полностью закончено.
Читаю все параметры что есть на экране!
Speed
RPM
Instant fuel consumption /100Km
Fuel consumption /100Km
Trip
Average Speed
Themperature
Odometr
Run on current fuel level

Средняя скорость была в 0B6 байт 0.
Целиком байт это скорость без каких либо конвертаций.

Что осталось:
ну раз уж сдублировали с основного дисплея одометр и скорость, то надо и всё сдублировать :)
А осталось там
1 Уровень топлива
2 Температура охлаждайки
3 Остаток пробега до ТО
4 Уровень масла
5 Ограничитель и круиз
6 Трип

Ну и доделать сообщения в меню настройки, докопать кнопки на магнитоле.
Время к сожалению очень мало на это всё.
И нужно какую нить программу анализа данных.
Я вижу это так:

в первом столбце все ID найденных сообщение
во втором сами посылки
если было какое изменение, то перенос старой посылки в третий столбец

Может кто знает такую готовую прогу или готов написать?
А то в ручную отлавливать каждое сообщение очень геморно.

Ну и желательно чтоб прога могла с логом работать.
Тоесть данные устаканились- снял лог экрана проги, потом его загрузил и сравнил с новыми данными.
Это актуально для таких затяжных параметров как прогрев двигателя и топливо.

lti1 17.10.2015 07:41

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

Сообщение от T_r_D (Сообщение 340649)
И нужно какую нить программу анализа данных.
Я вижу это так:

в первом столбце все ID найденных сообщение
во втором сами посылки
если было какое изменение, то перенос старой посылки в третий столбец

Может кто знает такую готовую прогу или готов написать?
А то в ручную отлавливать каждое сообщение очень геморно.

Ну и желательно чтоб прога могла с логом работать.
Тоесть данные устаканились- снял лог экрана проги, потом его загрузил и сравнил с новыми данными.
Это актуально для таких затяжных параметров как прогрев двигателя и топливо.

http://techtinker.co.za/index.php/11...-software-free

T_r_D 17.10.2015 12:05

Цитата:

Сообщение от lti1 (Сообщение 340652)

Вот спасибо! А то уже заручился руками файлы логов перекапывать.
Так веселее пойдёт.

lti1 17.10.2015 14:17

Цитата:

Сообщение от T_r_D (Сообщение 340655)
Вот спасибо! А то уже заручился руками файлы логов перекапывать.
Так веселее пойдёт.

Не за что!
Только мне родной скетч не понравился, я пользовался во этим:
PHP код:

#include <mcp_can.h>
#include <SPI.h>

long unsigned int rxId;
unsigned char len 0;
unsigned char rxBuf[8];

MCP_CAN CAN0(10);

void setup()
{
  
Serial.begin(38400);
  
CAN0.begin(CAN_125KBPS); // скорость CAN шины
  
pinMode(2INPUT); 
}

void loop()
{
    if(!
digitalRead(2))                         
    {
      
CAN0.readMsgBuf(&lenrxBuf);              
      
rxId CAN0.getCanId();                    

      {
      
Serial.print("<"); 
      
Serial.print(rxId);
       for(
int i 0i<leni++)
         {
          
Serial.print(", ");
          if(
rxBuf[i] < 0x10Serial.print("0");
          
Serial.print(rxBuf[i], HEX);
         }
          
Serial.print(">");
          
Serial.println();      
       }
    }



T_r_D 18.10.2015 01:53

Цитата:

Сообщение от lti1 (Сообщение 340659)
Не за что!
Только мне родной скетч не понравился, я пользовался во этим:

Да это не особо важно как писать скетч, главное чтоб прога обрабатывала.

Ну и сообщений там не очень много идёт, так что вид не важен- чисто эстетика.


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

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