Gość Marzec 18, 2020 Udostępnij Marzec 18, 2020 Dobrze jest też przepisać sobie stan licznika do zmiennej roboczej i odwoływać się do niej w zamiast wywoływać funkcję millis() wielokrotnie w jednej linijce. Link do komentarza Share on other sites More sharing options...
ethanak Marzec 18, 2020 Udostępnij Marzec 18, 2020 12 minut temu, atMegaTona napisał: Wyrażenia pomiędzy operatorami logicznymi && powinny być zawarte w nawiasach Dlaczego? Poza tym jeśli już to po obu stronach operatora a nie pomiędzy operatorami... 10 minut temu, atMegaTona napisał: Dobrze jest też przepisać sobie stan licznika do zmiennej roboczej i odwoływać się do niej w zamiast wywoływać funkcję millis() A to na odmianę jest bezwzględnie konieczne (funkcja millis() może w jednej linijce zwrócić dwie różne wartości). 1 Link do komentarza Share on other sites More sharing options...
bieri13 Marzec 19, 2020 Autor tematu Udostępnij Marzec 19, 2020 Dnia 18.03.2020 o 07:41, ethanak napisał: Albo pokażesz cały kod, albo Ot i cały tajny kod.... #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // numery PIN int grzalka = 5; //wyjscie grzałki int set_temp = A2; //ustawienie temp int temp_grzalki = A3; //odczyt temp // zmienne dotyczace ustawianie i odczytu temperatury int odczyt = 0; int ustaw = 0; //zmienne do formatowania łańcucha znaków int napiecie = 0; String napiecie_lcd_odczyt; String napiecie_lcd_ustaw; String moc_lcd; unsigned long aktualnyCzas = 0; unsigned long zapamietanyCzas1 = 0; unsigned long zapamietanyCzas2 = 0; unsigned long zapamietanyCzas3 = 0; //************************************************************* void setup() { Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.clear(); } //************************************************************* void loop() { aktualnyCzas = millis(); // odczyt danych z potencjometru nastawy temperatury ustaw = analogRead(set_temp); Serial.print("A = "); Serial.println(aktualnyCzas - zapamietanyCzas3); //******************************************************************************* // cykliczny odczyt i wyświetlenie danych z termopary if (aktualnyCzas - zapamietanyCzas1 >= 100UL ) { digitalWrite(grzalka, LOW); odczyt = analogRead(temp_grzalki)+23; zapamietanyCzas1 = aktualnyCzas; Serial.print("B = "); Serial.println(aktualnyCzas - zapamietanyCzas1); } //******************************************************************************* if (aktualnyCzas - zapamietanyCzas2 >= 150UL) { if(odczyt <= ustaw) { lcd.setCursor(12,0); lcd.print("*"); analogWrite(grzalka, 255); Serial.print("C = "); Serial.println(aktualnyCzas - zapamietanyCzas2); } else { lcd.setCursor(12,0); lcd.print(" "); digitalWrite(grzalka, LOW); Serial.print("D = "); Serial.println(aktualnyCzas - zapamietanyCzas2); } zapamietanyCzas2 = aktualnyCzas; } //******************************************************* // Wyswietlacz LCD lcd.setCursor(0,0); lcd.print("TMP= "); lcd.setCursor(5,0); lcd.print(odczyt); lcd.setCursor(0,1); lcd.print("SET= "); lcd.setCursor(5,1); lcd.print(ustaw); } Link do komentarza Share on other sites More sharing options...
ethanak Marzec 19, 2020 Udostępnij Marzec 19, 2020 No to teraz pokaż gdzie wstawiasz ten podwójny warunek i powiedz, co się nie dzieje a co ma się dziać. 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
bieri13 Marzec 21, 2020 Autor tematu Udostępnij Marzec 21, 2020 Z takim programem jak wcześniej odczyty czasu z funkcji mam takie: B = 0 C = 1072 A = 1093 A = 1113 A = 1132 A = 1152 A = 1171 A = 1189 B = 0 A = 1209 A = 1228 C = 156 A = 1250 A = 1269 A = 1289 B = 0 Gdy wpiszę warunek podwójny: if ((aktualnyCzas - zapamietanyCzas1 >= 100UL)&&(aktualnyCzas - zapamietanyCzas1 <= 140UL)) Program do tego if-a w ogóle nie wchodzi A = 1230 C = 158 A = 1250 A = 1267 A = 1285 A = 1302 A = 1319 A = 1337 A = 1354 A = 1372 A = 1389 C = 159 A = 1409 Więc ewidentnie coś tu nie gra... Program powinien działać tak, że każda z funkcji powinna się wykonać po przekroczeniu zadanego czasu. Czyli: odczyt temperatury, przerwa, wysterowanie grzałki, przerwa, odczyt temperatury, itd. Idąc za poradą Belferek zrobiłem jeszcze taki test: if ((aktualnyCzas - zapamietanyCzas1 >= 100UL)&&(aktualnyCzas - zapamietanyCzas1 <= 140UL)) { digitalWrite(grzalka, LOW); odczyt = analogRead(temp_grzalki)+23; zapamietanyCzas1 = aktualnyCzas; Serial.print("B = "); Serial.println(aktualnyCzas - zapamietanyCzas1); }else { Serial.print("Roznica = "); Serial.println(aktualnyCzas - zapamietanyCzas1); } A = 1127 Roznica = 1127 A = 1144 Roznica = 1144 A = 1167 Roznica = 1167 A = 1195 Roznica = 1195 Link do komentarza Share on other sites More sharing options...
ethanak Marzec 21, 2020 Udostępnij Marzec 21, 2020 Którego z trzech słów w zdaniu "pokaż cały kod" nie rozumiesz? Nikt tu nie będzie składał po kawałku żeby Ci pokazać co spaprałeś. To Ty chcesz wiedzieć gdzie robisz błąd. Ostatni raz: cały kod w wersji niedziałającej. Link do komentarza Share on other sites More sharing options...
bieri13 Marzec 21, 2020 Autor tematu Udostępnij Marzec 21, 2020 12 minut temu, ethanak napisał: Ostatni raz: cały kod w wersji niedziałającej. Przecież cały kod jest wyżej (post z "czwartek o 16:18") Tak trudno przewinąć wątek wyżej? Wrzucam tylko zmiany jakie testuje - za każdym razem wstawiać cały kod? - w ostatniej wypowiedzi musiałbym go wstawić 2x 1 Link do komentarza Share on other sites More sharing options...
ethanak Marzec 22, 2020 Udostępnij Marzec 22, 2020 10 godzin temu, bieri13 napisał: Tak trudno przewinąć wątek wyżej? A tak trudno wkleić? Chciałem Ci pokazać dlaczego wyniki są takie, a nie inne, ale nie mogę robić tego na zasadzie "w trzeciej linijce z wczoraj masz to, a w piątej z czwartku masz tamto, co w połączeniu z siódmą linijką z niedzieli daje wyniki z soboty". A wklejenie całego kodu trwa nawet krócej niż kawałka - kawałek musisz zaznaczyć żeby skopiować, a całość to Ctrl-A. 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ę »