Arduino schéma - arduino.sk

Posielanie hodnot

Programovanie arduina
Obrázok užívateľa
Príspevky: 43
Registrovaný: Str 25. Feb 2015 22:19:54
Bydlisko: Fintice

Posielanie hodnot

Poslaťod dzooky » Pia 03. Jún 2016 23:07:19

Ahojte chalani

Mam taky zaujimavy problem.
Robim si meteo stanicu mam problem v posielani jednej hodnoty, konkretne ide o tlak.
Pouzivam snimac BMP180 a standardny sample co bol ku kniznici, kde tlak je definovany takto

Kód: Vybrať všetko
double T,P,p0,a;

p0 - > je relativny tlak o ktory mi ide

Meranie mi ide, vidiet to na seriovej komunikacii, hadze mi hodnoty.
No a potom chcem vsetky hodnoty, co nameram posielat na web.
Posielam to cez POST metodu a pouzivam ethernet modul ENC28J60.

Nasiel som na webe co ako na to.
Tam si potrebujem pripravit data a vyvolat stranku.
Pre tlak to vyzera takto (pre ostatne premenne podobne)

Kód: Vybrať všetko
char s_tlak[8];
dtostrf(p0, 7, 2, s_tlak);


a nasledne si pripravim cely text pre volanie sranky

Kód: Vybrať všetko
sprintf(freeboard, "teplota=%s&teplota_pocitova=%s&tlak=%s", s_teplota, s_teplota_pocitova, s_tlak);

No a ked si dam vypisat hodnotu s_tlak tak je prazdna a aj po spajani premenna freeboard vyzera nasledovne.
Kód: Vybrať všetko
teplota=26.25&teplota_pocitova=26.25&tlak=

Vypis premennej s_tlak priamo za jej definovanim je ok.

No ked presuniem zadefinovanie tej premennej do cyklu kde posielam data na web tak to ide.
Nasledovne
Kód: Vybrať všetko
  while(!status_odosli)
    {
      ether.packetLoop(ether.packetReceive());
      char s_tlak[8];
      dtostrf(p0, 7, 2, s_tlak);
      if (millis() > timer) {
        timer = millis() + 500;
          Serial.println("-----------------------------------------");
          if (!ether.dnsLookup(website_freeboard))
          Serial.println("DNS failed");
          sprintf(freeboard, "teplota=%s&teplota_pocitova=%s&tlak=%s", s_teplota, s_teplota_pocitova, s_tlak);
          Serial.println(freeboard);
          Serial.println(s_tlak);
          ether.browseUrl(PSTR("/dweet/for/faws?"), freeboard, website_freeboard, my_callback);
          status_odosli = true;
      }
    }

Tu to ide a vystup premennej mi da takto
Kód: Vybrať všetko
teplota=26.00&teplota_pocitova=26.00&tlak=1011.15

Zvlastne je ze takto mi blbne len tlak a este zvlastnejsie ze raz to ide a raz nie.
Snad ste pochopili co potrebujem poriesit :D

Príspevky: 174
Registrovaný: Ned 16. Mar 2014 23:22:00

Re: Posielanie hodnot

Poslaťod posjirka » Sob 04. Jún 2016 21:04:02

no podel tohoto vlákna:
http://forum.arduino.cc/index.php?topic=47670.0
sprintf nepodporuje float a tím ani double.
Zkusil bych to nejdřív zkonvertovat do INT a pak to zpbrazit. Předpokládám, že desetinná místa nejsou až tak důležitá ...

případně použij toto :
https://translate.google.cz/translate?h ... rev=search

Obrázok užívateľa
Príspevky: 300
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: Posielanie hodnot

Poslaťod tomXX » Pon 06. Jún 2016 13:09:40

posjirka: on do sprintf posiela %s a to je string, ktorý predtým vytvoril pomocou dtostrf, takže v tom problém nie je. No a zrovna pri tlaku su stotiny dolezite, lebo sa meni velmi pomaly. 1 hPa je velmi vela :)

dzooky: Máš UNO? Možno málo RAM, to sa pri ethernet moduloch stáva. Veď to prepíš do viac riadkov a máš pokoj... Alebo skontroluj ako si definoval freeboard.

Kód: Vybrať všetko
Serial.print(F("teplota="));Serial.print(s_teplota);
Serial.print(F("&teplota_pocitova="));Serial.print(s_teplota_pocitova);
Serial.print(F("&tlak="));Serial.print(s_tlak);
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Späť na Software