Ich arbeite an einem Projekt, wo Schaltkommandos per TCP zu einem
Arduino Nano mit Ethernetshield gesendet werden sollen. UDP fällt leider
aus, weil die Übertragung später mal aus einer Webseite heraus erfolgen
soll, da gibts nur TCP.
Es funktioniert ja im Prinzip auch, aber nach jeweils 4..5 Kommandos
kommt keine Datenübertragung mehr zustande. Erst ein Hard-Reset hilft.
Dabei ist es egal, ob ich die einmal aufgemachte TCP-Verbindung offen
lasse, oder (wie z.B. ein Browser) öffne, übertrage und dann schiesse.
In beiden Fällen kann ich leider immer nur eine begrenzte Anzahl
übertragen.
Der Empfang erfolgt im loop()-Bereich mit diesem Code-Schnipsel. Der
Algorithmus zur Befehlserkennung funktioniert mit Serial und
Serial.read() über Stunden einwandfrei. Es muss schon ein spezielles
Netzwerkproblem sein.
1 | EthernetClient client = server.available();
|
2 |
|
3 | while(client.available())
|
4 | {
|
5 |
|
6 | cmd[0]=cmd[1];cmd[1]=cmd[2];cmd[2]=cmd[3];cmd[3]=cmd[4];cmd[4]=cmd[5];
|
7 |
|
8 | cmd[5]=client.read();
|
9 |
|
10 | if(cmd[0]=='<' && cmd[5]=='>')
|
11 | {
|
12 | param=100*(cmd[2]-48)+10*(cmd[3]-48)+(cmd[4]-48);
|
13 | client.print(String(cmd));
|
14 | switch(cmd[1])
|
15 | {
|
16 | case 'L': laser(param); break;
|
17 | case 'H': hmov(param); break;
|
18 | case 'V': vmov(param); break;
|
19 | case 'B': blnk=param; break;
|
20 | }
|
21 | }
|
22 |
|
23 | }
|
24 | client.stop();
|
Wo ist der Fehler ... bzw. wie halte oder bekomme ich dieses Code-Stück
zuverlässig? Danke für Tips.
Nachtrag: Könnte es ein Speicher-Problem sein? Beim Compilieren erhalte
ich die Info: "Der Sketch verwendet 21670 Bytes (70%) des
Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 1270 Bytes (62%) des dynamischen Speichers,
778 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
"