Skocz do zawartości

Błąd wyświetlania godziny ESP8266 Zegar NTP OLED


qwazi8977

Pomocna odpowiedź

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();
}

 

IMG_20221004_021743[1].jpg

Edytowano przez qwazi8977
  • Lubię! 1
Link do komentarza
Share on other sites

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);

 

  • Lubię! 2
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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  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) 🙂

 

 

Link do komentarza
Share on other sites

- 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")

 

ssd1306.jpg

Edytowano przez 99teki
Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.