2017-11-19 3 views
1

Arduino Pro Minis 및 MCP2515 카드를 사용하여 여러 노드의 CAN 네트워크를 설정하고 싶습니다. 그러나 나는 Receive가 작동하도록 할 수 없다.2 개의 Arduino/MCP2515 노드가있는 CAN 버스 네트워크가 작동합니까?

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

long unsigned int rxId; 
unsigned char  len = 0; 
unsigned char  rxBuf[8]; 
char    msgString[128]; 
#define CAN0_INT 2     // Set INT to pin 2 
MCP_CAN   CAN0(10);   // Set CS to pin 10 

void setup() { 
    Serial.begin(115200);  
    // Initialize MCP2515 running at 8MHz with a baudrate of 125kb/s 
    // and the masks and filters disabled. 
    while (CAN_OK != CAN0.begin(MCP_ANY, CAN_125KBPS, MCP_8MHZ)) { 
     Serial.println("CAN BUS Module Failed to Initialize."); 
    } 
    Serial.println("MCP2515 Initialized Successfully!"); 
    CAN0.setMode(MCP_NORMAL); 
    pinMode(CAN0_INT, INPUT);  // Configuring pin for /INT input 
} 

void loop() { 
    if(!digitalRead(CAN0_INT)) { // If CAN0_INT is low, read receive buffer 
     CAN0.readMsgBuf(&rxId, &len, rxBuf); // Read data: len = data length, buf = data byte(s) 

     if((rxId & 0x80000000) == 0x80000000) // Is ID standard (11 bits) or extended (29 bits)? 
      sprintf(msgString, "Extended ID: 0x%.8lX DLC: %1d Data:", (rxId & 0x1FFFFFFF), len); 
     else 
      sprintf(msgString, "Standard ID: 0x%.3lX DLC: %1d Data:", rxId, len); 
     Serial.print(msgString); 

     if((rxId & 0x40000000) == 0x40000000) { // Is message a remote request frame? 
      sprintf(msgString, " REMOTE REQUEST FRAME"); 
      Serial.print(msgString); 
     } else { 
      for(byte i = 0; i<len; i++) { 
       sprintf(msgString, " 0x%.2X", rxBuf[i]); 
       Serial.print(msgString); 
      } 
     }   
     Serial.println(); 
    } 
} 

그러나, 나는 나가 모든 오류 메시지는이 포함됩니다 :

Entering Configuration Mode Failure 

내가 여기 실종 무엇입니까?

+0

구체적으로 말하자면 "CAN 네트워크"란 무엇입니까? 일반적인 사용법은 캠퍼스 지역 네트워크를 의미하지만, 나는 그것이 통제 된 액세스 네트워크를 의미한다고 들었지만, 귀하의 질문에 이해가 가지 않는 것 같습니다. –

+0

"위키 백과에서 CAN (Controller Area Network) 버스는 호스트 컴퓨터없이 차량 내에서 마이크로 컨트롤러와 장치가 서로 통신 할 수 있도록 설계된 차량 버스 표준입니다. 이러한 장치는 ECU (Electronic Control Unit)라고도 할 수 있습니다. 기본적으로 CAN 버스는 차량 내에서 연결된 브로드 캐스트 기반 ECU로, 브로드 캐스트를 기반으로 각 ECU와 통신합니다. 모든 ECU는 모든 브로드 캐스트를 가로 채지 만, 그것에 반응하라. " (http://www.instructables.com/id/CAN-Bus-Sniffing-and-Broadcasting-with-Arduino/) –

+0

OK. 제 요점은 여러 의미가있을 때 좀 더 구체적으로 설명해야한다는 것입니다. 질문을 수정하여보다 명확하게 작성해야합니다. –

답변

0

회로가 작동합니다. 2- 노드 CAN 버스가 통신 중입니다.
나는이 site을 발견하고 변화의 몇 가지를 만들어 :

  1. 내 아두 이노 ProMini MISI, MISO 핀이의 SI 정렬되지 않은 MCP2515s에 핀 SO.
  2. CAN_BUS_Shield 라이브러리를 사용했습니다.
관련 문제