初投稿です。
Arduino nano とcanモジュールmcp2515を使って簡単なcan通信を試しました。とりあえず簡単な送受信だけ。

arduino nano + mcp2515を2セット用意し送信側受信側としてます。
配線は以下の通り送受信のセットともに同じ。CANの2本はCAN_H同士、CAN_L同士繋ぐ

送信側スケッチ
#include <SPI.h>
#include <mcp_can.h>
#define CAN_CS_PIN 10
MCP_CAN CAN(CAN_CS_PIN);
void setup() {
Serial.begin(9600);
while (CAN_OK != CAN.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ)) {
Serial.println("CAN BUS Init Failed");
delay(100);
}
CAN.setMode(MCP_NORMAL);
Serial.println("CAN BUS Init OK!");
}
void loop() {
byte data[8] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
CAN.sendMsgBuf(0x100, 0, 8, data);
Serial.println("Sent CAN Message");
delay(1000);
}
受信側スケッチ
#include <SPI.h>
#include <mcp_can.h>
#define CAN_CS_PIN 10
MCP_CAN CAN(CAN_CS_PIN);
void setup() {
Serial.begin(9600);
while (CAN_OK != CAN.begin(MCP_ANY, CAN_500KBPS, MCP_8MHZ)) {
Serial.println("CAN BUS Init Failed");
delay(100);
}
CAN.setMode(MCP_NORMAL);
Serial.println("CAN BUS Init OK!");
}
void loop() {
unsigned long rxId;
byte len = 0;
byte buf[8];
if (CAN.checkReceive() == CAN_MSGAVAIL) {
CAN.readMsgBuf(&rxId, &len, buf);
Serial.print("CAN ID: 0x");
Serial.print(rxId, HEX);
Serial.print(" Data: ");
for (byte i = 0; i < len; i++) {
Serial.print(buf[i], HEX);
Serial.print(" ");
}
Serial.println();
}
}
ちなみスケッチはchatgptに作ってもらいました。setmodeの行が入ってなかっていないせいで最初動きませんでしたが、そこを修正する以外他は何もいじらず動いています。