質問: CAN0.sendMsgBuf((0x100 + i), 0, 8, buf); Serial.println(a); } delay(10); } ``` ### シリアルモニタ ``` 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) ### 原因 終端抵抗が接続できてないことが原因でした。 以前使用していた時にはケーブルに終端抵抗があったため、通信できていたと思われます
回答: Alynさん、 Arduinoで、CANだと、MCP2515のシールドで、このあたり(https://github.com/Seeed-Studio/CAN_BUS_Shield/)のコードを使ってるんじゃないかと思います。 https://github.com/Seeed-Studio/CAN_BUS_Shield/blob/master/mcp_can.cpp#L1165 のあたりの、MCP_CAN::sendMsg()を見ると、 `return CAN_GETTXBFTIMEOUT;`に引っかからなければ(=送信バッファの取得ができれば)、`mcp2515_write_canMsg()`が実行されるので、CANBUSにメッセージの送信が行われます。 その後、使用した送信バッファの制御レジスタTXBxCTRL(x=0,1,2)を読み出して、0x08でマスク(`res1 = res1 & 0x08;`)してるので、`TXREQ`フラグをみて、送信完了(ビットが0になる)をチェックしてます。 #define TIMEOUTVALUE 50と定義されているので、 50回の試行、10msのインターバル(`delayMicroseconds(10);`)なので、500msec以内にフラグがクリアされなければ、`return CAN_SENDMSGTIMEOUT;`となってます。 ※MCP2515のデータシートにレジスタマップとか、説明があります。 > > またCANモジュール(MCP2515)からジャンパを引き抜いた時に"CAN_OK"を代入されました。 > > > どのボードのどのジャンパか、わかりませんが、120Ωの終端抵抗でしょうか? オシロでとった波形がみれると、なにかわかるかもしれません.