Тема: CITROEN-ARDUINO
Показать сообщение отдельно
Старый 02.11.2015, 15:17   #108
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Короче сделал вот так:
#include <SPI.h>
#include "mcp_can.h"
MCP_CAN CAN(10);
unsigned char len = 0;
unsigned char buf[8];
INT32U canId = 0x000; // идентификаторы могут быть 11-ти или 29-битные

//RPM SPD ILPK LPK AVG_SPD Trp Tmp
// /100 /10 /10 делить на
int OUTLINES[] = {0,0,0,0,0,0,0};

void setup()
{
Serial.begin(115200);
pinMode(9, INPUT);
delay(10000);

START_INIT:
if(CAN_OK == CAN.begin(CAN_125KBPS,MCP_8MHz))
{Serial.println("Init OK!");}
else
{Serial.println("Init fail");delay(100);goto START_INIT;}
}


void loop()
{

if(CAN_MSGAVAIL == CAN.checkReceive())
{
CAN.readMsgBuf(&len, buf);
canId = CAN.getCanId();

//_________________________________TRIP_____________ ______________________
if(canId == 182) //0B6
{
OUTLINES[0] = (int)buf[0] << 5 | buf[1] >> 3; //Обороты
OUTLINES[1] = ((int)buf[2] << 8 | buf[3]); //скорость / 100
}

if(canId == 545) //221
{
OUTLINES[2] = (int)buf[1] << 8 | buf[2]; //моментальный расход / 10, если -1 то показаний нет
//ARCFL = (int)buf[3] << 8 | buf[4]; //Километры на остатке топлива
}

if(canId == 673) //0B6
{
OUTLINES[3] = (int)buf[3] << 8 | buf [4]; //Расход на 100км /10
OUTLINES[4] = buf[0]; //Средняя скорость
OUTLINES[5] = ((int)buf[1] << 8 | buf [2]); //Трип
}

if(canId == 246) //0F6
{
OUTLINES[6] = (buf[6] / 2) - 39; //Температура
//Odometr = ((unsigned long)buf[2] << 16 | (unsigned int)buf[3] << 8 | buf[4])/10; //Там есть десятые километра
}
}

__________________________________Выводим данные__________________________________
Serial.print("<TRIP|");
for(int i = 0; i < 7; i++)
{
Serial.print(OUTLINES[i]);
if (i != 6){Serial.print("|");}
}
Serial.println(">");
}

Это собственно всё что показывает борт комп не считая сообщений информационных.
Ну и то что закоменчено, то на верхнем дисплее и скорость с оборотами тоже.

Надо ещё поколдовать и сделать что если массив не менялся, то и данные выводить не надо.
T_r_D вне форума   Ответить с цитированием