EthernetShield Webinterface Darstellungs- bzw. Übertragungsfehler (behoben)

Hallo!

Ich möchte mal gerne nachfragen, ob schon mal jemand das selbe Problem hatte wie ich, und warum das so ist!

Ich habe ein Arduino Uno bord mit EthernetShield und ThinkerKit, worauf ein einfaches Webinterface (Tabelle mit buttons und statusmeldungen) zum setzen von Ausgängen läuft.

Funktion grundsätzlich OK, HTML source am client wie erwünscht und Website wird ebenso angezeigt.

<!DOCTYPE HTML>
<html><head>
<title>SAS-RC</title>
</head>
<body bgcolor="#444444">

<hr />
<h1><div align="center"><font color="#2076CD">SAS-RC</font></div></h1>
<hr />



<table id="OutputTable" border="1" cellpadding="5">
<tr bgColor="#222222">
<th width="70"> OutPut: </th>
<th width="60"> ON: </th>
<th width="60"> OFF: </th>
<th width="70"> State: </th>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O2</font></td>
<td align="center" bgcolor="#222222"><form name="FON2" method="get"><input type="submit" name="OnO2" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF2" method="get"><input type="submit" name="OffO2" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O3</font></td>
<td align="center" bgcolor="#222222"><form name="FON3" method="get"><input type="submit" name="OnO3" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF3" method="get"><input type="submit" name="OffO3" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O4</font></td>
<td align="center" bgcolor="#222222"><form name="FON4" method="get"><input type="submit" name="OnO4" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF4" method="get"><input type="submit" name="OffO4" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O5</font></td>
<td align="center" bgcolor="#222222"><form name="FON5" method="get"><input type="submit" name="OnO5" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF5" method="get"><input type="submit" name="OffO5" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
</table>


<table id="OutputTable" border="1" cellpadding="5">
<tr bgColor="#222222">
<th width="70"> OutPut: </th>
<th width="60"> ON: </th>
<th width="60"> OFF: </th>
<th width="70"> State: </th>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O2</font></td>
<td align="center" bgcolor="#222222"><form name="FON2" method="get"><input type="submit" name="OnO2" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF2" method="get"><input type="submit" name="OffO2" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O3</font></td>
<td align="center" bgcolor="#222222"><form name="FON3" method="get"><input type="submit" name="OnO3" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF3" method="get"><input type="submit" name="OffO3" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O4</font></td>
<td align="center" bgcolor="#222222"><form name="FON4" method="get"><input type="submit" name="OnO4" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF4" method="get"><input type="submit" name="OffO4" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
<tr bgColor="#222222">
<td align="center" bgcolor="#222222"><font face="Verdana" color="#CFCFCF" size="5">O5</font></td>
<td align="center" bgcolor="#222222"><form name="FON5" method="get"><input type="submit" name="OnO5" value="I" /></form></td>
<td align="center" bgcolor="#222222"><form name="FOFF5" method="get"><input type="submit" name="OffO5" value="O" /></form></td>
<td align="center"><font color="red" size="5">OFF</font></td>
</tr>
</table>


<form name="AllOutputsOff" method="get"><input type="submit" name="allOut" value="Off Set All Outputs OFF" /></form>
</body></html>

Klicke ich nun auf einen Button, egal welchen treten eigenartige Darstellungsfehler auf. So wird in beiden Tabellen jeweils die folgende Zeile:

<td align="center" bgcolor="#222222"><form name="FOFF2" method="get"><input type="submit" name="OffO2" value="O" /></form></td>

zu

<td align="center" bgcolor="#222222"><form name="FOFF2" method="get"><input type="subm3" value="O" /></form></td>

Das hat zur Folge dass aus dem Button eine Eingabefeld wird.

So jetzt kommts: Wenn ich den Value von:

<form name="AllOutputsOff" method="get"><input type="submit" name="allOut" value="Off Set All Outputs OFF" /></form>

auf

<form name="AllOutputsOff" method="get"><input type="submit" name="allOut" value="Off" /></form>

abändere, ist dieses Problem behoben! Es tritt aber immer noch ein weitere Darstellungsfehler auf, so dass der Beginn des Html source (Client- seitig) wie folgt aussieht:

/1.1
T$

TP/1.1



<hr />
<h1><div align="center"><font color="#2076CD">SAS-RC</font></div></h1>
<hr />

Auch für dieses Problem gibt es eine Lösung!
Ich habe alle Serial.print(); Anweisungen (fürs debugging) aus dem Cpp source entfernt, und nun läuft es!

Ich wäre sehr dankbar wenn mir jemand erklären könnte, warum zum einen ein zu langer "value" eines Submit- Buttons und zum andern eine einfache Serial.print(); Anweisungen so einen Schrott produzieren kann.

Vielen Dank und
LG

Ich vermute mal, das Du ein Speicherproblem hast. Beim Arduino gibt es drei Arten von Speicher.
1.) Flash-RAM (beim Uno 32kb), dort liegt Dein Programm und der Bootloader. Dieser Speicher ist nicht flüchtig und bleibt auch erhalten wenn kein Stromquelle vorhanden ist
2.) SRAM (beim Uno 2kb) dort liegen alle Variablen und Daten während ein Programm ausgeführt wird. Dieser Speicher ist flüchtig. Hier liegen auch alle Strings die Du für die Ausgabe verwendest. Da Du sehr viel Text in Deinem Programm hast, steckt hier vermutlich das Speicherproblem.
3.) EEPROM (beim Uno 1kb) nicht flüchtiger Speicher der mit entsprechenden Funktionen beschrieben und gelesen werden kann.

Es gibt eine Möglichkeit, das die Strings alle im Flash-RAM bleiben und nicht in den SRAM kopiert werden. siehe PROGMEM - Arduino Reference
Vermutlich hat das Entfernen von Serial.print() Ausgaben und das Verkürzen von Strings dafür gesorgt, das Dein Problem nicht mehr auftritt.

Versuche doch die HTML-Seite auf der SD Karte auf deinem Ethernet Shield abzulegen und nur die reine Pin-Steuerung über den Arduino-Code laufen zu lassen.
Beispiele dazu gibt es hier wie Sand am Meer :slight_smile:

Z.B. Hier sogar von mir selbst :smiley:

Danke für eure Antworten.

Gibt es eine Möglichkeit (Variable) anhand welcher der noch verfügbare Speicher des SRAM abgerufen werden kann?

Danke,
LG

Die Abfrage selbst braucht auch Speicher, und wenn bereits dynamischer Speicher belegt und ( teilweise ) wieder freigegeben wurde, ist es komplizierter.

Aber mit dieser Frage haben sich schon einige beschäftigt.
Schau mal im Playground, oder hier:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1213583720