Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

M5stack + COMMU ModuleでCAN通信する その1:送信側

実際のところ

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

const int SPI_CS_PIN = 12;
MCP_CAN CAN(SPI_CS_PIN);

void setup() {
  M5.begin();
  M5.Power.begin();
  
  while (CAN_OK != CAN.begin(CAN_500KBPS)) {
    M5.Lcd.println("CAN BUS init failed. Retrying...");
    delay(100);
  }
  M5.Lcd.println("");
}

void loop() {
  unsigned char stmp[8] = {0, 1, 2, 3, 4, 5, 6, 7};
  CAN.sendMsgBuf(0x00, 0, 8, stmp);
  M5.Lcd.println("Sent msg");
  delay(1000);
}

通信レート

500Kbpsでは早すぎるケースはあるかと思います
その場合、マクロで値を別途
mcp_can.hの更に参照先mcp_can_dfs.hの中で定義されています

#define CAN_5KBPS    1
#define CAN_10KBPS   2
#define CAN_20KBPS   3
#define CAN_31K25BPS 4
#define CAN_33KBPS   5
#define CAN_40KBPS   6
#define CAN_50KBPS   7
#define CAN_80KBPS   8
#define CAN_100KBPS  9
#define CAN_125KBPS  10
#define CAN_200KBPS  11
#define CAN_250KBPS  12
#define CAN_500KBPS  13
#define CAN_1000KBPS 14

参考もと

docs.m5stack.com