Go Down

Topic: Textfinder mit Problemen behaftet ? (Read 1 time) previous topic - next topic

COOL

Hallo,
ich versuche die Beispiele vom "Textfinder" auszuprobieren. Jedoch mit der IDE 0.22; 0.23; 1.01 bekomme ich kein Beispiel zum Laufen.
Die Fehlermeldungen sind je nach Version unterschiedlich.
Könnt ihr das bestätigen oder habt einen Hinweis ? An der IDE-Umstellung kann es nicht liegen.

Gruß Gerd

uwefed


COOL

Hallo Uwe,
ich habe die Bibliotheken jeweils mit Textfinder ergänzt. Das ganze spielt auf einem iMac. Ich werde mal versuchen, dass ich meinen Windows-Rechner damit beauftrage. Ist eigentlich nur eigenartig, dass kein Beispiel läuft, obwohl es ab IDE 0.19 funktionieren soll. Habe mal im Netz umgeschaut und festgestellt, dass ich nicht der einzige bin, jedoch eine Lösung habe ich bisher nicht gefunden.

Gruß Gerd

COOL

Hallo, die Situation ist entschärft, jedoch nicht gelöst !
Auf dem Windows-Rechner läuft es, nur auf dem Mac nicht, warum auch immer ???

mkl0815

Ich habe das Beispiel "SerialReceive" ohne Änderung und ohne Probleme auf der IDE 1.0.1 auf einem MacBook Pro (Mac OS 10.7.5) compilieren können. Die Beispiele für den HTTP-Client machen Probleme, weil die Client- und Server-Klassen in der IDE angepasst wurden. Das hat aber nichts mit der TextFinder Lib zu tun.
Post doch mal die Fehlermeldungen, die Du bekommst wenn Du die Beispiele compilierst. (Mit Angabe IDE Version und welches Beispiel).

uwefed

#5
Oct 22, 2012, 07:19 pm Last Edit: Oct 22, 2012, 07:24 pm by uwefed Reason: 1
Ja, die Fehlermeldungen sind die Basis für weitere mögliche Hilfe.
Ansonsten (ich zitiere) ist der Fehler in Zeile 42. Wenn das nicht stimmt muß meine Kristallkugel zur Reparatur.  ;) ;) ;)
Grüße Uwe

COOL

....ja, ich weiss - immer auf die Kleinen :-))  Ich bin leider noch nicht sattelfest und kämpfe lernend mich durch, daher schätze ich eure Hilfe auch sehr DANKE !
Jetzt zum Ergebnis:
Windows: mit IDE 1.0.1 SerialReceive OK
              mit IDE 1.0.1 SimpleClientWithFinder Fehler aufgrund Umbenennung Klasse Client zu EthernetClient
              mit IDE 0022 SimpleClientWithFinder   OK
iMac 27" OSX 10.8.2  mit IDE 1.0.1 SerialReceive OK
                             mit IDE 1.0.1 SimpleClientWithFinder Fehler aufgrund Umbenennung Klasse Client zu EthernetClient
                             mit IDE 1.0.1 SimpleClientWithFinder  mit Anpassung (sicherlich falsch) Fehler siehe Listing und Fehler

Quote
/*
* SimpleClientTextFinder.pde
*
*/

#if ARDUINO > 18
#include <SPI.h>         // needed for Arduino versions later than 0018
#endif

#include <Ethernet.h>
#include <TextFinder.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,177 };
byte gateway[] ={ 192, 168, 1, 1 };
byte subnet[] ={ 255, 255, 255, 0 };

byte server[] = {209,85,229,104 }; // Google

EthernetClient client(server, 80);//alt Client client(server, 80);
TextFinder finder( client);

long hits; // the number of google hits

void setup()
{
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.begin(9600);
  Serial.println("connecting..."); 
  delay(2000); 
}

