Bibliothek WString.h und allgemeine Frage zu libs

Hallo, ich versuche verzweifelt folgendes Beispiel zum Laufen zu bekommen.
Ich hatte es auch schon einmal erfolgreich in einem Arduino drin, jedoch nun will mir das nicht noch einmal gelingen (anderer Rechner, andere Arduino-SDK version).
Kann mich mal bitte jemand über den Einsatz von Bibliotheken erleuchten?

Der Code ist angehangen, nun meine Probleme. Zum einen bekomme ich eine Fehlermeldung das die SPI noch mit importiert werden muss. Das lässt sich natürlich machen. Ich frage mich jedoch ob sich dort was geändert hat, und früher das nicht notwendig war…

Die Wstring.h WString.cpp und WProgram.h habe ich bei :
http://code.google.com/p/arduino/source/browse/trunk/hardware/arduino/cores/arduino
heruntergeladen, und in einen eigenen Ordner unter libraries gepackt.
Ist dieser Ansatz soweit richtig?
Beim kompilieren bekomme ich folgenden Fehler:
‘class String’ has no member named ‘contains’

Nun ist die Frage, geistern mehrere Versionen der WString umher, und ich habe nur die falsche installiert?
Als nächstes würde mich interessieren, wie kann ich so einem Fehler selber nachgehen, muss in der Datei WString.h irgendwo eine Stelle mit dem Wort ‘conntains’ auftauchen, und wenn die nicht drin ist, dann kann diese Bibilothek das gar nicht?

Also ich bin über jeden Hinweis dankbar,
Inside-man

#include <SPI.h>
#include <LED.h>
#include <WString.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 10, 10, 201 };
byte gateway[] = { 10, 10, 10, 254 };


byte subnet[] = { 255, 255, 255, 0 };

Server server(80);


byte sampledata=50; //some sample data – outputs 2 (ascii = 50 DEC)
LED led1 = LED(3);  // //Set pin 4 to output
LED led2 = LED(4);
LED led3 = LED(5);
LED led4 = LED(2);
LED led5 = LED(6);
LED led6 = LED(7);
String readString = String(30); //string for fetching data from address
boolean kuechean = false;
boolean badezimmeran = false;
boolean schlafzimmeran = false;
boolean wohnzimmeran = false;
boolean gartenan = false;
boolean arbeitszimmeran = false;
int zaehler1= 1;
int zaehler2= 1;
int zaehler3= 1;
int zaehler4= 1;
int zaehler5= 1;
int zaehler6= 1;


void setup(){ //start Ethernet
    Ethernet.begin(mac, ip, gateway, subnet);
    Serial.begin(9600); }

