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 Cytuj 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ć 🙂 Cytuj 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); } } Cytuj 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). Cytuj 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ł Cytuj 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 😀 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!