2015-05-24 2 views
1

Я попытался сделать ecuRequest, который отправляет PID в сеть can, а затем получает сообщение. Я получил эту идею из демонстрационного эскиза в этой статье http://skpang.co.uk/blog/archives/55. Я попытался имитировать ecu_req, используя библиотеку seeedstudio, найденную здесь https://github.com/Seeed-Studio/CAN_BUS_Shield. Ниже я до сих пор. Буфер заполняется, когда я подключаю его к своей машине, но, похоже, это не правильные данные.SeeedStudio CAN bus shield arduino ECU_Request

char MCP_CAN::pidRequest(unsigned char pid, INT8U buf,float& engineData) 
{ 
INT8U len = 8; 
float engine_data; 
uint8_t data[8]; 
data[0] = 0x02; 
data[1] = 0x01; 
data[2] = 0x0c; 
data[3] = 0x00; 
data[4] = 0x00; 
data[5] = 0x00; 
data[6] = 0x00; 
data[7] = 0x00; 
//uint8_t *ptr = data; 

mcp2515_modifyRegister(MCP_CANCTRL, (1<<7)|(1<<6)|(1<<5), 0); //change  mode_mask if doesnt work 

if(sendMsgBuf(0x7DF, 1, 0, 8, data)==CAN_OK) { 
    delay(100); 


if(checkReceive()==CAN_MSGAVAIL) { 

    if (readMsgBuf(&len, buf)==CAN_OK) { 
     //engine_data = ((buf[3]*256)+buf[4])/4; 
     Serial.println(buf[0]); 
     Serial.println(buf[1]); 
     Serial.println(buf[2]); 
     Serial.println(buf[3]); 
     Serial.println(buf[4]); 
     Serial.println(buf[5]); 
     Serial.println(buf[6]); 
     Serial.println(buf[7]);   
         return 0; 
    } 
     else{ 
     return 1; 
     } 
} 
    else{ 
    return 2; 
    } 
} 
else{ 
return 3; 
} 

ответ

0

Вы проверяете только одно сообщение, но на автобусе есть много разных сообщений, независимо от того, что вы отправляете.

Вы должны либо прочитать каждое сообщение, пока не получите тот, у которого есть идентификатор CAN (вероятно, CAN ID 0x7e8), или установите соответствующий фильтр/маску в микросхеме MCP, поэтому он отправит вам только соответствующие сообщения.

Смежные вопросы