Problema con Arduino 0019 e WString

Ciao a tutti,
sto provando ad accendere dei LED attraverso la Ethernet Shield usando un codice trovato in rete:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x00, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 150 };
Server server(80);
String readString = String(30);

void setup(){
  Ethernet.begin(mac, ip);
  pinMode(2, OUTPUT); digitalWrite(2, LOW); // led 2
  pinMode(3, OUTPUT); digitalWrite(3, LOW); // acts a ground
  pinMode(4, OUTPUT); digitalWrite(4, LOW); // led 4
  pinMode(5, OUTPUT); digitalWrite(5, LOW); // acts a ground
  pinMode(6, OUTPUT); digitalWrite(6, LOW); // led 6
  pinMode(7, OUTPUT); digitalWrite(7, LOW); // acts a ground
  pinMode(8, OUTPUT); digitalWrite(8, LOW); // led 8
  pinMode(9, OUTPUT); digitalWrite(9, LOW); // acts a ground

}

void loop(){
  Client client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100){
         readString.append(c); 
        }
        if (c == '\n') {
           if(readString.contains("led2")) {
             toggle(2);
           } else if(readString.contains("led4")) {
             toggle(4);
           } else if(readString.contains("led6")) {
             toggle(6);
           } else if(readString.contains("led8")) {
             toggle(8);
           }
               }
             //LEDS
           if(readString.contains("led")){
             client.println("<html><center>");
             client.println("Light 2
");
             if (digitalRead(2) == LOW){
               client.println("OFF");
             } else if (digitalRead(2) == HIGH){
               client.println("ON");
             }
             client.println("<form  method='get'><input type=submit name=led2 value=toggle></form>");

             client.println("Light 4
");
             if (digitalRead(4) == LOW){
               client.println("OFF");
             } else if (digitalRead(4) == HIGH){
               client.println("ON");
             }
             client.println("<form  method='get'><input type=submit name=led4 value=toggle></form>");
             client.println("Light 6
");
             if (digitalRead(6) == LOW){
               client.println("OFF");
             } else if (digitalRead(6) == HIGH){
               client.println("ON>");
             }
             client.println("<form  method='get'><input type=submit name=led6 value=toggle></form>");

             client.println("Light 8
");
             if (digitalRead(8) == LOW){
               client.println("OFF");
             } else if (digitalRead(8) == HIGH){
               client.println("ON");
             }
             client.println("<form method='get'><input type=submit name=led8 value=toggle></form>");
             client.println("</center></html>");
           }
         readString="";
         client.stop();
        }
      }
    }
  }}
}

int toggle(int pin){
  if(digitalRead(pin) == LOW){
    digitalWrite(pin, HIGH);
  } else {
    digitalWrite(pin, LOW);
  }
}

Se non ho capito male nella versione 0019 WString è incluso "di serie" (premetto che nella cartella libraries io non ho la libreria) e quindi non serve neppure includere la libreria..sbaglio?

Comunque se non includo la libreria in compilazione mi restituisce questi errori:

ethhome2.cpp: In function 'void loop()':
ethhome2:27: error: 'class String' has no member named 'append'
ethhome2:30: error: 'class String' has no member named 'contains'
ethhome2:32: error: 'class String' has no member named 'contains'
ethhome2:34: error: 'class String' has no member named 'contains'
ethhome2:36: error: 'class String' has no member named 'contains'
ethhome2:41: error: 'class String' has no member named 'contains'
ethhome2.cpp: At global scope:
ethhome2:80: error: expected declaration before '}' token

Grazie per l'aiuto..sto impazzendo con queste stringhe!!! >:(

Ciao,
non mi ero ancora aggiornato l'IDE (torno oggi dalle ferie :D), ma ho provato subito del "vecchio" codice per testare questa faccenda di WString.

Effettivamente ora la libreria String è nel core, ma i metodi e le funzioni differiscono in parte da quelli della libreria String che si inseriva manualmente negli IDE precedenti e quindi si includeva nel codice stesso.

Quindi, per esempio, invece di contains, usa
indexOf,
invece di append usa l'operatore "+"
stringa_lunga = string_corta1 + string_corta2

etc etc, proprio come riportato nella corrispondente pagina delle References:

e negli esempi compresi nell'IDE.

Buon divertimento!
M

Grande!! Adesso compila perfettamente..questa sera lo provo sull' HW

Allego anche il codice modificato se potesse servire:

#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0x00, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 150 };
Server server(80);
String readString = String(30);

void setup(){
  Ethernet.begin(mac, ip);
  pinMode(2, OUTPUT); digitalWrite(2, LOW); // led 2
  pinMode(3, OUTPUT); digitalWrite(3, LOW); // acts a ground
  pinMode(4, OUTPUT); digitalWrite(4, LOW); // led 4
  pinMode(5, OUTPUT); digitalWrite(5, LOW); // acts a ground
  pinMode(6, OUTPUT); digitalWrite(6, LOW); // led 6
  pinMode(7, OUTPUT); digitalWrite(7, LOW); // acts a ground
  pinMode(8, OUTPUT); digitalWrite(8, LOW); // led 8
  pinMode(9, OUTPUT); digitalWrite(9, LOW); // acts a ground

}

void loop(){
  Client client = server.available();
  if (client) {
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (readString.length() < 100){
         readString = readString + c; 
        }
        if (c == '\n') {
           if(readString.indexOf("led2")) {
             toggle(2);
           } else if(readString.indexOf("led4")) {
             toggle(4);
           } else if(readString.indexOf("led6")) {
             toggle(6);
           } else if(readString.indexOf("led8")) {
             toggle(8);
           }
               }
             //LEDS
           if(readString.indexOf("led")){
             client.println("<html><center>");
             client.println("Light 2
");
             if (digitalRead(2) == LOW){
               client.println("OFF");
             } else if (digitalRead(2) == HIGH){
               client.println("ON");
             }
             client.println("<form  method='get'><input type=submit name=led2 value=toggle></form>");

             client.println("Light 4
");
             if (digitalRead(4) == LOW){
               client.println("OFF");
             } else if (digitalRead(4) == HIGH){
               client.println("ON");
             }
             client.println("<form  method='get'><input type=submit name=led4 value=toggle></form>");
             client.println("Light 6
");
             if (digitalRead(6) == LOW){
               client.println("OFF");
             } else if (digitalRead(6) == HIGH){
               client.println("ON>");
             }
             client.println("<form  method='get'><input type=submit name=led6 value=toggle></form>");

             client.println("Light 8
");
             if (digitalRead(8) == LOW){
               client.println("OFF");
             } else if (digitalRead(8) == HIGH){
               client.println("ON");
             }
             client.println("<form method='get'><input type=submit name=led8 value=toggle></form>");
             client.println("</center></html>");
           }
         readString="";
         client.stop();
        }
      }
    }
}

int toggle(int pin){
  if(digitalRead(pin) == LOW){
    digitalWrite(pin, HIGH);
  } else {
    digitalWrite(pin, LOW);
  }
}

Grazie ancora e buona giornata

M.