Command-Befehl mit Taster ausführen - Anfänger bräuchte bitte eure Hilfe

Hi ich bräuchte mal bitte eure Hilfe, ich will den EC Wert messen, um die Leitfähigkeit von einem Wassertank zu ermitteln und am LCD-Display ausgeben, was auch erstmal kein Problem ist. Nun will ich über einen Taster den EC Wert kalibrieren können, weiß aber leider nicht wie.
Momentan kann ich den Wert kalibrieren in dem ich beim Seriellen Monitor in der Commandzeile zB CAL,low,1413 eingebe.

Der EC-Wert ist die Leitfähigkeit vom Wasser

Das ist der orginale Code von Atlas zum EC messen:

#include <SoftwareSerial.h>                           //we have to include the SoftwareSerial library, or else we can't use it
#define rx 2                                          //define what pin rx is going to be
#define tx 3                                          //define what pin tx is going to be

SoftwareSerial myserial(rx, tx);                      //define how the soft serial port is going to work


String inputstring = "";                              //a string to hold incoming data from the PC
String sensorstring = "";                             //a string to hold the data from the Atlas Scientific product
boolean input_string_complete = false;                //have we received all the data from the PC
boolean sensor_string_complete = false;               //have we received all the data from the Atlas Scientific product


void setup() {                                        //set up the hardware
 Serial.begin(9600);                                 //set baud rate for the hardware serial port_0 to 9600
 myserial.begin(9600);                               //set baud rate for the software serial port to 9600
 inputstring.reserve(10);                            //set aside some bytes for receiving data from the PC
 sensorstring.reserve(30);                           //set aside some bytes for receiving data from Atlas Scientific product
}


void serialEvent() {                                  //if the hardware serial port_0 receives a char
 inputstring = Serial.readStringUntil(13);           //read the string until we see a <CR>
 input_string_complete = true;                       //set the flag used to tell if we have received a completed string from the PC
}


void loop() {                                         //here we go...

 if (input_string_complete) {                        //if a string from the PC has been received in its entirety
   myserial.print(inputstring);                      //send that string to the Atlas Scientific product
   myserial.print('\r');                             //add a <CR> to the end of the string
   inputstring = "";                                 //clear the string
   input_string_complete = false;                    //reset the flag used to tell if we have received a completed string from the PC
 }

 if (myserial.available() > 0) {                     //if we see that the Atlas Scientific product has sent a character
   char inchar = (char)myserial.read();              //get the char we just received
   sensorstring += inchar;                           //add the char to the var called sensorstring
   if (inchar == '\r') {                             //if the incoming character is a <CR>
     sensor_string_complete = true;                  //set the flag
   }
 }


 if (sensor_string_complete == true) {               //if a string from the Atlas Scientific product has been received in its entirety
   if (isdigit(sensorstring[0]) == false) {          //if the first character in the string is a digit
     Serial.println(sensorstring);                   //send that string to the PC's serial monitor
   }
   else                                              //if the first character in the string is NOT a digit
   {
     print_EC_data();                                //then call this function 
   }
   sensorstring = "";                                //clear the string
   sensor_string_complete = false;                   //reset the flag used to tell if we have received a completed string from the Atlas Scientific product
 }
}



void print_EC_data(void) {                            //this function will pars the string  

 char sensorstring_array[30];                        //we make a char array
 char *EC;                                           //char pointer used in string parsing
 
 sensorstring.toCharArray(sensorstring_array, 30);   //convert the string to a char array 
 EC = strtok(sensorstring_array, ",");               //let's pars the array at each comma

 Serial.print("EC:");                                //we now print each value we parsed separately
 Serial.println(EC);                                 //this is the EC value
}

Dann setze bitte den kopierten Sketch in Code-Tags (Schaltfläche </> oben links im Editorfenster) damit alle den auch richtig lesen können.
Und auch ist es besser, wenn du deine Frage im Titel des Thread schreibst, dann ist der Thread besser von anderen zu unterscheiden. Anfänger gibt es mehrere.

Hi

Auch wäre Es schön zu erfahren, was EC bei Dir ist - wofür man Das braucht, ist vll. auch ganz interessant.

MfG

Ich denke EC ist die elektrische Leitfähigkeit.

Edit: To hat erklärt zu spät gesehen

Danke für die Tipps, hab es nun umgestaltet.
Ja genau die elektrische Leitfähigkeit und möchte die in einem Wassertank messen.

Ok, der Sketch ist schon mal lesbar.
Was genau meinst du jetzt mit "kalibrieren" ?
Das kann ich nicht erkennen.

Pied89:
Ja genau die elektrische Leitfähigkeit und möchte die in einem Wassertank messen.

Du meinst damit hoffentlich kein Trinkwasser.

Gruß Tommy

Es gibt Befehle die man direkt beim Seriellen Monitor in der Commandzeile eingibt und dann führt das Programm diese aus, wie zB diese:

Cal,dry
Cal,84
Cal,low,12880
Cal,high,80000
Cal,clear

Nein kein Trinkwasser.

Pied89:
Es gibt Befehle die man direkt beim Seriellen Monitor in der Commandzeile eingibt und dann führt das Programm diese aus, wie zB diese:

Cal,dry
Cal,84
Cal,low,12880
Cal,high,80000
Cal,clear

Und das möchtest du mit "einem" Taster machen ?
Dann brauchst du sowas wie ein Menü.

Ja genau dieses hab ich auch, ich weiß leider nur nicht welcher Variable von dem Sketch ich zB den Befehl Cal,dry geben muss.

Pied89:
Ja genau dieses hab ich auch, ich weiß leider nur nicht welcher Variable von dem Sketch ich zB den Befehl Cal,dry geben muss.

Da das vermutlich ein char Array sein wird, kannst du das über ein Array abfragen.

Hi

In dem Fetzen, Den Du uns da oben gezeigt hast, wird keines der Kommandos erkannt.
Wenn, dann irgendwo im Hintergrund - Das müsstest Du aber besser finden können, als wir.

Soll heißen: Ganzer Sketch?

MfG

Das ist theoretisch der ganze Sketch, wenn ich den auf den Arduino lade und dann den mit dem Bauteil verbinde, kann ich über den Monitor Daten auslesen und über die Commandozeile die Befehle setzen.

https://www.atlas-scientific.com/_files/code/Arduino-Uno-EC-sample-code.pdf

Damit gibst du also den angesprochenen Befehl an das Modul weiter.

Somit sollte dein Vorhaben kein Problem sein.

Du baust ein Array auf und übergibst die entsprechende Auswahl vom Array an das Modul.

Z.B.:

char* befehl[] = { "Befehl 1", "Befehl 2", "Befehl 3", "Befehl 4", "Befehl 5" };