forgoden:
Wann wird es denn langsam? Noch lädt bei mir alles schnell. Ich benutze hierfür Arduino Mega. D.h. die HTML von SD werden schnell geladen.
So wie ich sehe, verwendest du JavaScript und XML. Da muss ich wohl erst verstehen wie die genau funktionieren, denn ich habe noch keine Erfahrung mit XML und JavaScript hab ich auch schon längst nicht mehr verwendet. Noch verstehe ich nicht was es bei Dir macht: Nimmt JavaScript Informationen aus der URL-Adresse und setzt dann in HTML ein ? Gibt es den ganzen Code von Dir zum testen?
Hi forgoden,
ich hatte zuerst nur einen UNO in Verwendung, der kam schnell an seine Grenze, auch gerade wenn man noch ein favicon.ico, CSS oder kleine Bilder für eine Farbauswahl verwendet hat (Kann damit einen LED-Tisch steuern).
XML ist ein Datenformat, das benutze ich nicht 
Die Seite selbst besteht aus HTML. Das JavaScript schickt eine Anfrage an den Arduino: Gib mir den Wert von Pin 5 und baut auf Basis der Antwort eine HTML-Zeile zusammen, die dann den Wert ausgibt (Und noch einen Button zum steuern des Pins).
Das ist quasi die komplette Magie dahinter.
So musst Du nämlich gerade nicht Zeilenweise die Datei durchsuchen und ersetzen. Sondern die HTML Seite wird an den Browser gesendet und der Browser zieht sich dann die Status der Pins.
Den kompletten Code habe ich gerade noch gefunden, der wichtige Teil in dem von mir Verlinkten Thread hätte Dir aber eigentlich ausgereicht.
Prinzipiell müsstest Du nichtmal verstehen was das JavaScript genau macht, bin aber überzeugt davon, dass das von alleine kommt, wenn Du das nachbaust 
Hier müsste das Icon und das CSS entfernt, oder selbst erstellt werden.
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript">
function WritePin(PinNo, State)
{
document.write("<tr bgColor='#222222'><td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Ausgang "+PinNo+"
</font></td>");
switch(State)
{
case '0':
document.write("<td align='center' bgcolor='#222222'><input type='submit' name='pin" + PinNo + "' value='off' class='buttonOn'></td>");
document.write("<td align='center'><font color='green' size='5'>ON</font></td>");
break;
case '1':
document.write("<td align='center' bgcolor='#222222'><input type='submit' name='pin" + PinNo + "' value='on' class='buttonOff'></td>");
document.write("<td align='center'><font color='#FF0000' size='5'>OFF</font></td>");
break;
default:
document.write("<td align='center' bgcolor='#222222'><input type='button' value='Analog Input' class='buttonNone'></td>");
document.write("<td align='center'><font color='#CFCFCF' size='5'>" + State + "</font></td>");
break;
}
document.write("</tr>");
}
document.include = function(url)
{
var oRequest = new XMLHttpRequest();
var sURL = '/?pin'+url;
oRequest.open("GET",sURL,false);
oRequest.setRequestHeader("User-Agent",navigator.userAgent);
oRequest.send(null)
if (oRequest.status==200)
{
var txt = oRequest.responseText;
if(txt != "")
{
WritePin(url,txt);
}
else
document.write(txt);
}
else
document.write("<td align='center'><font color='#CFCFCF' size='5'>Error executing XMLHttpRequest call! "+url+"</font></td>");
}
</script>
<title>Arduino Pins</title>
<meta name="viewport" content="width=480" />
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body bgcolor='#444444'>
<table border='0' width='480' cellpadding='5'>
<tr><td>
<hr/>
<h2><div align='center'><font color='#2076CD'>Arduino Pins</font color></div></h2>
<hr/>
<div align='left'><font face='Verdana' color='#FFFFFF'>PIN Control</font></div>
<form method="get" action="../?">
<table border='1' width='460'cellpadding='5'>
<script>
document.include("2");
document.include("3");
document.include("5");
document.include("6");
document.include("7");
document.include("8");
document.include("9");
document.include("A0");
document.include("A1");
document.include("A5");
</script>
</tr>
</table>
</form>
<form method=get><input type="submit" name="pin" id="pin" value="Deactivate all"></form>
</td></tr>
</table>
<a href="INDEX.HTM">zurück</a>
</body></html>
Der Arduino wertet die Anfrage aus und gibt entweder den Wert zurück, oder setzt den Pin um:
void ProcessWebInput(Client client, char *filename)
{
char pw[21] = "&pw=XXX&btn=Absenden";
if(strstr(filename,"?action=") !=0)
{
filename = filename + 8; // look behind "?action=" (8 chars)
if(strstr(filename,pw) !=0)
{
(strstr(filename, pw))[0] = 0;
//Show Pins
if(strstr(filename, "pin") != 0)
{
char * thisChar;
filename = filename + 4; //Remove "?pin"
Serial.println(filename);
//Set DigitalPIN
if(strstr(filename, "=") != 0)
{
//PgmPrint("Switch Pins");
thisChar = &filename[0];
if(filename+2 == "on")
digitalWrite(atoi(thisChar), HIGH);
if(filename+2 == "off")
digitalWrite(atoi(thisChar), LOW);
client.print(filename);
}else
{
if(strstr(filename, "A") != 0)
{
//Read Analog Pin
filename = filename+1;//Remove A
thisChar = &filename[0];
//Serial.println(thisChar);
client.print(String(analogRead(atoi(thisChar))));
//Serial.println(String(analogRead(atoi(thisChar))));
}
else
{
//Read DigitalPin
thisChar = &filename[0];
Serial.println(thisChar);
client.print(String(digitalRead(atoi(thisChar))));
//Serial.println(String(analogRead(atoi(thisChar))));
//PgmPrint("digital Read funzt");
}
}
}
}
}
client.println("");
}