Romann Napisano Wrzesień 27, 2021 Udostępnij Napisano Wrzesień 27, 2021 Cześć Tło: mam nikłe pojęcie o programowaniu, ale postanowiłem spróbować wykonać specyficzny termostat sterujący grzałką. Temperatura ma się zmieniać codziennie w zależności od tego czy dzień jest parzysty czy nieparzysty. Przy braku umiejętności chciałem sobie poradzić idąc krok po kroku i rozszerzać program o kolejne dodatki gdy poprzedni kod będzie działać. W poniższym tylko kawałek z odczytem zegara jest kradziony z http://www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-ds3231.html bo nie mogłem sobie poradzić samodzielnie... okazało się że płytka z zegarkiem była uszkodzona i na innej ruszyło bez kłopotu. Urządzenia: UNO, DS3231, LCD Shield, przekaźnik podpięty pod D0. Historia: Program z jakiegoś powodu nie zmienia stanu pinu przelaznik1, pomimo że wykonuje kod z danego case (czyli zmieniają się liczby 20 na 30 na 20) ale przekaźnik się nie załącza. Gdzieś zrobiłem błąd i nie mogę go znaleźć, co ciekawe jeśli wstawię delay(500); digitalWrite(przekaznik1, HIGH);delay(500);digitalWrite(przekaznik1,LOW); jako pierwszą linię w pętli to przekaźnik pstryka zgodnie z oczekiwaniem. Ale jeśli ten sam kod wkleję powyżej switch to się nie uruchamia. Będę wdzięczny za jakiekolwiek wskazówki :) #include <DallasTemperature.h> // Konieczne do działania termometru DS18b20 #include <LiquidCrystal.h> // Wyświetlacz #include <DS3231.h> // zegar czasu rzeczywistego #include <Wire.h> #define przekaznik1 0 LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD Shield OneWire OneWire(A1); // podpinamy termometr DS18b20 pod A1 DallasTemperature sensors(&OneWire); DS3231 rtc; RTCDateTime dt; int DM; //dzień miesiąca int tpar = 30; // temperatura dzień parzysty int tnpar = 20; // temperatura dzień nieparzysty int tset = 66; int parz; void setup() { pinMode(przekaznik1, OUTPUT); // ustawiamy pin D0 jako wyjściowy sensors.begin(); // Inicjalizacja czujnika. lcd.begin(16, 2); // Inicjalizacja wyświetlacza LCD Serial.begin(57600); rtc.begin(); } void loop() { sensors.requestTemperatures(); //pobieramy temperaturę z czujnika lcd.setCursor(0, 0); //ustawia kursor w górnej linii na pierwszym znaku lcd.print("CUR:"); // wyświetla napis CUR: lcd.setCursor(4, 0); // Ustawiamy kursor w górnej linii na piątym znaku lcd.print(sensors.getTempCByIndex(0)); // piszemy aktualną temp w górnej linijce wyświetlacza lcd.setCursor(10, 0); // ustawia kursor na 11 znaku górnej linii lcd.print("SET:"); // wyświetla napis SET: lcd.setCursor(0, 1); // ustawia kursor na pierwszym znaku dolnej linii dt = rtc.getDateTime(); // ustawia zmienną dt na wartość pobraną z zegara lcd.print(dt.day); // wyświetla dzień miesiąca lcd.print("-"); // wyświetla - lcd.print(dt.month); // wyświetla cyfrę miesiąca lcd.print(" "); // wyświetla pusty znak lcd.print(dt.hour); lcd.print(":"); //wyświetla godziny i znak : lcd.print(dt.minute); lcd.print(":"); //wyświetla minuty i znak : lcd.print(dt.second); //wyświetla godzinę DM = dt.second; // ustawia zmienną DM (dzień miesiąca) - tymczasowo włączone sekundy żeby dało się szybko testować nie czekając dni na zmianę stanu pin parz = (DM%2); //sprawdzenie czy dzień miesiąca jest liczbą parzystą switch (parz) { // wstawiam parzystość do funkcji switch case 0: // jeśli parz jest liczbą parzystą (zwraca 0) to wykonuje ten przypadek tset = tpar; // temperaturę tset wstawiam dla dnia parzystego lcd.setCursor(14, 0); //ustawia kursor w 15 znaku górnej linii lcd.print(tset); //wyświetla na ekranie ustawioną temperaturę digitalWrite(przekaznik1, LOW); //wyłącza przekaźnik grzałki break; default: //jeśli parz jest inne niż "0" wykonuje domyślną sekwencję tset = tnpar; // ustawia temperaturę dla dnia nieparzystego lcd.setCursor(14, 0); //ustawia kursor w 15 znaku górnej linii lcd.print(tset); //wyświetla ustawioną temperaturę digitalWrite(przekaznik1, HIGH); //włącza przekaźnik grzałki break; } } Pozdrawiam Roman Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Wrzesień 28, 2021 Udostępnij Wrzesień 28, 2021 Co wyście się tak uparli podłączać przekaźnik do UART-a? Nic dziwnego że nie działa. Zasada numer jeden: nie używać pinów 0 i 1 bo są zarezerwowane dla seriala. Taj samo jeśli używasz Wire (inaczej I2C) nie używasz w programie A4 i A5 bol to to samo co SCL i SDA. Cytuj Link do komentarza Share on other sites More sharing options...
BananWszyscy Wrzesień 28, 2021 Udostępnij Wrzesień 28, 2021 (edytowany) Polecam zajrzeć do dokumentacji... już któryś raz na tym forum to wklejam Edytowano Wrzesień 28, 2021 przez BananWszyscy Cytuj Link do komentarza Share on other sites More sharing options...
Romann Wrzesień 28, 2021 Autor tematu Udostępnij Wrzesień 28, 2021 (edytowany) O ja głupa pipa! Zapomniałam! 😉 Serdecznie dziękuję za pomoc, nie mogłem ogarnąć czemu działa w jednym, a nie działa w drugim. W sumie dalej nie rozumiem tego że działa "trochę" na pinie D0 (w zależności od miejsca umieszczenia w skrypcie), ale to póki co nie spędza mi snu z powiek 😉 O A4/A5 sobie doczytałem 🙂 Edytowano Wrzesień 28, 2021 przez Romann 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
ethanak Wrzesień 28, 2021 Udostępnij Wrzesień 28, 2021 20 minut temu, Romann napisał: W sumie dalej nie rozumiem tego że działa "trochę" na pinie D0 (w zależności od miejsca umieszczenia w skrypcie) Ależ to elementarne, drogi Watsonie 🙂 Po prostu wykonujesz pinMode(0, OUTPUT) i od tej chwili pin jest normalnym wyjściem. Ale jeśli gdzieś po drodze będziesz miał Serial.cośtam() - pin przestanie być wyjściem i zostanie przypięty do UART-a. Cytując znany dowcip: Cytat Jednocześnie do Krakowa i Bytomia wyjechać nie idzie. Cytuj Link do komentarza Share on other sites More sharing options...
Romann Wrzesień 28, 2021 Autor tematu Udostępnij Wrzesień 28, 2021 Ach! Czyli "arduino samosie"! Dziękuję za wyjaśnienie =D 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!