SparkFun CAN-Busというシールドとライブラリを使ってCAN通信を行いたいです。
通信相手が10ms間隔で連続する3つのメッセージを送信しており、1つ目と3つ目の信号は読めるのですが、1つ目の処理中に2つ目と3つ目が来て、2つ目が上書きされているのか読み出しができません。それともメールボックスが2つとも使われて3つ目が保存されないのか。
処理を早めようと極限まで内容を削って、通信速度を上げても無理でした。
3つの信号全てを受け取る方法をご教授願います。
P.S.
通信速度9600や19200の低速時はモニタに表示されるIDは282が殆どでたまに382、302が表示されていました(282が0.05秒に一回程度、382が0.5秒に一回程度、302が1.5秒に一回程度)
230400や500000のように高速にすると結果のように282と382のみが交互に表示されるようになりました。
また、送信タイミングは同時から変更できませんが、送信間隔を変更できまして、1秒間隔に変更しました場合、通信速度が9600でも500000でもIDは282と382のみが交互に表示され、302を一切確認できませんでした。
Arduino
1#include <Canbus.h> 2#include <defaults.h> 3#include <global.h> 4#include <mcp2515.h> 5#include <mcp2515_defs.h> 6 7//********************************Setup Loop*********************************// 8 9void setup() { 10 Serial.begin(230400); // For debug use 11 Serial.println("CAN Read - Testing receival of CAN Bus message"); 12 delay(1000); 13 14 if(Canbus.init(CANSPEED_500)) //Initialise MCP2515 CAN controller at the specified speed 15 Serial.println("CAN Init ok"); 16 else 17 Serial.println("Can't init CAN"); 18 19 delay(1000); 20} 21 22//********************************Main Loop*********************************// 23 24void loop(){ 25 tCAN message; 26if (mcp2515_check_message()){ 27 if (mcp2515_get_message(&message)){ 28 Serial.println(message.id,HEX); 29 30 /*/if(message.id == 0x302) 本来やりたいこと 31 { 32 33 Serial.print("ID: "); 34 Serial.print(message.id,HEX); 35 Serial.print(", Length: "); 36 Serial.print(message.header.length,DEC); 37 Serial.print(", Data: "); 38 for(int i=0;i<message.header.length;i++) 39 { 40 Serial.print(message.data[i],HEX); 41 Serial.print(" "); 42 } 43 Serial.println(""); 44 }*/ 45 46 } 47 } 48}
Arduino
1結果(本来は302も送信されている) 212:22:56.579 -> 282 312:22:56.579 -> 382 412:22:57.561 -> 282 512:22:57.561 -> 382 612:22:58.541 -> 282 712:22:58.588 -> 382 812:22:59.570 -> 282 912:22:59.570 -> 382 1012:23:00.556 -> 282 1112:23:00.556 -> 382 12
回答1件
あなたの回答
tips
プレビュー