Go Down

Topic: Text mit Textfinder einlesen (Read 6235 times) previous topic - next topic

Serenifly

stdio.h wird standardmäßig im Hintergrund inkludiert. Da muss man eigentlich sonst nichts machen, oder der Compiler würde das gar nicht schlucken:
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html

Dass ich da den String fest vorgegeben habe, war auch nur zum Testen. Das musst statt der Variable "str" deinen String übergeben. Weiß nicht wie du den genau vorliegen hast. Das schluckt nur einen char*, bzw. ein char Array.

TextFinder arbeitet da mit einem Stream als Argument, z.B. ein Ethernet Client oder Serial. Das ist für deine Anwendung vielleicht generell praktischer. :)

-Micky

#16
Dec 26, 2013, 01:24 am Last Edit: Dec 26, 2013, 02:28 pm by -Micky Reason: 1
Ok, ich bleibe beim Textfinder. Das andere ist mir zu kompliziert. Aber hier mal mein Script:

Code: [Select]
#include <SPI.h>
#include <Ethernet.h>

#include <TextFinder.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

// 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 };
// Änderung 1
char serverName[] = "api.met.no";

// 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;
char buf[8];  // Puffer deklarieren

TextFinder  finder( client );  

void setup() {

 lcd.init(); // initialize the lcd
 lcd.backlight();
 // Open serial communications and wait for port to open:
 Serial.begin(9600);
  while (!Serial) {
   ; // wait for serial port to connect. Needed for Leonardo only
 }

 // 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:
   while(true);
 }
 // 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(serverName, 80)) {
   Serial.println("connected");
   // Make a HTTP request:
   // Änderung 2
   client.println("GET /weatherapi/locationforecastlts/1.1/?lat=60.10;lon=9.58");
   client.print("Host: ");client.println(serverName);
   client.println();
 }
 else {
   // kf you didn't get a connection to the server:
   Serial.println("connection failed");
 }
}

void loop()
{
 // if there are incoming bytes available
 // from the server, read them and print them:
 if (client.available()) {
   char c = client.read();
   Serial.print(c);
memset(buf,0,sizeof(buf)); // Puffer löschen
 }
 
   finder.find("<temperature");
   int temperature = finder.getValue();
   //lcd.clear();
   lcd.setCursor(0,0);
   //lcd.print("T=");
   lcd.print(temperature);
   lcd.setCursor(3,0);
   lcd.print((char)223);
   lcd.print("C ");
   delay(3000);
   
   int count=finder.getString("name=\"", "\"/>", buf, sizeof(buf));//Windrichtung
   if (count>0)
   lcd.setCursor(12,0);
   lcd.print(buf); // das ist dann der Text zwischen "<wind_dir" und ";".  
     
   finder.find("<humidity");
   int Lf = finder.getValue();
   lcd.setCursor(6,0);
   lcd.print("F");
   lcd.setCursor(8,0);
 
   lcd.print(Lf);
   lcd.setCursor(10,0);
   lcd.print("%");
   delay(3000);
     
   int count1=finder.getString("percent=\"", "\"/>", buf, sizeof(buf));//Deckung Wolken
   if (count1>0)
   lcd.setCursor(9,1);
   lcd.print("B");
   lcd.setCursor(11,1);
   lcd.print(buf); // das ist dann der Text zwischen "<wind_dir" und ";".  
   delay(3000);
   
   finder.find("<pressure");
   int pressure = finder.getValue();
   lcd.setCursor(0,1);
   //lcd.print("D:");
   lcd.print(pressure);
   lcd.setCursor(5,1);
   lcd.print("hPa");
   delay(3000);
 
  // if the server's disconnected, stop the client:
  //if (!client.connected()) {
 
   client.stop();
   client.flush();  
   delay(600000); // 10 Minuten warten
   
   }


Ich sehe hier keinen String. Fehlt wohl. Nur wie der heißen muß weiß ich nicht. Ist mir zu kompliziert.


Micky

Serenifly

#17
Dec 26, 2013, 02:25 am Last Edit: Dec 26, 2013, 02:29 am by Serenifly Reason: 1
Der String ist irgendwie in client verpackt, was das Objekt ist welches du an TextFinder übergibt. Das kann man auslesen (mit read(), da das Ding an Serial angelehnt ist), aber am Besten du lässt es so :) Macht nur unnötig Arbeit das zu ändern.

-Micky

#18
Dec 26, 2013, 02:18 pm Last Edit: Dec 26, 2013, 02:21 pm by -Micky Reason: 1
Ich laß das jetzt so.

Wie kann ich gezielt bei diesen Wettervorhersagen nur immer diejenige Abfragen die ganz oben steht?

http://api.met.no/weatherapi/locationforecastlts/1.1/?lat=60.10;lon=9.58

So wie ich das eben habe geht der die alle der Reihe nach durch. Oder, wenn ich was ändere, wird die oberste einmal eingelesen und dann nicht wieder.

Micky

-Micky

Habe es hinbekommen. Nicht sehr elegant aber es funktioniert.


Micky

Go Up