Arduino nano + mcp2515でcan通信する

初投稿です。

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の行が入ってなかっていないせいで最初動きませんでしたが、そこを修正する以外他は何もいじらず動いています。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です