Sorry, wenn ich zum Xten Male das alte Problem anspreche, aber ich habe so viele verschiedene Seiten dazu gefunden, jeder macht es etwas anders, da möchte ich gerne durchsteigen und auch verstehen, was ich da mache und warum es klappt (oder in meinem Falle eben nicht so)
Zur Sache: Angedacht ist eine Webseite, welche Eingaben ermöglicht und diese dann in einer Datei speichert. Die Webseite ist kein Thema, das habe ich alles, funktioniert auch so wie es soll.
Nur der Ardu will nicht so ganz wie ich und ich habe irgendwie das Gefühl, daß es im Bereich der Verbindung/des Lesens hakt, daß der Kleine gar nicht erst ins weite Internet kommt, sondern irgendwo im Router hängenbleibt.
In der Datei sind im Moment die Daten als 6-stellige Zahlenfolge gespeichert. 000000 bedeutet beide Schalter aus, 999999 beide an. Die Zahlen dazwischen sollen später für andere Funktionen genutzt werden.
Zu finden im Web ist sie nach dem Schema "http://meineURL.de/test/test.txt"
Mein Sketch so weit:
#include <EtherCard.h>
// ethernet interface mac address, must be unique on the LAN
static byte mymac[] = { 0x74, 0x69, 0x69, 0x2D, 0x30, 0x31 };
// ethernet interface ip address
static byte myip[] = { 192, 168, 2, 20 };
// gateway ip address
static byte gwip[] = { 192, 168, 2, 1 };
// subnet ip address
byte subnet[] = { 255, 255, 255, 0 };
byte Ethernet::buffer[700];
static uint32_t timer;
//Webseite
char website[] PROGMEM = "http://meineURL.de/test";
// called when the client request is complete
static void my_callback (byte status, word off, word len) {
Ethernet::buffer[off+300] = 0;
String stringOne = ((const char*) Ethernet::buffer + off);
//Abfragen
if (stringOne.substring(1,3) == "000") {
digitalWrite(2, LOW);
}
if (stringOne.substring(1,3) == "999") {
digitalWrite(2, HIGH);
}
if (stringOne.substring(4,6) == "000") {
digitalWrite(3, LOW);
}
if (stringOne.substring(4,6) == "999") {
digitalWrite(3, HIGH);
}
}
void setup () {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
ether.printIp("IP: ", ether.myip);
ether.printIp("GW: ", ether.gwip);
ether.printIp("DNS: ", ether.dnsip);
ether.printIp("SRV: ", ether.hisip);
}
void loop () {
ether.packetLoop(ether.packetReceive());
if (millis() > timer) {
timer = millis() + 5000;
ether.browseUrl(PSTR("/"), "test.txt", website, my_callback);
}
}
Rein logisch sollte er IMO alles so abfragen wie gedacht. aber irgendwo hakt es da noch.
Wäre nett, wenn mir da mal jmd weiterhelfen könnte und den Code mal überfliegen, ggfls Verbesserungsvorschläge liefern könnte. Obwohl meine "Programmierung" großteils aus Copy und Paste besteht, versuche ich das, was da steht auch zu verstehen und ggfls abzuändern. Eigentlich dachte ich ich habe es hier so weit richtig, aber irgendwo hakt es eben leider noch...