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.