Arduino Polska Forum
Czujniki dane po przecinku - Wersja do druku

+- Arduino Polska Forum (http://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (http://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (http://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Czujniki dane po przecinku (/watek-czujniki-dane-po-przecinku)



Czujniki dane po przecinku - Jarewa0606 - 28-11-2018

Mam mały problem z danymi z czujników czemu te kody nie wyświetlają ich? gdzie popełniam bład?

Kod:
 float h = dht.readHumidity();
 float t = dht.readTemperature();
 float p = (bmp.readPressure()/100);
 
 
 
 if (isnan(h) || isnan(t) || isnan(p)) {
   return;
 }
 
 static char temperatureCTemp[6];
 dtostrf(t, 4, 1, temperatureCTemp);
 tTempC.setText(temperatureCTemp);

 static char hTemp[6];
 dtostrf(h, 4, 0, hTemp);
 tHumidity.setText(hTemp);

 static char pressF[7];
 dtostrf(p, 4, 2, pressF);
 tPressure.setText(pressF);


bmp.readPresure jest w paskal dajmy na to 102030  ale dałem w float by podzielił przez 100 czemu w char nie ma dziesiętnych? zjada liczby i wyświetla po przecinku zera dwa . Z dht wyświetla po przecinku.


RE: Czujniki dane po przecinku - kaczakat - 28-11-2018

Kompilator wie, że używanie float to nie jest dobry pomysł, więc proponuje użycie int - to się nazywa promocja do int. Dzieje się tak wtedy gdy w obliczeniach używasz typu całkowitego, to dopiero na końcu jest przypisywany wynik całkowity do floata. Jak chcesz go zmusić to spróbuj  float p = ((float)bmp.readPressure()/100.0); .
Jak i tak robisz z tego stringa to lepiej zrobić /100 i zapisać część całkowita, a potem dodać '.' i wynik z %100.


RE: Czujniki dane po przecinku - Jarewa0606 - 28-11-2018

Wymuszenie działa.

Nie bardzo wiem jak bym miał to zrobić " to lepiej zrobić /100 i zapisać część całkowita, a potem dodać '.' i wynik z %100."


RE: Czujniki dane po przecinku - kaczakat - 29-11-2018

Użyj sprintf, rozwinę myśl jak ta strona zacznie działać, możliwości jest 1000++. https://pl.wikibooks.org/wiki/C/printf


RE: Czujniki dane po przecinku - es2 - 03-12-2018

(28-11-2018, 19:50)Jarewa0606 napisał(a): Mam mały problem z danymi z czujników czemu te kody nie wyświetlają ich? gdzie popełniam bład?

Zamiast
Kod:
 float p = (bmp.readPressure()/100);
użyj
Kod:
 float p = (float)(bmp.readPressure()/100);
jeśli readPresure zwraca typ całkowity.

(28-11-2018, 23:52)Jarewa0606 napisał(a): Wymuszenie działa.

Nie bardzo wiem jak bym miał to zrobić " to lepiej zrobić /100 i zapisać część całkowita, a potem dodać '.' i wynik z %100."
sprintf( bufor, "%d,%03d", wynik/100, wynik%100);
Ujemnych ciśnień mam nadzieję nie będziesz miał, bo zobaczysz np
-5,-123
ale i na to jest sposób.


RE: Czujniki dane po przecinku - Jarewa0606 - 03-12-2018

Kod:
float p = (bmp.readPressure()/100);
Kod:
dtostrf(p, 4, 2, pressF);


Tak szperałem szperałem i znalazłem że rozwiązanie wystarczyło przenieść dzielenie.

Kod:
dtostrf(p/100, 4, 2, pressF);


Działa i tak na razie zostawiłem. Po prostu dzielenie w funkcji.