Avatar billede steen-h Mester
17. oktober 2012 - 09:12 Der er 7 kommentarer og
1 løsning

GPRS shield Arduino

Jeg mangler hjælp til at parse en hjemmeside.

Jeg har en kode som jeg ikke hel forstår, men den virker :-)

Serial1.println("AT+HTTPREAD");  //"AT+HTTPREAD=0,200" Reads 200 bytes from byte 0   
   
    do{
        while(Serial1.available()==0);
    }while(Serial1.read()!=':');
 

    data_size=0;
    while(Serial1.available()==0);
   
    aux=Serial1.read();
    do{
        data_size*=10;
        data_size+=(aux-0x30);
        while(Serial1.available()==0);
        aux=Serial1.read();       
    }while(aux!='\r');
   
    do{
        while(Serial1.available()==0);
    }while(Serial1.read()!='\n'); 

    for(x=0;x<=data_size;x++){
        while(Serial1.available()==0);
    data[x]=Serial1.read();
    }

  Serial.print(data);    //Shows data

Den læser hele siden, jeg ønsker kun det det som står mellem <body> og <\body>

Her er en anden kode som jeg har fundet, den læser tegnene og når strengen ender på <text> slettes det som er læst og der gemmes kun det indtil <

  if (client.available()) {
      // read incoming bytes:
      char inChar = client.read();

      // add incoming byte to end of line:
      currentLine += inChar;

      // if you get a newline, clear the line:
      if (inChar == '\n') {
        currentLine = "";
      }
      // if the current line ends with <text>, it will
      // be followed by the tweet:
      if ( currentLine.endsWith("<text>")) {
        // tweet is beginning. Clear the tweet string:
        readingTweet = true;
        tweet = "";
      }
      // if you're currently reading the bytes of a tweet,
      // add them to the tweet String:
      if (readingTweet) {
        if (inChar != '<') {
          tweet += inChar;
        }
        else {
          // if you got a "<" character,
          // you've reached the end of the tweet:
          readingTweet = false;
          Serial.println(tweet); 

Er der en som kan kombinere det for mig, eller er der en smartere måde.
Avatar billede magic-mouse Novice
17. oktober 2012 - 10:45 #1
Mega ?
UNO ?
Tiny ?
Duomilanova ?


Bruger du EEPROM til at lagre siden eller bruger du af de 32KiB flash der er indbygget? Denne side fylder ca 135 KiB så det er begrænset information du kan have i flashen.

Årsagen til at jeg spørg er at jeg ville personligt scanne hver pakke set du modtager efter body taggen. så du ikke gemmer siden i flashen og der efter scanner igennem den efter informationen. Da det ellers kan fylde rigtigt meget.

Og du har kun 32 KiB ram - de 5 som bootloadern ligger på. Kan du sende et dump af HTML filen så kan jeg teste i aften. Over seriel USB istedet for GPRS.
Avatar billede steen-h Mester
17. oktober 2012 - 12:41 #2
Det er en Leonardo

Jeg bruger af de 32KiB flash.
Det er ikke en stor side, pt kun timestamp.
Det skal ende ud i en vægt som sender data med GET hver dag og så kan jeg læse siden og få lidt data retur, f.eks ugens vægt.

http://www.honningtavlen.dk/time.php
Avatar billede magic-mouse Novice
17. oktober 2012 - 12:51 #3
Super kigger på det når jeg kommer hjem.

on a side note: hvordan er leonardon ? har hørt en del om den men hoppede på Rev3 bølgen istedet.
Avatar billede steen-h Mester
17. oktober 2012 - 13:09 #4
Nu er jeg hel grøn mht arduino, og har ikke prøvet andet så det ved jeg ikke hvad jeg skal svare til.

Min GSM shield kunne jeg ikke få til at virke på software seriel, men den køre fint på hw. Ved ikke om det er mig eller den ikke er lavet til Leonardo.
Mht. til forbindelser burte det virke.
Avatar billede magic-mouse Novice
17. oktober 2012 - 13:17 #5
Det er klart at du ikke kan bruge software og hardware samtidig. Leonardoen har kun 2 IO en RX og en TX, og dit shield og din USB kan ikke bruge seriellen samtidigt.
Avatar billede steen-h Mester
17. oktober 2012 - 13:23 #6
Jo min USB er ren software, det virker fint med hw-seriel til min gsm shield samtidig

Min usb er Seriel, og min hw-seriel er Seriel1
Avatar billede steen-h Mester
20. oktober 2012 - 09:02 #7
Så har jeg fået det til at virke.

String  tweet = "";
String  linhaAtual = "";
boolean lendoTweet = false;
char inChar;



do{
        while(Serial1.available()==0);
    }while(Serial1.read()!=':');

    data_size=0;
    while(Serial1.available()==0);
   
    aux=Serial1.read();
    do{
        data_size*=10;
        data_size+=(aux-0x30);
        while(Serial1.available()==0);
        aux=Serial1.read();       
    }while(aux!='\r');
   
    do{
        while(Serial1.available()==0);
    }while(Serial1.read()!='\n'); 

    for(x=0;x<=data_size;x++){
        while(Serial1.available()==0);
     
      char inChar = Serial1.read();

  linhaAtual += inChar;
      if (inChar == '\n')
      {
        linhaAtual = "";
      }
      if (linhaAtual.endsWith("<body>"))
      {
        lendoTweet = true;
        tweet = "";
      }
      if (lendoTweet && inChar != '>' && inChar != '\n')
      {
        if (inChar != '<')
        {
          tweet += inChar;
        }
        else
          {
          lendoTweet = false;

          }
      }
Avatar billede steen-h Mester
21. oktober 2012 - 06:41 #8
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester