投稿

2月, 2025の投稿を表示しています

Arduino UNO MINIMAでCAN通信(MINIMA >> UNO R4 Wi-Fi 受信データを配列に入れる)

イメージ
参考になる情報を見つけたので、備忘記録として投稿します。 情報公開してくださっている方に感謝します。 笑って許してくれる方だけ見てくださいね! 本来目的のESP32受信で問題点があり、原因切り分け調査のための、 UNO R4 WIFI受信調査となっています。 送信 Arduino UNO R4 MINIMA(CANWrite.ino)+CANトランシーバ:SN65HVD230 受信 Arduino UNO R4 WIFI(CANRead.ino)+CANトランシーバ:SN65HVD230 これでやっています。                 サンプルスケッチ"CANRead.ino"は決められた書式でのシリアルモニタ表示はできますが、   if (CAN.available()) {     CanMsg const msg = CAN.read();     Serial.println(msg);   }                 データのみを使いたい時どうしたら良いか疑問が湧いて調べたら、次のようなコードをみつけました。 これで解決できます。   if (CAN.available())  {     CanMsg const msg = CAN.read(); //sizeof(msg.data)は"msg.data"メモリサイズをバイト単位で返す     uint8_t rx_data[20]; //メモリ領域msg.dataの先頭からmsg.dataのメモリサイズバイトをメモリ領域rx_dataにコピーする     memcpy(rx_data, &msg.data, sizeof(msg.data)); // rx_data配列へコピー     uint32_t rxId = msg.id;     uint8_t rxLen = msg.data_length;     Serial....

Arduino UNO MINIMAでCAN通信(4byteデータを2つ送るには)

イメージ
 CAN通信の活用方法を考えています。 今回テーマは「4byteデータを2つ送るには」です。 2byteを4つ送るとか応用もできます。 備忘記なんですが、参考に紹介します。 Arduino UNO R4 MINIMA CANWrite.inoサンプルスケッチの改変部分 static uint32_t value1 = 0;//millis()を入れてみます static uint32_t value2 = 0;//サンプルスケッチのmsg_cntを入れてみます //中略 value1 = millis(); // uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};//オリジナル   uint8_t const msg_data[] = {0,0,0,0,0,0,0,0};   memcpy((void *)(msg_data), &value1, sizeof(value1));   memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));//オリジナルそのまま使う   CanMsg const msg(CanStandardId(CAN_ID), sizeof(msg_data), msg_data); //中略 ESP32 TWAIreceive.inoスケッチの改変部分ほか //中略     //4byteデータ、2個の数値が送られてくる     uint32_t value1 = 0;     uint32_t value2 = 0;     while (twai_receive(&message, 0) == ESP_OK) {         Serial.printf("\nID: %lx\n", message.identifier);//改行してID:xx 表示して改行         //"\n"は改行 書式指定文字 %lx 倍精度整数?を16進で出力する       ...

Arduino UNO MINIMAでCAN通信(ESP32 TWAIreceive.ino受信時変更点)

イメージ
 以前の投稿で解決策を追記しましたが、わかりにくくなっていたので新たに投稿しておきます。 変更点書き忘れもありました。 笑って許してくれる方だけ見てくださいね・・・                 送信 Arduino UNO R4 (CANWrite.ino)+CANトランシーバ:SN65HVD230 受信 ESP32-WROOM-32E(TWAIreceive.ino)+CANトランシーバ:SN65HVD230 発生する問題点 ・MINIMA側(送信)シリアルモニタにエラー表示 CAN.write(...) failed with error code -60003 ・ESP32側(受信)シリアルモニタに高速出力 ・変化データを送信しても、受信(ESP32)データが更新されない。 ESP32 TWAIreceive.inoの変更するところ  setup関数の中 "TWAI_MODE_LISTN_ONLY"を"TWAI_MODE_NORMAL"へ変更 TWAI_TIMING_CONFIG_500KBITS()をTWAI_TIMING_CONFIG_250KBITS()へ変更 //TWAIreceive.ino //setup関数の中にある //Initialize configuration structures using macro initializers //twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_LISTEN_ONLY);//変更前 //twai_timing_config_t t_config = TWAI_TIMING_CONFIG_500KBITS();//変更前 twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT((gpio_num_t)TX_PIN, (gpio_num_t)RX_PIN, TWAI_MODE_NORMAL);//変更後 twai_timing_config_t t_config = ...