Wojtek65 Napisano Maj 1, 2021 Udostępnij Napisano Maj 1, 2021 Witajcie Wziąłem się za projekt prostej stacji pogodowej i w związku z mam pytanie. Jestem na początku projektu. Mam aktualnie na pokładzie dwa "czujniki" jeden analogowy ( natężenia światła na fotorezystorze z kursu ) drugi miernik temperatury powietrza w postaci ( termometru Dallas 18B20 ). Wszystko działa, ale podczas uruchamiania monitora portu szeregowego w celu odczytu danych dzieje się dziwna rzecz. Odczyt temperatury startuje natychmiast z wartością aktualną a odczyt natężenia światła od 0. Po chwili się budzi pokazując już wartość aktualną. Co jest przyczyną takiej sytuacji i jak się tego pozbyć. Bardzo chciałbym aby oba odczyty startowały od wartości aktualnych Jeszcze jedno małe pytanko jak zamienić odczyt wartości analogowych ( napięciowych ) natężenia światła na luksy za pomoc z góry serdeczne dzięki Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Maj 1, 2021 Udostępnij Maj 1, 2021 @Wojtek65 jeśli chcesz, aby ktoś znalazł błąd w programie to musisz w poście umieścić cały kod swojego projektu - inaczej ciężko coś doradzić 🙂 Link do komentarza Share on other sites More sharing options...
Wojtek65 Maj 1, 2021 Autor tematu Udostępnij Maj 1, 2021 #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 3 // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); int pomiarswiatla; void setup() { Serial.begin(9600); // Start up the library sensors.begin(); pinMode(8, OUTPUT); //dioda LED podłączona na pinie 8 ( Wyjście ) pinMode(7, INPUT_PULLUP); //Przycisk ŻÓŁTY podłączony do pinu 7 ( Wejście ) digitalWrite(8, LOW);//stan pinu 8 ( Niski) } void loop() { Serial.print("Aktualne natężenie światła = "); Serial.println(pomiarswiatla); pomiarswiatla = analogRead(A0); // odczyt wskazań fotorezystora podłaczonego do pinu A0 sensors.requestTemperatures(); // Send the command to get temperatures Serial.print("Aktualna temperatura powietrza : "); Serial.println(sensors.getTempCByIndex(0)); if (pomiarswiatla < 150) { digitalWrite(8, HIGH);//włączenie diody } else { digitalWrite(8, LOW);//wyłączenie diody } while (digitalRead(7) == LOW) { digitalWrite(8, HIGH); delay(300); digitalWrite(8, LOW); delay(400); digitalWrite(8, HIGH); delay(300); } } Link do komentarza Share on other sites More sharing options...
ethanak Maj 1, 2021 Udostępnij Maj 1, 2021 Spójrz na swój kod. Najpierw wypisujesz natężenie światła, a dopiero potem odczytujesz. Nic dziwnego że pierwsze wypisanie wypisuje same zera (bo przecież jeszcze nie odczytałeś wartości z A0). Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Wojtek65 Maj 1, 2021 Autor tematu Udostępnij Maj 1, 2021 Pięknie podziękował Link do komentarza Share on other sites More sharing options...
szumen Maj 10, 2021 Udostępnij Maj 10, 2021 Zamiast funkcji delay powinny sprawdzić się tutaj trochę lepiej opóźnienienia z millis. Trochę rozbudują one program ale moim zdaniem będzie działał płynniej przy ewentualnym dodaniu kolejnych czujników 😀 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »