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

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ę »
×
×
  • 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.