Aktywne Wpisy
stanley___ +123
Hycel997 +529
Hejka, na wykopie uzywam konta jedynie do obserwacji, ale tez zdarzylo sie pomoc jednemu czlowiekowi. Jest to @michalpoprostu
Opis pasuje do jego wczesniejszych pomocy, byl tu z dwa lata temu na głównej jako otyły ochroniarz sprzedający pamiątki nad morzem. Proszę abyście uważali na tego goscia, bo jedyne co zostanie po waszej pomocy do niego to naplucie w ryj. Ja jestem stratna honor za zapewnienia oraz musiałam oplacic jego nocleg, kiedy ten i
Opis pasuje do jego wczesniejszych pomocy, byl tu z dwa lata temu na głównej jako otyły ochroniarz sprzedający pamiątki nad morzem. Proszę abyście uważali na tego goscia, bo jedyne co zostanie po waszej pomocy do niego to naplucie w ryj. Ja jestem stratna honor za zapewnienia oraz musiałam oplacic jego nocleg, kiedy ten i
Na arduino składam system, którego jedną z funkcjonalności ma być odczyt temperatury z czujnika (na razie DHT11) i wyświetlenie na wyświetlaczu.
Wywołuję odczyt, wrzucam wynik do zmiennej >temperatura< typu float, później dane zawarte w tej zmiennej wyświetlam na wyświetlaczu. Wszystko działa.
Problem pojawia się kiedy chcę, żeby w przypadku błędu wyświetlić "err" zamiast danych z czujnika. W tym celu po odczycie dałem ifa, który sprawdza, czy w zmiennej >temperatura< jest liczba i jeśli jest, nic nie robi, a jeśli nie, ma zamienić tą zmienną na String i wpisać do niej tekst "err". To nie chce działać i problem jest na pewno przy operacji zamiany tej zmiennej, bo w ifa wykrywającego liczbę wrzuciłem linijkę, która ma wyświetlić "błąd" na terminalu i rzeczywiście wyświetla (więc dobrze wykrywa liczbę), ale zamiast wrzucić do zmiennej >temperatura< tekst "err", zostaje tam "nan" i tak też pokazuje wyświetlacz.
Macie jakiś pomysł? Jak byście zrealizowali zamianę float na string i wrzucenie do niej tekstu? Ja w żaden sposób nie mogę sobie poradzić. Załączam kawałek programu.
float wilgotnosc = dht.readHumidity();
float temperatura = dht.readTemperature();
if (isnan(temperatura) & isnan(wilgotnosc))
{
Serial.println("blad");
String(temperatura) = "err";
String(wilgotnosc) = "err";
}
#arduino #programowanie #majsterkowanie #elektronika
@pawel1410: c++ to język silnie typowany. Takie rzeczy to w javie w wersji skrypt.
void loop() {
int jasnosc=70;
int jasnoscpwm=255;
jasnoscpwm = map(jasnosc,0,100,255,0);
analogWrite (bcl,jasnoscpwm);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
float wilgotnosc = dht.readHumidity();
float temperatura = dht.readTemperature();
if (isnan(temperatura) & isnan(wilgotnosc))
{
Serial.println("blad");
String(temperatura) = "err";
String(wilgotnosc) = "err";
}
display.setCursor(1,1);
display.print("temperatura i wilgotnosc");
display.setCursor(5,20);
display.print("Temp: ");
display.setCursor(34,20);
display.print(temperatura);
display.print((char)247);
display.print("C");
display.setCursor(5,30);
display.print("Wilg: ");
display.setCursor(34,30);
display.print(wilgotnosc);
display.print("%");
display.setCursor(6,40);
display.print("Jasnosc: ");
display.setCursor(54,40);
display.print(jasnosc);
display.print("%");
display.display();
Serial.print("wilgotnosc-");
Serial.print(wilgotnosc);
Serial.print("%RH | ");
Serial.print("temperatura-");
Serial.print(temperatura);
Serial.println("*C");
Jesteś pewien że nie chodzi ci o &&?
Wolałem operować na zmiennych, wydaje mi się to bardziej optymalnym, przejrzystym i ułatwiającym rozbudowę rozwiązaniem.
1. Nie używaj float (!) na 8bit arduino. To tak jakbyś używał Nvidia Cuda na programatorze od pralki...
2. Jak dokonujesz pomiaru, i wychodzi bzdrura - to ustawiaj w zmiennej temperatura jakąś bzdurną wartość, np -200'C, wtedy łatwo to wyłowić ifem (że temperatura jest spoza zakresu) i wyświetlić ERR
if(isnan(temperatura) {
display.print("err");
} else {
display.print(temperatura);
}
Chciałym uniknąć zrobienia w miejscu wyświetlania czegos takiego
if (mam dobry odczyt)
{
wyswietl wartosc z temperatura
}
else
{
wyswietl napis "error"
}
string stringtemperatura = String(temperatura);
Co znaczy ta linijka? Tworzy nową zmienną?
Dziękuję kochani, działa tak, jak chciałem. Zrobiłem tak:
float wilgotnosc = dht.readHumidity();
float temperatura = dht.readTemperature();
String stringtemperatura = String(temperatura);
String stringwilgotnosc = String(wilgotnosc);
if (isnan(temperatura) && isnan(wilgotnosc))
{
Serial.println("blad");
stringtemperatura = "err";
stringwilgotnosc = "err";
}
I na wyświetlaczu wyświetlam zmienną stringtemperatura.
Może nie jest to najoptymalniejsze rozwiązanie pod kątem pamięci, ale działa. danych z czujnika niestety nie chce wrzucić bezpośrednio
@pawel1410: Nie wiem, sam się tego dopiero uczę i innej metody (jeśli istnieje) nie znam. Nie spotkałem się ze zmianą typu zmiennej.
http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-spis-tresci.html
http://mikrokontrolery.blogspot.com/2011/02/kurs-jezyka-c-rzutowanie-promocja-typow.html
a to String(temperatura) to żadna konwersja, tylko stworzenie obiektu za pomocą odpowiedniego konstruktora.
no można powiedzieć że jest konwersja w środku, ale to co innego niż typowa konwersja typów czy rzutowanie.
https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/
@pawel1410: W języku C (w którym programujesz swoje arduino) tak.
zmienna liczbowa przechowuje tylko liczby (wartość, a nie cyferki żeby było jasne).
int a = 123;
oraz
char b[3] = "123";
są zupełnie inaczej zapisane w pamięci i nie da się między nimi skakać dowolnie.
Nie
Czy jeżeli chciałbym dostać temperaturę z dokładnością do jedengo miejsca po przecinku (22,3*C), jestem w stanie zrobić to nie korzystająć z float?