Hello. I have can network 500kbps and standart id's. I need change data in one packet and send it to network. I use two mcp2515 boards and one arduino nano. I use the example dual-can, changed it to my job. So i have ecu1->mcp2515 can0-> mcp2515 can1->ecu2.
Here is my code:
#include <mcp_can.h>
#include <SPI.h>
char msgString[128];
char proba[128];
unsigned long rxId;
byte len;
//byte rxBuf[8];
unsigned char rxBuf[8];
byte txBuf0[] = {0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55};
byte txBuf1[] = {0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA};
byte ya[] = {0x06,0x40,0x26,0x08,0x26,0x08,0xa6,0x08};
byte ya2[] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
MCP_CAN CAN0(10); // CAN0 interface usins CS on digital pin 10
MCP_CAN CAN1(9); // CAN1 interface using CS on digital pin 9
void setup()
{
Serial.begin(115200);
// init CAN0 bus, baudrate: 250k@16MHz
if(CAN0.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK){
Serial.print("CAN0: Init OK!\r\n");
CAN0.setMode(MCP_NORMAL);
} else Serial.print("CAN0: Init Fail!!!\r\n");
// init CAN1 bus, baudrate: 250k@16MHz
if(CAN1.begin(MCP_ANY, CAN_500KBPS, MCP_16MHZ) == CAN_OK){
Serial.print("CAN1: Init OK!\r\n");
CAN1.setMode(MCP_NORMAL);
} else Serial.print("CAN1: Init Fail!!!\r\n");
SPI.setClockDivider(SPI_CLOCK_DIV2); // Set SPI to run at 8MHz (16MHz / 2 = 8 MHz)
}
void loop(){
if(!digitalRead(2)){ // If pin 2 is low, read CAN0 receive buffer
CAN0.readMsgBuf(&rxId,0, &len, rxBuf);
if ((rxBuf[0] == 0x02)&&(rxId==0x212))
// if (rxId==0x212)
{
sprintf(msgString, "stdID: 0x%.3X DLC: %1d Data: %.2X %.2X %.2X %.2X %.2X %.2X %.2X %.2X\n\r", rxId , len, rxBuf[0], rxBuf[1], rxBuf[2], rxBuf[3], rxBuf[4], rxBuf[5], rxBuf[6], rxBuf[7]);
CAN1.sendMsgBuf(rxId, 0,len, ya);
Serial.println(msgString);
//sprintf(proba,rx
Serial.println(rxBuf[2],HEX);
Serial.println("ya");
}
else
CAN1.sendMsgBuf(rxId,0, len, rxBuf);
if(!digitalRead(3)){ // If pin 3 is low, read CAN1 receive buffer
CAN1.readMsgBuf(&rxId,0, &len, rxBuf); // Read data: len = data length, buf = data byte(s)
CAN0.sendMsgBuf(rxId,0, len, rxBuf); // Immediately send message out CAN0 interface
}}
}
So i can read packets from can1 and can0, but they does not transfer to each other. Can some body say why? Do i need to change somewhere pin 2 or 3 to high?