• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czujniki dane po przecinku
#1
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.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#2
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.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
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."
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#4
Użyj sprintf, rozwinę myśl jak ta strona zacznie działać, możliwości jest 1000++. https://pl.wikibooks.org/wiki/C/printf
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#5
(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.
 
Odpowiedź
#6
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.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości