Stránka 2 z 3

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 18:54
od jankop
Ale ja potřebuji float 20.2 ;)
Mám kovid a asi mi to zatemňuje mozek.
Proč to neuděláš, jak se to dělá normálně?

Kód: Vybrat vše

float test = 12.444;
void setup() {}

void loop() {
  Serial.begin(115200);
  Serial.println();
  Serial.println(test, 1);
}

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 19:08
od BigSandy
Protože to nepotřebuji jenom odesilat.
Ono když budu chtit třeba sepnout rele, když bute teplota od - do tak ?

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 19:22
od jankop
Tak porovnáš

Kód: Vybrat vše

if (teplota >1.5&&teplota<2.3){sepni rele}
Dej mi konkrétní příklad, ve kterém ti to vadí.

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 19:37
od BigSandy
Ono se to přes se.port vubec odesilat nebude.
Pojede to na ESP8266 a data se budou odesilat do raspi přes POST a take vypisovat na displey což by ale převedene jako string nemělo vadit.

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 19:40
od jankop
Já nemluvím o sériovém portu, já chtěl po tobě konkrétní příklad kódu, kde ti to vadí. Ty jsi to nečetl? Mám pocit, že hledáš problémy, kde nejsou. A když to budeš odesílat postem, tak to stejně budeš konvertovat do stringu.
Tady taky odesílám zaokrouhlenej float

Kód: Vybrat vše

String StringToSend = "GET /?" + String(guid) + "=" + String(temperature, FloatRounding) + "&humV=" + String(humidity, FloatRounding) + " HTTP/1.1\r\n" +
                        "Host: " + host + "\r\n" +
                        "Connection: close\r\n\r\n";

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 20:19
od ondraN
Já bych viděl problém v tom zaokrouhlení. Pokud omezíš počet míst formátem, tak se vlastně provede trunc (2,25 zobrazí jako 2,2). Pokud uděláš jenom round, zaokrouhluje se na celé číslo. Proto, když chceš zaokrouhlit třeba třetí desetinné místo, musíš to vynásobit tisíci, zaokrouhlit a zase vydělit tisíci.
vadit to může třeba tady

Kód: Vybrat vše

temp=2.29;	//tady jako zmerim
if (temp>=2.3){
...}else{
...}
první část if se provede až po dosažení 2.3, ale pokud budu zaokrouhlovat na jedno des. místo, provede se už při 2.25

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 03 úno 2021, 20:49
od jankop
Řekni mi, proč by měl pro komparace zaokrouhlovat. Pracuji s float a výstupy zaokrouhlím. Tohle zaokrouhluje správně

Kód: Vybrat vše

float test = 12.46;
void setup() {
  Serial.begin(115200);
  Serial.println();
  Serial.println(test, 1);
  Serial.println(String(test, 1));
}
void loop() {

}
A pro displej nepochybně funguje funkce display.print(teplota,1)
Tvrdím, že neexistuje důvod, proč za běhu programu float zaokrouhlovat. S takovou mu ten projekt vydrží opravdu na dlouhou dobu, když bude řešit problémy, které neexistují.

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 04 úno 2021, 08:14
od BigSandy
No a když budu chtit to čidlo kalibrovat za pomoci funkce map()
Přece jen lepe se pracuje s hodnotou na jedno desetine čislo.

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 04 úno 2021, 10:50
od jankop
Funkce map() neslouží ke kalibraci, ale změně škály a zároveň je to docela problematická funkce. Pokud máš referenční měřidlo, se kterým chceš kalibrovat, tak ti stejně stačí úprava směrnice a offsetu přímky. Funkce map() je celočíselná, tak bys stejně musel vstupy normalizovat.

Re: Čidlo teploty a vlhkostí SHT31-D

Napsal: 04 úno 2021, 13:34
od BigSandy
jankop píše:
04 úno 2021, 10:50
Pokud máš referenční měřidlo, se kterým chceš kalibrovat, tak ti stejně stačí úprava směrnice a offsetu přímky.
Mužeš prosím bliže upřesnít. Mame v praci kvalitní infra teploměr. Ja myslel že tu teplotu budu nasobit 10 a dam do map().