Pages: [1]   Go Down
Author Topic: EthernetShield Webinterface Darstellungs- bzw. Übertragungsfehler (behoben)  (Read 815 times)
0 Members and 1 Guest are viewing this topic.
Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Code:
<!DOCTYPE HTML>
<html><head>
<title>SAS-RC</title>
</head>
<body bgcolor="#444444">
<br><hr />
<h1><div align="center"><font color="#2076CD">SAS-RC</font></div></h1>
<hr /><br>
<br>
<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>
<br>
<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>
<br>
<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:

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

zu

Code:
<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:

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

auf

Code:
<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:

Code:

/1.1
T$

TP/1.1


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

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
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1397
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 http://arduino.cc/en/Reference/PROGMEM
Vermutlich hat das Entfernen von Serial.print() Ausgaben und das Verkürzen von Strings dafür gesorgt, das Dein Problem nicht mehr auftritt.
Logged

Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 130
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley

Z.B. Hier sogar von mir selbst smiley-grin
Logged

Austria
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 49
Posts: 2741
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: