qwazi8977 Napisano Październik 4, 2022 Udostępnij Napisano Październik 4, 2022 (edytowany) Odpaliłem zegarek wg projektu: https://youtube.com/c/samvidita. Na początku pokazywał błędną datę i godzinę. Po Paru zmianach kodu mam właściwą datę i minuty. Godzina cały czas jest "00". Ktoś pomoże? Wklejam kod po zmianach. /***************************NodeMCU Internet Clock********************************* Subscribe to our YouTube channel: https://youtube.com/c/samvidita Like our page on Facebook: https://facebook.com/samvidita Follow us on Instagram: https://instagram.com/samvidita ******************************************************************************/ /*------------------------------------Program------------------------------------*/ #include <NTPClient.h> #include <ESP8266WiFi.h> #include <WiFiUdp.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels const char *ssid = "Jacek_dom"; const char *password = "XXXXX"; const long utcOffsetInSeconds = 3600; //UTC offset in seconds char days[7][12] = {"NIE", "PON", "WTO", "SRO", "CZW", "PIA", "SOB"}; char month[12][4] = {"Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paz", "Lis", "Gru"}; WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", 3600, 60000); //create object of NTP client Adafruit_SSD1306 display(128, 64, &Wire, -1); //create object of ssd1306 -1 no hardware rest pin void setup() { Serial.begin(115200); if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address for 128x64 Serial.println(F("SSD1306 allocation failed")); for (;;); } delay(2000); /*intialize OLED display*/ display.clearDisplay(); display.setCursor(0, 0); display.setTextSize(1); display.setTextColor(WHITE); display.setCursor(10, 28); display.setTextSize(2); display.print(" Jacek"); delay(2500); display.display(); display.clearDisplay(); display.setCursor(3, 28); display.setTextSize(2); display.setTextColor(WHITE); /*Connect to the WiFi*/ WiFi.begin(ssid, password); display.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(800); //Serial.print ("."); display.print("."); display.display(); } display.setCursor(0, 0); display.setTextSize(1); display.clearDisplay(); timeClient.begin(); } void loop() { timeClient.update(); //upadte time displayTimeDate(); //display time on OLED delay(100); } void displayTimeDate() { String meridiem; int hour; /*Calculate time and date*/ unsigned long epochTime = timeClient.getEpochTime(); struct tm *ptm = gmtime ((time_t *)&epochTime); int date = ptm->tm_mday - 6; int monthNum = ptm->tm_mon + 4; int year = ptm->tm_year + 3069641; String day = days[timeClient.getDay()]; int hours = timeClient.getHours(); int minute = timeClient.getMinutes(); int second = timeClient.getSeconds(); /*Convert 24hr format to 12hr format*/ /*if(timeClient.getHours() >= 12) { meridiem = "PM"; hour = timeClient.getHours() - 12; } else { meridiem = "AM"; hour = timeClient.getHours(); } if(hour == 0) { hour = 12; } /*Display time on OLED display*/ display.clearDisplay(); display.setTextSize(2); display.setCursor(5, 10); display.print(day); display.setTextSize(3); display.setCursor(58, 6); if (date < 10) display.print(0); display.print(date); display.setTextSize(1); display.setCursor(97, 8); display.print(month[monthNum - 1]); display.setCursor(97, 20); display.print(year); display.setCursor(5, 39); display.setTextSize(3); if (hour < 10) display.print(0); display.print(hour); display.print(":"); if (minute < 10) display.print(0); display.print(minute); display.setTextSize(2); display.setCursor(100, 37); if (second < 10) display.print(0); display.print(second); display.setTextSize(1); display.setCursor(100, 55); display.print(meridiem); display.display(); } Edytowano Październik 4, 2022 przez qwazi8977 1 Cytuj Link do komentarza Share on other sites More sharing options...
Elvis Październik 4, 2022 Udostępnij Październik 4, 2022 Używanie bardzo podobnych nazw zmiennych to nienajlepszy pomysł: int hour; int hours = timeClient.getHours(); Zmiennej hours przypisujesz wartość, ale używasz hour. 1 Cytuj Link do komentarza Share on other sites More sharing options...
qwazi8977 Październik 4, 2022 Autor tematu Udostępnij Październik 4, 2022 To co mam zmienić, aby kompilacja przeszła? Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Październik 4, 2022 Udostępnij Październik 4, 2022 4 godziny temu, qwazi8977 napisał: To co mam zmienić, aby kompilacja przeszła? Nigdzie nie piszesz, że program się nie kompiluje. Problem jaki zgłaszasz to taki, że godzina to zawsze 0. @Elvis zwraca Ci uwagę, że próbujesz wyświetlać zawartość zmiennej hour, którą zadeklarowałeś bez przypisania jej wartości więc w wyniku kompilacji zmienna ta ma wartość 0. Swój czas "pobierasz" do innej zmiennej int hours = timeClient.getHours(); Zwróć uwagę że hour i hours to dwie różne zmienne. By to poprawić zamień : if (hour < 10) display.print(0); display.print(hour); na: if (hours < 10) display.print(0); display.print(hours); 2 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
qwazi8977 Październik 4, 2022 Autor tematu Udostępnij Październik 4, 2022 Dzięki. Działa!!!😀 Działający kod: NTPclient.zip 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Październik 5, 2022 Udostępnij Październik 5, 2022 @qwazi8977 pomocne posty można odpowiednio oceniać (ikona serca w prawym dolnym rogu wiadomości). Dzięki temu można podziękować bezpośrednio autorowi i wyróżnić daną odpowiedź, aby inni od razu widzieli, że jest ona rozwiązaniem opisywanego problemu. Zachęcam do korzystania z tej opcji (przy okazji każdego głosowania zdobywasz też punkty podnoszące Twoją rangę na forum) 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
99teki Październik 10, 2022 Udostępnij Październik 10, 2022 (edytowany) - dzięki za kod, też mam SSD1306 do wyświetlania czasu, temperatury, oświetlenia oraz muzyki z mp3 ale zbudowany na esp32 LOLIN32. - czas pobieram z serwera ntp. - na dniach zmieniam SSD1306 na SSH1106 (OLED 1.3") Edytowano Październik 10, 2022 przez 99teki 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!