Arduino mega2560とEZO EC(Electrical Conductivity)を使用しており、Serial.print()関数を使用してコマンドを送信しようとしています。私はArduino IDE 1.6.7を使用しています。デバイスがUARTコマンドに応答しない
私は、オンラインで見つかったうまく動作するように見えるいくつかのコードを持っています。しかし、なぜ私のコードがうまくいかないかを知りたい。 ECセンサーは私が送信しているデータを取得していないようです。データが送信されていないようです。
私は正常に動作し、期待どおりに動作するコードでセットアップをテストしたので、私の接続ではないことが分かります。ここで
String inputstring = "";
String sensorstring = "";
boolean input_string_complete = false;
boolean sensor_string_complete = false;
void setup() {
Serial.begin(9600);
Serial3.begin(9600);
inputstring.reserve(10);
sensorstring.reserve(30);
}
void serialEvent() {
inputstring = Serial.readStringUntil(13);
input_string_complete = true;
}
void serialEvent3() {
sensorstring = Serial3.readStringUntil(13);
sensor_string_complete = true;
}
void loop() {
float wt = 28.9;
String tempCal = "T,";
tempCal += wt;
if (input_string_complete == true) {
Serial3.print(inputstring);
Serial3.print("\r");
inputstring = "";
input_string_complete = false;
}
if (sensor_string_complete == true) {
if (isdigit(sensorstring[0]) == false) {
Serial.println(sensorstring);
}
else
print_EC_data();
}
sensorstring = "";
sensor_string_complete = false;
}
}
void print_EC_data(void) {
char sensorstring_array[30];
char *EC;
char *TDS;
char *SAL;
char *GRAV;
float f_ec;
sensorstring.toCharArray(sensorstring_array, 30);
EC = strtok(sensorstring_array, ",");
TDS = strtok(NULL, ",");
SAL = strtok(NULL, ",");
GRAV = strtok(NULL, ",");
Serial.print("EC:");
Serial.println(EC);
Serial.print("TDS:");
Serial.println(TDS);
Serial.print("SAL:");
Serial.println(SAL);
Serial.print("GRAV:");
Serial.println(GRAV);
Serial.println();
//f_ec= atof(EC);
}
私のコードです:
void setup() {
Serial.begin(9600);
Serial3.print(9600);
}
void loop() {
Serial3.print("R/r");
Serial.print("R/r");
delay(2000);
}
Serial3.printだけでセンサーに送信されませんが、ここで
は、私は作品をオンラインで見つけたコードです。しかし、他のコードはSerial3.print()関数を使って文字列を送信しても問題ありません。私は何が間違っているのか分からない。私はセンサーからのものを取り込む手順を記述する必要があることを理解します。しかし、何も最初の場所にセンサに送信されるようだ!
ご協力いただければ幸いです。ありがとうございます
こんにちはslash-devです。これを試してみます。しかし、私がセンサーを理解する方法は、それが接続されているArduino Serialソートにセンサーが "* ER"を返す必要があるということです。コマンドが送られてきたが、それらは理解できません。それを理解すれば "* OK"を送信します。それで少なくとも私が送るコマンドを受け取っているはずです。例えば私が "R"を送るなら、それは少なくともコマンドを受け取るべきです。しかし、私のテストから、私はそれがそれを受け取っていないことも知っています。なぜこれがそうだと説明できますか? –
質問:なぜあなたはそれをシリアルにしていますか?available()とSerial.read()?それはSerial3ではないでしょうか?私はSerial3にまっすぐ書いてみたいので、Serial0をまったく使いたくないです。それとも必要ですか? –
@ JohnB。、プログラムは 'serialEvent'を使って' Serial'から 'input_string'を読み込みます(シリアル0のように)。私はそれがセンサーの命令だと考えています。私はあなたのスケッチから作業しました。 Serial3から読み取るコードセクションを切り取り、貼り付けて、\ rが最終的に到着したときに応答を処理します。以下のmhopengの答えにも注意してください: 'setup'の' Serial3.print'は 'Serial3.begin'、LOLです。 –