void loop(){
    Client client = server.available();// Create a client connection

    if (client) {
        while (client.connected()) {
            if (client.available()) {
                char c = client.read();
/*            if (readString.length() < 30) {
                readString.append(c);
            }*/
                Serial.print(c);
            if (c == '\n') {
                  if(readString.contains("Kueche")) {
                      led1.toggle(); // set the LED on
                      zaehler1++;
                      if(zaehler1 %2 == 0) {
                          kuechean = true;
                      }else{
                          kuechean = false;
                      }
                  }
                  if(readString.contains("Badezimmer")) {
                      led2.toggle();
                      zaehler2++;
                      if(zaehler2 %2 == 0) {
                          badezimmeran = true;
                      }else{
                          badezimmeran = false;
                      }
                  }
                  if(readString.contains("Wohnzimmer")) {
                      led3.toggle();
                      zaehler3++;
                      if(zaehler3 %2 == 0) {
                          wohnzimmeran = true;
                      }else{
                          wohnzimmeran = false;
                      }
                  }
                  if(readString.contains("Schlafzimmer")) {
                      led4.toggle();
                      zaehler4++;
                      if(zaehler4 %2 == 0) {
                          schlafzimmeran = true;
                      }else{
                          schlafzimmeran = false;
                      }
                  }
                  if(readString.contains("Arbeitszimmer")) {
                      led5.toggle();
                      zaehler5++;
                      if(zaehler5 %2 == 0) {
                          arbeitszimmeran = true;
                      }else{
                          arbeitszimmeran = false;
                      }
                  }
                  if(readString.contains("Garten")) {
                      led6.toggle();
                      zaehler6++;
                      if(zaehler6 %2 == 0) {
                          gartenan = true;
                      }else{
                          gartenan = false;
                      }
                  }

          
          if (wohnzimmeran) {
            client.println("<input type='submit' name='AN'  value='Wohnzimmer ' class='meinButtonAn' />");
          }else {
            client.println("<input type='submit' name='AUS' value='Wohnzimmer' class='meinButtonAus' />");
          }
          
          if (schlafzimmeran) {
            client.println("<input type='submit' name='AN'  value='Schlafzimmer' class='meinButtonAn' />");
          }else {
            client.println("<input type='submit' name='AUS' value='Schlafzimmer' class='meinButtonAus' />");
          }
          
          if (arbeitszimmeran) {
            client.println("<input type='submit' name='AN'  value='Arbeitszimmer' class='meinButtonAn' />");
          }else {
            client.println("<input type='submit' name='AUS' value='Arbeitszimmer' class='meinButtonAus' />");
          }
          
          if (gartenan) {
            client.println("<input type='submit' name='AN'  value='Garten ' class='meinButtonAn' />");
          }else {
            client.println("<input type='submit' name='AUS' value='Garten' class='meinButtonAus' />");
          }
          
          client.println(" 
");
          client.println(" </body>");
          client.println("</html>");
             }
           }
         }
       }
}

Welche IDE Version verwendest Du? Seit der Version 0019 ist bereits eine Stringklasse vorhanden, diese ist allerdings unter "hardware\arduino\cores\arduino" abgelegt. Da wird es vermutlich zu Kollisionen kommen. Am besten löscht Du Dein String-Verzeichnis wieder.

Hallo, ich verwende die 0020, und wollte mit der auch eigentlich weiter arbeiten. Bei der 0019 habe ich aber die gleichen Probleme. Ich habe testweise alle drei Biblioteheken umbenannt, also von WString.h in WString.h_unbenutzt, das sollte doch reichen, dass diese beim kompilieren nicht eingebinden werden, oder?

Jedenfalls hat das leider erst mal nicht geholfen. Weitere Ideen?

Natürlich hast Du mit der 0019 die gleichen Probleme, weil ja ab dieser Version die Stringklasse enthalten ist. Welche Bibliotheken hast Du umbenannt? Deine hinzugefügten im Libraries Verzeichnis?

Ich habe das selbe Problem, bisher habe ich aus dem Netz entnehmen können das seit V19 die Bibliothek integriert ist und daher auch im Coding nicht mehr mit angegeben werden muss ist unter hardware\arduino\cores\arduino abgelegt. Soweit so gut, Trotzdehm funktioniert es nicht und es kommt die Fehlermeldung 'class String' has no member named 'append' Hat das jemand von euch denn schon mal zum laufen bekommen? BZW mag es von euch mal jemand Testen? Ob es bei euch funzt? Danke und Gruß

Die String Klasse läuft bei mir. Mit der 0019 Version zusammen. Ich nutz diese mit der Sanguino Hardware zusammen.

Am Anfang hatte ich auch den Fehler ich konnte den beheben in dem ich in anderen Klassen wo die String klasse noch Fehlte die Header Datei eingebunden habe. Ich weiß aber nicht mehr genau in welchen Klassen.

Hallo, das Problem konnte ich soweit eingrenzen. Es lag tatsaechlich an der Bibiliothek. Ich habe die urspruengliche auf einem meiner Rechner finden koennen. Mit dieser kompiliert alles einwandfrei. Diese laeuft einwandfrei bis Version 18. Sinnvoll waere es den Text so umzustellen, dass das Projekt mit der neuen integrierten String-lib arbeitet . Mal sehen, ob ich das hinbekomme.

Kann mir jemand nen Tip geben, wie ich die am besten Online stelle. Gruss Inside-man

Hallo, ich habe auch getestet ich komme nicht weiter, ich habe die Version 18 wieder installiert und unter hardware\arduino\cores\arduino die Library us V20 reingepackt, das war es nicht....wstring.h wird im Editor noch nichteinmal erkannt.... könnt ihr mir da noch mal einen Tipp geben sprich welche Version arbeitet mit welcher Bibliothek ( Version datum) zusammen.

Danke und Grüße

Hallo, hier habe ich ertsmal die passende lib hochgeladen:

http://balasus-saves-the-day.ath.cx/arduino/String.zip

Diese einfach im Ordner libraries auspacken, dann sollte alles klappen.
Natuerlich nur in der 0018er Version. Den Umbau auf die 19 und 20er werde ich demnaechst angehen. Wann der fertig wird kann ich allerdings noch nicht sagen.

Hallo zusammen,

entschuldigt, dass ich mich erst so spät zu Wort melde, gerade weil ja auf meinen Seiten auch ein ähnlicher Quellcode steht, bei dem ab Version 19 selbes Problem besteht.

Mangels Zeit habe auch ich es leider noch nicht geschafft den Code auf die nun enthaltene String-Library umzustellen. Ich kann nur so viel sagen:

  • Auch bei mir geht der Code bis Version 18
  • ein kurzer Versuch den Code umzustellen (Anpassung an neue Library) zeigt Probleme mit dem Befehl "readString.append(c);". Wie man dieses behebt, kann ich (noch) nicht sagen.

Aber gemeinsam schaffen wir das sicherlich ;-)

Lieben Gruß Poldi

Hallo, um nicht kleinlich zu sein, aber die readString.contains ist ebenfalls eine Funktion die die mitgelieferte neue Bibilothek nicht kann. Diese könnte man mit readStrin.Substring evtl. ersetzen.

Gruss Inside-man

Ich wollte noch eine kurze Rückmeldung zu meinem Problem geben, in der Version 18 mit der geposteten Library habe ich meinen Code wieder zum laufen bekommen. Ich habe aber ebenfalls noch keine Lösung für die Version 20.

Hallo,

die einfachste Möglichkeit wäre readString.append(c); durch readString = readString + c; zu ersetzen.

Einfach, aber es geht... :)

if(readString.contains("Kueche")) { kann durch if(readString.indexOf("Kueche") > -1 ) { ersetzt werden.

indexOf(Suchtext) liefert die Position des ersten Zeichen des Suchtextes, wenn dieser gefunden wird. Sonst liefert es -1. Hoffe dein Programm funktioniert damit. Ich habe damit Poldis Webserver damit bei mir mit der Version 0021 zum Laufen gebracht.

Gruß Katsu

Hallo zusammen,

vielen Dank Katsu! Nun lässt sich der Code wieder übersetzen. Allerdings geht mein 168er Arduino gerade nicht wirklich. Ich kann den Code übertragen und das Board an"pingen". Im Browser kommt aber nix :-( Im Serial Monitor ist "GET / HTTP/" zu sehen. Mehr nicht. Komisch... Werde es die Tage noch einmal auf einem 328er probieren...

Lieben Gruß Poldi

Hm, irgendwie funkioniert der code bei mir nur einmal, danach mus resettet werden...

woran könnts liegen?