Hallo,
ich versuche gerade einen WebServer zu modifizieren (von Poldi/Katsu, Arduino als Webserver – Poldis Homepage ) um damit Funk-Steckdosen zu schalten.
Das Schalten der Steckdose in einem eigenen Sketch mit folgendem Inhalt:
/*
Example for outlets which are configured with two rotary/sliding switches.
http://code.google.com/p/rc-switch/
*/
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
// Transmitter is connected to Arduino Pin #10
mySwitch.enableTransmit(2);
// Optional set pulse length.
// mySwitch.setPulseLength(320);
}
void loop() {
// Switch on:
// The first parameter represents the setting of the first rotary switch.
// In this example it's switched to "1" or "A" or "I".
//
// The second parameter represents the setting of the second rotary switch.
// In this example it's switched to "4" or "D" or "IV".
mySwitch.switchOn('a', 1, 1);
// Wait a second
delay(1000);
// Switch off
mySwitch.switchOff('a', 1, 1);
// Wait another second
delay(1000);
}
funktioniert bestens.
Nun habe ich das besagte WebServer-Script genommen; ein wenig angepasst. Irgendwann lade ich's hoch und stelle fest, dass die Webseite nicht mehr lädt. Der Ardu ist pingbar und akzeptiert auch anfragen (telnet auf 80), aber er lädt leer/weiß/404.
Ich habe dann rumprobiert und festgestellt:
Wenn die Zeile "mySwitch.switchOn('a', 1, 1);" NICHT auskommentiert ist, passiert dieser Fehler. Kommentiere ich alle mySwitch.switchOn/Off-Zeilen aus, lädt die Seite ganz normal.
Und jetzt hört's bei mir auf: Warum ist das so? Ich habe keine Fehlermeldung und nicht die leiseste Ahnung, warum das jetzt passiert
Hier mein aktueller Code:
/*
Original Version by Poldi
modified by Katsu
the functions readString.append() and readString.contains() where replaced
*/
#include <RCSwitch.h>
#include <SPI.h> // insert by Katsu
// #include <WString.h> removed by Katsu
#include <Ethernet.h>
byte mac[] = { 0x54, 0x55, 0x58, 0x10, 0x00, 0x24 }; // entspricht einer MAC von 84.85.88.16.0.36
byte ip[] = { 192, 168, 0, 5 }; // IP-Adresse
byte gateway[] = { 192, 168, 0, 1 }; // Gateway
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
String readString = String(100); // string for fetching data from address
boolean RC1 = false; // Status flag
boolean RC2 = false;
RCSwitch rcControl = RCSwitch();
void setup(){
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
// Transmitter is connected to Arduino Pin #10
rcControl.enableTransmit(2);
Serial.begin(9600); }
void loop(){
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
// readString.append(c); removed by Katsu
readString = readString + c; // insert by Katsu
// very simple but it works...
}
Serial.print(c); //output chars to serial port
if (c == '\n') { //if HTTP request has ended
// readString.contains() replaced with readString.indexOf(val) > -1 by Katsu
// indexOf locates a character or String within another String.
// Returns the index of val within the String, or -1 if not found.
if(readString.indexOf("rc1=on") > -1) {
rcControl.switchOn('a', 1, 1);
//Serial.println("Steckdose 1 eingeschaltet!");
//RC1 = true;
}
if(readString.indexOf("rc1=off") > -1){
// rcControl.switchOff('a', 1, 1);
Serial.println("Steckdose 1 ausgeschaltet!");
RC1 = false;
}
if(readString.indexOf("all=Alles+aus") > -1){
// rcControl.switchOff('a', 1, 1);
Serial.println("Alles ausgeschaltet");
RC1 = false;
}
//--------------------------HTML------------------------
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("<html><head>");
client.print("<title>Arduino Webserver Poldi</title>");
client.println("</head>");
client.print("<body bgcolor='#444444'>");
/* //---Überschrift---
client.println("
<hr />");
client.println("<h1><div align='center'><font color='#2076CD'>Arduino Webserver 1.0 by Poldi</font color></div></h1>");
client.println("<hr />
");
//---Überschrift--- */
//---Ausgänge schalten---
client.println("<div align='left'><font face='Verdana' color='#FFFFFF'>Ausgänge schalten:</font></div>");
client.println("
");
client.println("<table border='1' width='500' cellpadding='5'>");
client.println("<tr bgColor='#222222'>");
client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Steckdose 1
</font></td>");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=rc1 value='on'></form></td>");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=rc1 value='off'></form></td>");
if (RC1)
client.println("<td align='center'><font color='green' size='5'>ON");
else
client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
client.println("</tr>");
client.println("<tr bgColor='#222222'>");
client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Steckdose 2
</font></td>");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=rc2 value='on'></form></td>");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=rc2 value='off'></form></td>");
/* if (Pin4ON) */
client.println("<td align='center'><font color='green' size='5'>ON");
/* else
client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF"); */
client.println("</tr>");
client.println("</tr>");
client.println("</table>");
client.println("
");
client.println("<form method=get><input type=submit name=all value='Alles aus'></form>");
client.println("</body></html>");
//---Ausgänge schalten---
//clearing string for next read
readString="";
//stopping client
client.stop();
}}}}}