Pages: [1]   Go Down
Author Topic: Webinterface Werte einlesen und Seriell Werte einlesen  (Read 695 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

Frage1:

ich möchte gerne mit meinem Uno + Eth.Shield per Webinterface z.B. einen Raumnamen einlesen und dann in einen Variable übergeben ?

Hat jemand ne Idee wie ich das schickter hinbekomme in im angehängen Code(ausschnitt) ?

Hab schon div. Codebeispiele erfolglos getestet .....

Code:
void loop()
{

  EthernetClient client = server.available();
  if (client) {

    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
      
        if (readString.length() < 200) {

readString = readString + c;

if(readString.indexOf("?testname2=") > -1)
{
Serial.println("test");
  if(readString.indexOf("?testname2=") > +1)
  {
  Serial.println("test");
  }

}

client.print("<html><head>");
client.print("<title>Webserver</title>");
client.println("</head>");
client.print("<form method=get><input name='testname2' value='Wohnzimmer' type='text' size='30' maxlength='30'><input type=submit name=6 value='einschalten'></form>");

 break;
        }
        if (c == '\n') {
        
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
        
          currentLineIsBlank = false;
        }
      }
    }
    
    delay(10);

    Serial.print(readString);
    client.stop();
    readString="";
  }
}

Bin etwas am verzweifeln!?  smiley-cool


Frage2:

Ich möchte gerne Seriel die Raumnamen und Solltemperaturwerte festlegen... hab schon mit Serial Read umgetestet bekomms aber nicht zum laufen. Meine Vorstellung war bei der Serieleneingabe:

Eingabe1:   raum1;wohnzimmer
Eingabe2:   raum1temp;20.00

bin bis jetzt immer an Char, String Problemen hängen geblieben.... hat da jemand evtl. ein Beispiel Prog. oder ne Idee ?

Vielen Dank im vorraus!


Gruß
Jens
« Last Edit: December 06, 2012, 01:55:52 pm by Lan-Police » Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4702
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Falls Du Dein Projekt mal produktiv einsetzen willst (24/7), solltest Du die String-Klasse nicht benützen. Die Art und Weise, wie sie implementiert wurde, ist Gift für einen längeren Betrieb auf einem Mikrokontroller. Versuche Deinen Aufbau mit char-Arrays zu machen.

Zur Frage1:

Lies die ganze GET-Zeile ein, bevor Du mit dem Suchen von Teilstrings beginnst. Alternativ könntest Du direkt parsen, dann müsstest Du aber eine kleine State Machine implementieren.

Am Einfachsten wäre also das Lesen des "GET "-Teils. Von da an schreibe den Pfad in einen Pufferbereich bis Du wieder auf ein Leerzeichen triffst. Dort ist der Pfad zu Ende und Du kannst wahrscheinlich aufhören, den Header weiter zu parsen. Du hast dann den ganzen GET-Pfad im Puffer und kannst Dich mittels strncmp() bzw. strstr() auf die Suche nach Deinen gewünschten Begriffen begeben.

Zu Frage 2:

Auch hier würde ich bis zum Trennzeichen (bei Dir wahrscheinlich eine Zeilenschaltung) in einen Puffer lesen (immer auf die Grössenbeschränkung achten) und dann mittels obigen Funktionen oder auch strtok() die Anweisungen auseinander nehmen. Ich würde mir allerdings gut überlegen, ob nicht ein kompakteres Protokoll erfolgversprechender ist.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Pylon,

danke für deine Antwort.

Leider kann ich mit den Tipps als "Anfänger" nich so viel anfangen. Gibst den evtl. ein Beispiel Sketch?

Kann mir jemand helfen den Code:

Code:
void loop(void) {

  int i=0;
  char commandbuffer[100];

  if(Serial.available()){
     delay(100);
     while( Serial.available() && i< 99) {
        commandbuffer[i++] = Serial.read();
     }
     commandbuffer[i++]='\0';
  }

  if(i>0)
  {
     Serial.println((char*)commandbuffer);
   
     
  }
 
   
  if((char*)commandbuffer == "test")
  {
   Serial.println("Testausgabe");
  }
 

zum laufen zu bringen wenn ich Serial: test eingebe ?

Gruß
Jens



« Last Edit: December 08, 2012, 08:22:41 am by Lan-Police » Logged

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2445
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Kann mir jemand helfen den Code:
...
zum laufen zu bringen wenn ich Serial: test eingebe ?

Code:
void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
}

void loop(void)
{
  char commandbuffer[100];
  char c;
  int i=0;
  // Puffer mit Nullbytes fuellen und dadurch loeschen
  memset(commandbuffer,0,sizeof(commandbuffer));
  if (Serial.available())
  {
    delay(100);
    while (Serial.available())
    {
      c=Serial.read();
      if (c>32) // Nur Zeichen mit ASCII-Code oberhalb Leerzeichen
      {
        commandbuffer[i] = c;
        i++;
      } 
    }
  }
  if (strcmp(commandbuffer,"test")==0)
  {
    Serial.print("Kommando erkannt: ");
    Serial.println(commandbuffer);
  }
  else if (strcmp(commandbuffer,"")!=0)
  {
    Serial.print("Unbekanntes Kommando: ");
    Serial.println(commandbuffer);
  }
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 39
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

danke jurs das war genau das was ich gesucht hatte!  smiley-grin

Gruß
Jens
Logged

Pages: [1]   Go Up
Jump to: