Albert1972 Napisano Czerwiec 30, 2019 Udostępnij Napisano Czerwiec 30, 2019 Witam . Mam pytanko odnośnie funkcji w której mogę przechować wartość w scope . Chodzi konkretnie o temperaturę. Próbowałem tak int Temperatura = (sensors.getTempCByIndex(0)); Ale obcina mi dziesiętne. Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Czerwiec 30, 2019 Udostępnij Czerwiec 30, 2019 Nie bardzo rozumiem całe pytanie, ale odnosząc się do ostatniego zdania: tracisz dane na temat części dziesiętnych, ponieważ korzystasz z typu danych int, który służy do trzymania liczb całkowitych. Jeśli musisz korzystać z wartości "po przecinku" to użyj typu float. Więcej na ten temat: Kurs Arduino – #3 – UART (komunikacja z PC), zmienne 1 Link do komentarza Share on other sites More sharing options...
Albert1972 Czerwiec 30, 2019 Autor tematu Udostępnij Czerwiec 30, 2019 Wielkie dzięki dokładnie o to mi chodzi. Link do komentarza Share on other sites More sharing options...
Albert1972 Czerwiec 30, 2019 Autor tematu Udostępnij Czerwiec 30, 2019 Jednak coś nie gra. Wszystko niby ok ale kiedy wpiszę w program by podał w monitorze temperaturę z tego wpisu float Temperatura = (sensors.getTempCByIndex(0)); dostaję jakby ostatnio zapamiętaną. To znaczy nie aktualizuje się po nowym odczycie. Cały kod wygląda tak: #include <OneWire.h> #include <DallasTemperature.h> class msDelay{ public: inline void delay(unsigned long del){ this->delay_cnt = del + millis(); } inline bool expire(void){ if(this->delay_cnt > millis()) return false; else return true; } private: unsigned long delay_cnt; }; OneWire oneWire(6); //Podłączenie do 6 DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki const int RELAY1 = 7; // Pin miernika poziomu cieczy - wejście 7 const int POMPA = 8; // Pin pompy napełniającej - wyjście 8 const int POMPA2 = 9; // Pin pompy mieszającej - wyjście 9 const int POMPA3 = 10; // Pin pompy mineralizującej - wyjście 10 const int CHLODZENIE = 12; int stanRELAY1 = LOW; int stanPOMPY = LOW; int stanPOMPY2 = LOW; int stanPOMPY3 = LOW; int STANCHLODZENIE = LOW; float Temperatura = (sensors.getTempCByIndex(0)); //unsigned long pracaPOMPY = 60000; //unsigned long pracaPOMPY2 = 60000; //unsigned long aktualnyCzas = 0; //unsigned long zapamietanyCzasPOMPY = 0; //unsigned long zapamietanyCzasPOMPY2 = 0; unsigned long opoznienie = 60000; msDelay CzasPOMPY; msDelay odczytDHT; // utworzenie obiektów delay void setup() { //otwarcie portu i ustawienie prędkości na 9600 bodów Serial.begin(9600); //dopóki serial monitor nie jest otwarty NIE rób nic //while (!Serial) ; sensors.begin(); //Inicjalizacja czujnikow pinMode(RELAY1, INPUT_PULLUP); pinMode(POMPA, OUTPUT); pinMode(POMPA2, OUTPUT); pinMode(POMPA3, OUTPUT); pinMode(CHLODZENIE, OUTPUT); CzasPOMPY.delay(opoznienie); // wstępna inicjalizacja delay odczytDHT.delay(15000); } void loop() { sensors.requestTemperatures(); //Pobranie temperatury czujnika stanRELAY1 = digitalRead(RELAY1); // Odczyt stanu przekaźnika miernika poziomu cieczy: if (stanRELAY1 == LOW) { // Sprawdź czy przekaźnik poziomu cieczy jest zwarty. // Jeśli tak zbiornik nie jest pełny, więc ustaw stanRELAY1 na HIGH: digitalWrite(POMPA, stanPOMPY); digitalWrite(POMPA2, !stanPOMPY); // <- (?) if(CzasPOMPY.expire()) { // Przed upływem zadanego czasu //zapamietanyCzasPOMPY = aktualnyCzas; if (stanPOMPY == LOW) stanPOMPY = HIGH; else stanPOMPY = LOW; Serial.print("Napełnianie"); CzasPOMPY.delay(opoznienie); // odnowienie delaya na kolejny cykl } }else{ digitalWrite(POMPA, HIGH); digitalWrite(POMPA2, HIGH); } if(odczytDHT.expire()){ // Przed upływem zadanego czasu { odczytDHT.delay(200); // sprawdź za pół sekundy Serial.print("Temperatura wody: "); Serial.print(sensors.getTempCByIndex(0)); //Wyswietlenie informacji Serial.println("*C"); } if (Temperatura > 4.0 && Temperatura > 1.0){ digitalWrite(12, LOW); Serial.println("Chłodzenie aktywne"); }else { digitalWrite(12, HIGH); } { if (stanRELAY1 == HIGH && stanPOMPY == LOW) Serial.print(" - Zbiornik pełny"); } { if (stanRELAY1 == LOW && stanPOMPY == LOW) Serial.print(" - Napełnianie"); } { if (stanRELAY1 == LOW && stanPOMPY == HIGH) Serial.print(" - Mieszanie"); Serial.println(""); odczytDHT.delay(15000); // odnowienie opóźnienia } } } Pozostałości z DHT 22 zostały jako nazewnictwo w kodzie i działają 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
Aiden_Pearce Czerwiec 30, 2019 Udostępnij Czerwiec 30, 2019 Bo nie może się aktualizować. Przypisanie wartości pojawia się raz i nie jest w pętli. 1 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ę »