2015-01-26 4 views
0

나는 내 난방 시스템에 CAN-BUS 쉴드를 연결 했으므로 버스에서 데이터를 얻고 있습니다.
이것이 작동 중입니다 (제 생각 엔). 그러나 원하는 데이터를 가져올 수 없습니다. 첨부 된 사진을 참조하십시오.Arduino & SeeedStudio CAN-BUS 쉴드

CAN-open data

CAN-Bus Log

열 수와 실행의와 노드 80 (0 × 50의 16 진수)해야한다고 말한다. 그러나 노드 80의 데이터 만 표시하는 필터를 추가하면 데이터가 표시되지 않습니다.
또한 필터를 사용하지 않으면 모듈에서 데이터를 가져올 수 없습니다.

또한 1 초마다 하트 비트를 보냈다 고합니다. 이 노드는 노드 ID 1862 (0X746 16 진수)에서 찾았습니다.

모듈에서 데이터를 읽으려면 어떻게해야합니까?

코드 실드에서 읽기 :

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

INT32U canId = 0x000; 
MCP_CAN CAN(9); 

unsigned char len = 0; 
unsigned char buf[11]; 
char str[40]; 


void setup() 
{ 
    Serial.begin(38400); 

START_INIT: 

    if(CAN_OK == CAN.begin(CAN_125KBPS)) 
    { 
     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; 
    } 
} 


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

       Serial.print("<"); 
       Serial.print(canId); 
       for(int i = 0; i<len; i++) 
       { 
        Serial.print(","); 
        Serial.print(buf[i]); 
       } 
      Serial.print(">"); 
      Serial.println(); 
     } 
} 
+0

라벨과 'goto'에는 해당 위치가 있습니다. 루프 대신에 그것들을 사용하는 것은 그런 장소가 아닙니다. –

+0

죄송합니다, 요아킴 나는 당신이 무슨 말을하고 있는지 잘 모르겠습니다! –

+0

질문과 관련이 없지만 루프를 구현하는 방법으로 'goto'를 사용하지 마십시오. –

답변

0

코드는 정확하지만 mcp_can 라이브러리와 호환 방패 하나의 가능한 문제가 있습니다. 원래 Seed-Studio 방패는 16 MHz 수정을 사용하지만 시장에 다른 호환 모듈이 있으며 16 MHz 크리스탈을 사용하는 것은 아닙니다. 대신 일부는 8 Mhz를 사용합니다.

따라서 먼저 사용하려는 CAN 모듈을 확인하십시오. 그리고 8 MHz에서 실행될 경우 초기화에서 속도 설정을 조정해야합니다.

... 
    if(CAN_OK == CAN.begin(CAN_250KBPS)) 
... 

당신이 선택하면 CAN HI :이 경우는 1백25킬로바이트에서 실행되는 CAN 버스에서 CAN 메시지를 읽을 필요가/당신이 초기화에을 CAN.begin (CAN_250KBPS)을 설정해야이야 및 CAN LO가 올바르게 연결되었는지 확인하십시오. 이것은 또 다른 문제 일 수 있습니다. SPI_CS_PIN이 올바르게 설정되어 있는지 확인하십시오 (스케치가 핀 9에서 CS 임).

그런 다음 버스에서 CAN 메시지를 보내어 연결/속도/CS를 점검해야합니다. 메시지는 CAN 버스 스니퍼가 처리해야합니다.