ArduinoでCAN通信を送信する時に使用するCAN.sendMsgBuf()関数について質問です。
この関数は戻り値が3通りあります。
"CAN_OK"(0) 成功した
"CAN_SENDMSGTIMEOUT"(6) タイムアウトした
"CAN_GETTXBFTIMEOUT"(7) 次の空きバッファを取得できなかった
下記プログラムでは変数aに"CAN_OK"が代入することができません。
"CAN_SENDMSGTIMEOUT"や"CAN_GETTXBFTIMEOUT"でもCAN信号は送信できていました。
またCANモジュール(MCP2515)からジャンパを引き抜いた時に"CAN_OK"を代入されました。
そもそもネットやサンプルスケッチを見てもCAN.sendMsgBuf()関数で戻り値を変数に代入しているコードが見つからず、"CAN_SENDMSGTIMEOUT"や"CAN_GETTXBFTIMEOUT"を何故取得したのかもわかりません。
CAN.sendMsgBuf()関数で"CAN_OK"が取得できないにも関わらず、CAN信号が送信できる理由を教えてください。
また"CAN_SENDMSGTIMEOUT"や"CAN_GETTXBFTIMEOUT"を取得した時の問題点も教えてください。
ソースコード
Arduino
1#include <SPI.h> 2#include "mcp_can.h" 3 4MCP_CAN CAN0(9); 5 6void setup() 7{ 8 Serial.begin(38400); 9 10 while (1) 11 { 12 if (CAN_OK == CAN0.begin(CAN_500KBPS)) 13 { 14 break; 15 } 16 } 17} 18 19void loop() 20{ 21 unsigned char buf[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; 22 int a = 0; 23 for (unsigned long i = 0; i < 10; i++) 24 { 25 a = CAN0.sendMsgBuf((0x100 + i), 0, 8, buf); 26 Serial.println(a); 27 } 28 delay(10); 29}
シリアルモニタ
7 7 7 6 6 6 6 6 6 6 6 6 6 . . .
###参考URL
https://github.com/Seeed-Studio/CAN_BUS_Shield
https://www.dfrobot.com/wiki/index.php/CAN-BUS_Shield_V2_(SKU:_DFR0370)
###原因
終端抵抗が接続できてないことが原因でした。
以前使用していた時にはケーブルに終端抵抗があったため、通信できていたと思われます

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。