ブログ

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

  • Hello world!

    WordPress へようこそ。こちらは最初の投稿です。編集または削除し、コンテンツ作成を始めてください。