前提
Ardiunoシリアル通信についての質問です。
Bluetoothを用いてandroidスマホからESP32へ文字データを送信し、そこからさらにUART通信でArduinoMegaへデータを送るプログラムを作成しています。
PC→(Bluetooth)→ESP32→(UART)→Arduino
ここで発生したトラブルですが、ESP32を中継して送られてきた文字列がArduinoの「rec_data」へ格納されているはずが、中身をif()で判別しようとすると、どんな値が入ろうと全て真で返されてしまいます…
実現したいこと
-ESP32から送られてきた文字列をArduinoで検出する。(ifで判別する)
発生している問題・エラーメッセージ
エラー無し
該当のソースコード
--------Arduino--------------------------- String rec_data; void setup() { Serial.begin(9600); } void loop() { if (Serial.available() > 0) { rec_data = Serial.readStringUntil(';'); Serial.println(rec_data); Serial.println("-Arduino-"); if (rec_data == "H") { Serial.println("recive1!"); } if (rec_data != "H") { Serial.println("recive2!"); } if (rec_data.equals("H")) { Serial.println("recive3!"); } delay(1000); } --------ESP32--------------------------- #include "BluetoothSerial.h" BluetoothSerial SerialBT; int RX_PIN = 22; // ESP32のRT,TXピン配置(ピン位置変更不可) int TX_PIN = 23; String BT_rec_Data; // Bluetoothから受信した文字 String Ard_rec_Data; // arduinoとのUART通信から受信した文字 void setup() { Serial.begin(115200); // BluetoothやPCへ接続する Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN); // Arduinoへ接続する SerialBT.begin("ESP32"); // 無線接続する際に表示する名前(なんでもOK) } void loop() { if (SerialBT.available()) //Bluetoothでデータが届いていたら以下を実行 { BT_rec_Data = SerialBT.readStringUntil(';'); //「;」までデータを受信する指示 Serial.println(BT_rec_Data); // Serial(ArduinoIDEなどのUSB接続先)へデータをオウム返し SerialBT.println(BT_rec_Data); Serial1.println(BT_rec_Data); // Serial1(ArduinoのTx1ピンRx0ピン)へデータを送信 } delay(1000); }
試したこと
if内での判別方法で、「=」「==」「.equals()」の三つを試しました。
「=」と「.equals()」では文字列に関係無く全て真として表示、(!=は偽として表示)
「==」では何の文字列に関係なく全て偽として表示、(!=は真として表示)
シリアルモニタの画像です。(17行目に変更があります)
正直何が起きているのかさっぱりです……
補足情報(FW/ツールのバージョンなど)
ArduinoIDE,VScode

回答2件
あなたの回答
tips
プレビュー