Ich verwende ein Arduino mega2560 und ein EZO EC (Elektrische Leitfähigkeit) und versuche, einen Befehl mit der Serial.print() -Funktion zu senden. Ich verwende die Arduino IDE 1.6.7.Gerät reagiert nicht auf UART-Befehle
Ich habe etwas Code, der scheint gut zu funktionieren, die ich online gefunden habe. Aber ich möchte wissen, warum mein Code nicht funktioniert. Der EC-Sensor scheint die Daten, die ich sende, nicht zu empfangen. Es werden keine Daten gesendet.
Ich weiß, dass es nicht meine Verbindung ist, da ich das Setup mit dem Code getestet habe, der funktioniert, läuft es gut und wie erwartet. Hier
ist der Code, den ich online gefunden, die funktioniert:
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);
}
Hier ist mein Code:
void setup() {
Serial.begin(9600);
Serial3.print(9600);
}
void loop() {
Serial3.print("R/r");
Serial.print("R/r");
delay(2000);
}
Die Serial3.print einfach nicht an den Sensor geschickt bekommen. Aber der andere Code sendet auch eine Zeichenfolge mit der Funktion Serial3.print() und es funktioniert gut. Ich weiß nicht, was ich falsch mache.
Ich verstehe, dass ich eine Prozedur schreiben muss, um alles aufzunehmen, was vom Sensor kommt. Aber nichts scheint überhaupt an den Sensor gesendet zu werden!
Jede Hilfe würde sehr geschätzt werden. Danke
Hallo slash-dev, okay, ich werde das versuchen. Aber wie ich den Sensor verstehe, ist, dass der Sensor ein "* ER" zurück an die Arduino Serial-Art senden soll, an die es angeschlossen ist. Wenn es der Befehl gesendet wurde, aber diejenigen, die es nicht verstehen. Es wird "* OK" senden, wenn es es versteht. Also sollte es zumindest den Befehl erhalten, den ich sende. z.B. wenn ich "R" sende, sollte es zumindest den Befehl erhalten. Aber von meinen Tests weiß ich, dass es es nicht einmal erhält. Kannst du erklären, warum das so ist? –
Frage: Warum machen Sie es seriell.available() und Serial.read()? Sollte es nicht Serial3 sein? Da ich direkt auf die Serial.3 schreiben möchte, möchte ich Serial0 überhaupt nicht verwenden. Oder ist das notwendig? –
@JohnB., Verwendet Ihr Programm 'serialEvent', um' input_string' von 'Serial' zu lesen (wie in serial0). Ich nehme an, das ist ein Befehl an den Sensor. Ich habe gerade von deiner Skizze gearbeitet. Schneiden Sie aus und fügen Sie meinen Codeabschnitt ein, um von Serial3 zu lesen, und verarbeiten Sie die Antwort, wenn die \ r schließlich ankommt. Beachten Sie auch die Antwort von mhopeng: "Serial3.print" in 'setup' sollte' Serial3.begin', LOL sein. –