void loop()
{
  if (client.connect()) {
    Serial.print("connected... ");
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
  if (client.connected(serverName, 80)>0) {   //alt  if (client.connected())
    hits = 0; // reset hit count
    if(finder.find("Results ")){   
      if(finder.find("of")){     
         hits = finder.getValue(',');
         Serial.print(hits);
         Serial.println(" hits");         
      }
    }
    if(hits == 0){
      Serial.println("No Google hits ");
    }
    delay(10000); // check again in 10 seconds
  }
  else {
    Serial.println();
    Serial.println("not connected");
    delay(1000);
  }
  client.stop();

}


FEHLER-Meldung
no matching function for call to ÈthernetClient::EthernetClient(byte (4), int)`

sketch_oct22b:19: error: no matching function for call to 'EthernetClient::EthernetClient(byte [4], int)'
/Applications/Arduino-1.0.1.app/Contents/Resources/Java/libraries/Ethernet/EthernetClient.h:12: note: candidates are: EthernetClient::EthernetClient(uint8_t)
/Applications/Arduino-1.0.1.app/Contents/Resources/Java/libraries/Ethernet/EthernetClient.h:11: note:                 EthernetClient::EthernetClient()
/Applications/Arduino-1.0.1.app/Contents/Resources/Java/libraries/Ethernet/EthernetClient.h:8: note:                 EthernetClient::EthernetClient(const EthernetClient&)
sketch_oct22b.cpp: In function 'void loop()':
sketch_oct22b:34: error: no matching function for call to 'EthernetClient::connect()'
/Applications/Arduino-1.0.1.app/Contents/Resources/Java/libraries/Ethernet/EthernetClient.h:15: note: candidates are: virtual int EthernetClient::connect(IPAddress, uint16_t)
/Applications/Arduino-1.0.1.app/Contents/Resources/Java/libraries/Ethernet/EthernetClient.h:16: note:                 virtual int EthernetClient::connect(const char*, uint16_t)
sketch_oct22b:41: error: 'serverName' was not declared in this scope

Gruß Gerd
PS. Habe mir erst einmal heute einen MEGA2560 bestellt

mkl0815

Ja, die Änderung der Ethernet-Klassen ist etwas lästig. Es wurde ja nicht nur der Name geändert.
Der Server und der Port zu dem man sich connected wird nun nicht mehr im Konstruktor angegeben.
Code: [Select]

EthernetClient client(server, 80);

ist also falsch. Das ist auch, was der Compiler anmeckert. Server und Port werden nun in der "connect()" Methode angegeben.
Code: [Select]

EthernetClient client;
...
if(client.connect(server,80)) {
...


Schau Dir mal die aktuellen Beispiele der IDE Beispiele der Ethernet-Lib an, dort sieht man die Unterschiede recht gut.

COOL

Super, Danke ! Funktioniert. Da sieht man mal, wie fusselig ich bin, ich habe die Änderungen gesehen, jedoch nicht alles korrekt umgesetzt.
Vielleicht liegt es am Alter. Aber ich glaube, dass es mit 65 entschuldigt ist :-))
Wenn jetzt noch mein neues Arduinoboard kommt, können vielleicht die anderen Probleme mit dem "mal nein, mal ja"-funktionieren ein Ende haben.

Gruß Gerd

COOL

#9
Oct 23, 2012, 12:57 pm Last Edit: Oct 25, 2012, 07:20 am by uwefed Reason: 1
Hallo,
noch eine Ergänzung. Ich hatte ja geschrieben, dass das Kompilieren geklappt hat, jedoch die Ausführung des Programms hat keinen Erfolg.
Ist das bei euch auch der Fall, oder liegt es mal wieder an meiner Hardware ?
Die Google-Adr. ist falsch und müsste 173,194,35,151 lauten.
Hier nochmals das geänderte Script:
Code: [Select]
/*
* SimpleClientTextFinder.pde
*
*/

#if ARDUINO > 18
#include <SPI.h>         // needed for Arduino versions later than 0018
#endif

#include <Ethernet.h>
#include <TextFinder.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,178,177 };
byte gateway[] ={ 192, 168, 178, 1 };
byte subnet[] ={ 255, 255, 255, 0 };

byte server[] = {173,194,35,151 }; // Google

EthernetClient client;//alt Client client(server, 80);
TextFinder finder( client);

long hits; // the number of google hits

void setup()
{
 Ethernet.begin(mac, ip, gateway, subnet);
 Serial.begin(9600);
 Serial.println("connecting...");  
 delay(2000);  
}

void loop()
{
 if (client.connect(server,80)) {
   Serial.print("connected... ");
   client.println("GET /search?q=arduino HTTP/1.0");
   client.println();
 } else {
   Serial.println("connection failed");
 }
 if (client.connect(server,80)) {   //alt  if (client.connected())
   hits = 0; // reset hit count
   if(finder.find("Results <b>")){    
     if(finder.find("of")){    
        hits = finder.getValue(',');
        Serial.print(hits);
        Serial.println(" hits");        
     }
   }
   if(hits == 0){
     Serial.println("No Google hits ");
   }
   delay(10000); // check again in 10 seconds
 }
 else {
   Serial.println();
   Serial.println("not connected");
   delay(1000);
 }
 client.stop();

}

mkl0815

Ich glaube nicht, das es am Alter liegt. Auch glaube ich nicht, das Dein Arduino-Board die Ursache der "unterschiedlichen" Verbindungs-Erfolge ist.
Wenn ich die HTTP-Response Ausgaben richtig lese, ist auf der anderen Seite auch ein AVR (Server: AVR_WEB_Switch bzw. <title>AVR NET IO</title>). Also auch ein Device mit begrenzter Leistung. Ich würde daher die Verbindungsprobleme erstmal auf der "anderen" Seite vermuten.
Klappt dem im Browser der Reload immer, oder greifen ggf. verschiedene Clients parallel auf den "NET IO" zu? Ist das Gegenstück zufällig der Pollin "NET IO" Bausatz?
Mario.

mkl0815

Das zweite "if (client.connect(server,80))" in Deinem Script ist falsch, denn damit baust Du ja eine neue Verbindung auf.

Ich würde an Deiner Stelle von der anderen Seite anfangen. Nicht das alte TextFinder Beispiel anpassen und hoffen das es irgendwann klappt, sondern das neue Ethernet-Lib "WebClient"-Beispiel nehmen und den TextFinder einbauen.
Code: [Select]


/*
  Web client

This sketch connects to a website (http://www.google.com)
using an Arduino Wiznet Ethernet shield.

Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13

created 18 Dec 2009
by David A. Mellis

*/

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server(173,194,33,104); // Google

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

TextFinder finder( client);

long hits; // the number of google hits

void setup() {
  // start the serial library:
  Serial.begin(9600);
  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /search?q=arduino HTTP/1.0");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
    hits = 0; // reset hit count
    if(finder.find("Results <b>")){   
      if(finder.find("of")){     
         hits = finder.getValue(',');
         Serial.print(hits);
         Serial.println(" hits");         
      }
    }
    if(hits == 0){
      Serial.println("No Google hits ");
    }
  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}



Achtung! Code ist ungetestet.
Achso, Code bitte immer in die "#"-Tags einbetten, das vermeidet die lustigen Smilies im Code und ist für alle leichter zu lesen :-)

Go Up