Hallo KiWiX!!!
Vielen Dank für Deine Mühe. Sie hat sich geloht!!!
Ich habe Deinen Code mal ausprobiert, ein paar serielle Ausgaben zum Test hinzugefügt und am Ende alles in meinen Ethernet-Code hinzugefügt. So weit funktioniert alles.
Ich lese die Werte vom Logger aus, schreibe sie in ein Array und stelle sie auf einer Webseite da.
#include <Ethernet.h>
byte mac[] = { **, **, **, **, **, ** };
byte ip[] = { *, *, *, * };
byte gateway[] = { *, *, *, * };
byte subnet[] = { 255, 255, 255, 0 };
Server server(80);
char input[40]; // puffer für die Daten
char current; // puffer für empfangenes Zeichen
int incount = 0; // Zähler zum schreiben in den Puffer
bool lineComplete = false; //
void setup() {
Serial.begin(1200);
Ethernet.begin(mac, ip, gateway, subnet);
}
// wiederhole die Schleife, solange ein Zeichen an der Seriellen
// schnittstelle anliegt, der Puffer nicht überschritten ist und noch
// kein lineComplete da ist
void loop() {
while ( (Serial.available()) & (incount < 40) & (!lineComplete) )
{
current = Serial.read(); // aktuelles Zeichen einlesen
if (current != 13) // ist das empfange Zeichen kein ENTER
{
// dann in den Puffer schreiben
input[incount] = current;
incount++;
}
else
{
// puffer mit NULL Zeichen abschließen, damit das Ende der Zeichenkette
// durch string Operationen erkannt wird
input[incount] = '\0';
lineComplete = true;
}
}
// so wenn man hierher kommt, dann kann das drei Gründe haben:
// - keine zeichen mehr an der seriellen Schnittstelle
// - Puffer voll, aber noch kein Zeilenende
// - Zeilenende erreicht
if (lineComplete) {
Serial.println("Line Complete");
Serial.println(input);
lineComplete = false;
incount = 0;
// input ist eine Zeichenkette mit den vier Werten, durch ein Leerzeichen getrennt
// weiter mit String Operationen
}
else if (incount == 40)
{
Serial.println("Buffer voll!!!");
// - Puffer voll, aber noch kein Zeilenende
// tja, mach was immer Du denkst
}
else
{
// es liegt nichts mehr an der seriellen Schnittstelle an,
// obwohl nicht alle Daten empfangen wurden
// auch hier musst Du entscheiden, was Du machen willst
// Vielleicht ist eine while Schleife hier ja auch nicht so angebracht
Client client = server.available();
if (client) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<font color='darkblue' size='5'>Arduino Projekt Wetterstation</font>
");
client.println("<font color='blue'>Daten der Wetterstation (Windgeschwindigkeit, Windrichtung, Interne Temperatur, Externe Temperatur)
");
client.print("
");
client.println(input);
client.println("
");
client.println("
<font color='grey' size='2'>info@jleopold.de - 2009");
client.stop();
}
}
}
Vielen Dank!
Werde in den nächsten Tagen noch weiter daran arbeiten und verbessern. Wenn man im Moment zu oft im Browser aktualisiert wird der serielle Puffer nicht weiter ausgelesen und läuft über... Parallel werde ich versuchen die Werte per Ethernet in eine My-SQL Datenbank zu schreiben. Ein Kollege baut mit Flash und PHP eine Visualisierung auf unserer Firmenhompage... Wenn das alles steht kann ich das Gesamtprojekt gerne mal vorstellen. Danke nochmal!
Gruß
Poldi