Цитата:
Сообщение от T_r_D
И если не сложно объясните мне как при помощи ардуины OBD II запросы слать и принимать ответы.
|
Для тех кому лень читать WIKI (а там всё очень подробно описано), вот пример как запрашивать скорость автомобиля по OBDII
Код:
#include <mcp_can.h>
#include <SPI.h>
INT32U canId = 0x000;
unsigned char len = 0;
unsigned char buf[8];
char str[20];
boolean IsSend = false;
unsigned long IsSend_millis = 0;
unsigned char vspeed[8] = {2, 1, 13, 0, 0, 0, 0, 0};
unsigned char count = 0;
MCP_CAN CAN0(10);
void setup()
{
Serial.begin(9600);
START_INIT:
if(CAN0.begin(CAN_500KBPS) == CAN_OK)
{
Serial.println("CAN BUS Shield init ok!");
}
else
{
Serial.println("CAN BUS Shield init fail");
Serial.println("Init CAN BUS Shield again");
delay(100);
goto START_INIT;
}
pinMode(18, INPUT);
}
void loop()
{
if(!IsSend)
{
CAN0.sendMsgBuf(0x7DF, 0, 8, vspeed);
IsSend = true;
IsSend_millis = millis();
}
if(!digitalRead(18))
{
CAN0.readMsgBuf(&len, buf);
canId = CAN0.getCanId();
if( (canId == 0x7E8) && (buf[0] == 3) && (buf[1] == 0x41) && (buf[2] == 0xD))
{
Serial.println(buf[3]);
IsSend_millis = millis()-2500;
Serial.print("Speed: ");
Serial.println(buf[3]);
}
}
if( IsSend )
{
if( IsSend_millis + 3000 < millis() )
{
Serial.print("----");
IsSend = false;
IsSend_millis = millis();
}
}
}
Скетч посылает запросы раз в три секунды, пока не придёт первый ответ. После этого посылается два запроса в секунду.
Только номера пинов надо задать свои.