Hallo, ich bin noch ganz neu hier und totaler Anfänger mit dem Arduino. Ich habe einen Arduino Uno und ein Ethernet Shield 2, mit dem ich ein Projekt erstellen will. Meine Programmierkenntnisse sind auch schon ewig her. Nun möchte ich über einen Client einen String an den Arduino übergeben, der diesen dann mit einem vordefinierten String vergleicht. Das an sich klappt schon. Also mit einem String. Ich möchte aber zwei Angaben übergeben und diese jeweils einzeln "testen". Falls es dazu schon einen Thread gibt möchte ich euch bitten mir den Link zu geben. Ich habe bisher dazu noch nichts gefunden. Also ich habe beispielsweise die Eingabe: "MONITOR=ON,RELAY=1". mit der Funktion string.IndexOf(',') komme ich auf den Wert wo das Komma zwischen den beiden Informationen ist. Nun wollte ich die Eingabe in einem Array speichern und dann die Informationen vergleichen. Also bspw. ist das Komma an Stelle 11. Dann hätte ich gerne die Stellen [0] bis [10] aus der Eingabe in einem String abgespeichert und mit einem vorgegebenen String verglichen. Ich wäre euch wirklich dankbar, wenn ihr mir dazu einen Tipp oder Hilfe geben könntet. Mein bisheriger Code kann nur den kompletten Eingang überprüfen und gibt dem client dann ein Ack oder Nak abhängig von der Eingabe zurück: ------------------------------------------------------- #include <SPI.h> #include <Ethernet2.h> //see sticker at the bottom of the Ethernet Shield2 byte mac[] = {, , , , , }; IPAddress ip(, , , ); //IPAddress gateway(, , ,); IPAddress subnet(,,,); EthernetServer server(80); //declaration of variables String cmd; String res; String s; boolean alreadyConnected = false; //-------------------------------------------------------------------- void setup(){ //set PIN4 (SD-Card) as output. Using PIN10 (W5500) pinMode(4, OUTPUT); //set PIN4 as Output digitalWrite(4, HIGH); // initialize the ethernet device Ethernet.begin(mac, ip); // start listening for clients server.begin(); // Open serial communications and wait for port to open: Serial.begin(9600); Serial.print("Server address: "); Serial.println(Ethernet.localIP()); } //-------------------------------------------------------------------- void stringComparison(){ cmd = s; Serial.println(); if(cmd.equals("TURN_ON_RELAY")) { res = "ack"; Serial.println("Turn relay on."); } else if(cmd.equals("TURN_OFF_RELAY")){ res = "ack"; Serial.println("Turn relay off."); } else { res = "nak"; } Serial.println(res); Serial.println(); } //-------------------------------------------------------------------- void loop(){ EthernetClient client = server.available(); // wait for a new client: if (client) { // when the client sends the first byte client.flush(); // clean out the input buffer: if (client.available() > 0) { int streamLength = client.available(); //streamLength: length of the given input Serial.print("Streamlength: "); Serial.println(streamLength); unsigned char* buf = new unsigned char[streamLength+1]; // read bytes incoming from the client: char thisChar = client.read(buf, streamLength); buf[streamLength] = '\0'; //client.write(buf, streamLength); //returns input to client Serial.print("Input from Client: "); //Output for serial monitor Serial.write(buf, streamLength); Serial.println(); s = String((const char*)buf); //copy input in string 's' stringComparison(); //go to function //send 'res' to Client int resLength = res.length()+1; // length of 'res' with one extra character for the null terminator char buff[resLength]; //dedicate a character array (buffer) res.toCharArray(buff, resLength); //convert char to string client.write(buff, resLength); //send string to to client client.stop(); alreadyConnected = false; delete[] buf; } } }
> Ddie Eingabe: "MONITOR=ON,RELAY=1" > string.IndexOf(',') komme ich auf den Wert wo das Komma > Die Eingabe in einem Array speichern Das ist auf Mikrocontrollern ein unvorteilhafter Ansatz, da Speicher knapp ist. Kopiere Strings nur, wenn wirklich nötig. Du hast beide Komanndos schon im Speicher, also liegt es nahe, Zeiger auf die Zeichenketten zu speichern. Beispiel: - char* kommandos[0] = Anfang der gesamten Zeichenkette - Suche das Komma. - char* kommandos[1] = Position des Kommas + 1. - Ersetze das Komma durch 0. Dadurch wird die Zeichenkette in zwei Zeichenketten zerlegt. Und schon hast du ein Array mit zwei Zeigern die auf die beiden Kommandos zeigen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.