23-10-2017, 19:53
Witam
W pętli głównej powinieneś czyścić wyświetlacz i wysyłać wynik temperatury, bo mogą się nakładać wyniki poprzednie jeśli nowe są krótsze. Czyli powtórz część kodu z setup. Można też czyścić tylko wybrane wiersze/zakresy ekranu by działało szybciej i tylko tę część odświeżać, ale tego się nauczysz później.
Jeśli działa wyświetlanie "napisu" to zamień najpierw wynik temperatury na "napis" i zobacz czy pomoże. Zwykle funkcje obsługują wysyłanie napisów, akurat "Serial.print()" jest bardzo rozbudowana i sama sobie zamienia int, float na napisy i wysyła, ta z oleda niekoniecznie taka musi być.
i potem
String występuje tu jako typ danych String i jako funkcja String() do konwertowania na napisy.
Dodatkowo podejrzewam, że nie ma sensu używać float do tej temperatury, ten czujnik ma pewnie dokładność +/-2oC, można więc użyć typu int.
To da ten sam wynik tylko jako liczbę całkowitą.
Możesz zobaczyć czy z int'ami sobie rodzi ta funkcja display.println();. Zysk to również większa szybkość i mniej kodu wynikowego. Na AVR lepiej unikać float.
Można też podzielić tę liczbę po mnożeniu na część całkowitą dzieląc przez 1000 i potem resztę wyświetlić jako sklejony napis, ale i tak zadziała szybciej i da pewnie mniej kb kodu niż użycie float:
W pętli głównej powinieneś czyścić wyświetlacz i wysyłać wynik temperatury, bo mogą się nakładać wyniki poprzednie jeśli nowe są krótsze. Czyli powtórz część kodu z setup. Można też czyścić tylko wybrane wiersze/zakresy ekranu by działało szybciej i tylko tę część odświeżać, ale tego się nauczysz później.
Jeśli działa wyświetlanie "napisu" to zamień najpierw wynik temperatury na "napis" i zobacz czy pomoże. Zwykle funkcje obsługują wysyłanie napisów, akurat "Serial.print()" jest bardzo rozbudowana i sama sobie zamienia int, float na napisy i wysyła, ta z oleda niekoniecznie taka musi być.
Kod:
String napis=String(temperatura);
Kod:
display.println(napis);
Dodatkowo podejrzewam, że nie ma sensu używać float do tej temperatury, ten czujnik ma pewnie dokładność +/-2oC, można więc użyć typu int.
Kod:
a = analogRead(A0); //Odczytanie napięcia z czujnika temperatury
a = (a * 488)/1000;
//i potem
display.println(a);
Możesz zobaczyć czy z int'ami sobie rodzi ta funkcja display.println();. Zysk to również większa szybkość i mniej kodu wynikowego. Na AVR lepiej unikać float.
Można też podzielić tę liczbę po mnożeniu na część całkowitą dzieląc przez 1000 i potem resztę wyświetlić jako sklejony napis, ale i tak zadziała szybciej i da pewnie mniej kb kodu niż użycie float:
Kod:
a = analogRead(A0); //Odczytanie napięcia z czujnika temperatury
String napis=(String((a*488)/1000)+"."+ String((a*488)%1000)));
//i potem
display.println(napis);
Miło być decenianym https://buycoffee.to/kaczakat