WebServer Erweiterun

Gast #4402382
Lesenswert?

Guten Abend

Ich habe in den letzten Tagen meinen ersten WebServer mit einem Arduino 
UNO zum laufen gebracht. Nun kann ich zwei Ausgänge per Browser auf High 
oder Low setzten.

Nun komme ich aber nicht weiter da ich so etwas wie ein Ausgabefeld 
suche. Ich möchte anzeigen lassen ob der jeweilige Ausgang High oder Low 
ist.

So ein Textfeld werde ich auch in der Zukunkt benötigen ob 
Statusmeldungen an zu zeigen.

Kann mir da jemand weiter helfen.

Quellcode Arduino:
######################################################################## 
###
#if ARDUINO > 18
#include <SPI.h> // Für Arduino Version größer als 0018
#endif
#include <Ethernet.h>
#include <TextFinder.h>
#include <SD.h>

byte mac[] = {
  0x5A, 0xA2, 0xDA, 0x0D, 0x56, 0x7A }; // MAC-Adresse des 
Ethernet-Shield
byte ip[]  = {
  192, 168, 2, 102 };                   // IP zum aufrufen des 
Webservers
byte sdPin = 4;                                      // Pin der SD-Karte

EthernetServer server(80);                           // Server port

File webFile;

void setup()
{
  Ethernet.begin(mac, ip); // Client starten
  server.begin();          // Server starten
  Serial.begin(9600);
  Serial.println("ARDUINO - STEUERUNG");

  Serial.println("Initialisiere SD-Karte...");
  if (!SD.begin(sdPin))
  {
    Serial.println(" - Initialisierung der SD-Karte fehlgeschlagen!");
    return;
  }
  Serial.println(" - SD-Karte erfolgreich initialisiert.");

  if (!SD.exists("index.htm"))
  {
    Serial.println(" - Datei (index.htm) wurde nicht gefunden!");
    return;
  }
  Serial.println(" - Datei (index.htm) wurde gefunden.");

  Serial.println();
  Serial.println("Verbraucher schalten");
}

void loop()
{
  EthernetClient client = server.available(); // Auf Anfrage warten

  if(client)
  {
    /*****************************************
      Ausgänge über das Webformular steuern  
     *****************************************/
    TextFinder finder(client);

    if(finder.find("GET"))
    {
      while(finder.findUntil("pin", "\n\r"))
      {
        char typ = client.read();
        int  pin = finder.getValue();
        int  val = finder.getValue();

        if(typ == 'D')
        {
          pinMode(pin, OUTPUT);
          digitalWrite(pin, val);
          Serial.print(" - D"+String(pin));
        }
        else if(typ == 'A')
        {
          analogWrite(pin, val);
          Serial.print(" - A"+String(pin));
        }
        else Serial.print(" - Falscher Typ");

        if(val==1) Serial.println(" ein");
        else Serial.println(" aus");
      }
    }

    /************************
      Webformular anzeigen  
     ************************/
    boolean current_line_is_blank = true;       // eine HTTP-Anfrage 
endet mit einer Leerzeile und einer neuen Zeile

      while (client.connected())
    {
      if (client.available())                   // Wenn Daten vom Server 
empfangen werden
      {
        char c = client.read();                 // empfangene Zeichen 
einlesen
        if (c == '\n' && current_line_is_blank) // wenn neue Zeile und 
Leerzeile empfangen
        { // Standard HTTP Header senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();

          // Website von SD-Karte laden
          webFile = SD.open("test.htm");  // Website laden
          if (webFile)
          {
            while(webFile.available())
            {
              client.write(webFile.read()); // Website an Client 
schicken
            }
            webFile.close();
          }
          break;
        }
        if (c == '\n')
        {
          current_line_is_blank = true;
        }
        else if (c != '\r')
        {
          current_line_is_blank = false;
        }
      }
    }
    delay(1);
    client.stop();
  }
}
Gast #4402561
Lesenswert?

> Nun komme ich aber nicht weiter da ich so etwas wie ein
> Ausgabefeld suche.

Kennst du dich mit HTML aus? Du musst die HTML Seite dynamisch erzeugen, 
so dass sie die Werte enthält.
1
<form>
2
  Label: <input type="text" name="ausgabefeld" value="12345" readonly />
3
</form>
Oder einfach:
1
Label: 12345
Oder du aktualisierst eine statische Seite mit AJAX (siehe Wikipedia), 
aber das ist komplexer.
Gast #4402912
Lesenswert?

Hey erstmal danke für deine Antwort :)

Also ich habe nicht sehr viel Erfahrung mit HTML... Nur mit C

Du meinst quasie eine Variable die den Text anzeigt und durch das 
beschreiben der Variable ändert sich auch der sichtbare text ?
So in etwa...? ^^

Könntest du mir vielleicht wenns keine umstände macht ein Code Bsp. 
geben.

Ich musste erst mal überlegen wo ich was ändern muss. Also im HTML Code 
oder im C Code.

Gruß Matze
PS: Frohe Weihnachten :)
Gast #4402932
Lesenswert?

Auf dem Webserver bringt nur HTML Code etwas. Denn er wird auf dem 
Client, dh dem Browser ausgefuehrt.

Also. eine Eingabe :
<input type="submit" name="myinput" value="1">
<input type="text" name="mytext" value="hsjahjh shjsadj klj">
<input type="radio" name="sex" value="male" checked>Male
<button type="submit" name="mybtn" value="1"> drueck hier</button>


Zuerst muss man natuerlich sagen, was dann geschehen soll. Also das form 
:
<html>
<head><title>seitertitel</title></head>
<body><form action="input.php" method="post">
..
<button type="submit" name="mybtn" value="1"> drueck hier</button>
..
</form></body></html>


siehe auch :
 http://www.w3schools.com/html/default.asp
Gast #4402938
Lesenswert?

Wie werden werte vom Browser dem Webserver uebergeben. Als :
index.html?myinput=1&input2="abc"

Dafuer geibt's den Firebug Debugger als Erweiterung der Firefox 
Browsers. Damit kann man sich die Variablen ansehen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren