#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include "time.h"
const int ledPin = 14;
const int buttonPin = 32; // Pin, do którego jest podłączony przycisk
const int buzzerPin = 13; // Pin, do którego jest podłączony buzzer
volatile bool buttonPressed = false;
unsigned long previousMillis = 0;
const unsigned long interval = 1000; // Czas trwania włączenia buzzeru w milisekundach (1 sekunda)
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adres I2C wyświetlacza, liczba kolumn i wierszy
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 3600;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
Wire.begin(18, 5); // Inicjalizacja interfejsu I2C z pinami SDA (D18) i SCL (D5)
lcd.init(); // Inicjalizacja wyświetlacza
lcd.backlight(); // Włącz podświetlenie
pinMode(ledPin, OUTPUT); // pIN led
pinMode(buttonPin, INPUT_PULLUP); // Ustaw przycisk jako wejście z wewnętrznym pull-up
pinMode(buzzerPin, OUTPUT); // Ustaw buzzer jako wyjście
// Connect to Wi-Fi
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected.");
// Init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
printLocalTime();
//disconnect WiFi as it's no longer needed
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
void loop() {
static unsigned long previousMillis = 0; // Czas ostatniego wykonania operacji
const unsigned long interval = 10000; // Interwał czasu w milisekundach (1 minuta)
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
printLocalTime();
previousMillis = currentMillis;
}
// unsigned long currentMillis = millis();
int buttonState = digitalRead(buttonPin);
// Jeśli przycisk jest wciśnięty (stan niski), włącz buzzer
if (buttonState == LOW) {
digitalWrite(buzzerPin, HIGH);
Serial.println(buttonState);
}
else
{
digitalWrite(buzzerPin, LOW); // Wyłącz buzzer, gdy przycisk nie jest wciśnięty
Serial.println(buttonState);
}
// if (currentMillis - previousMillis >= interval) {
// digitalWrite(ledPin, HIGH); // Wyłącz led
// previousMillis = currentMillis;
// }
// else
// {
// digitalWrite(ledPin, LOW); // Wyłącz led
// }
// previousMillis = currentMillis;
}
void printLocalTime(){
struct tm timeinfo;
if(!getLocalTime(&timeinfo)){
Serial.println("Failed to obtain time");
return;
}
adjustTimezone(timeinfo, 1);
Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
Serial.print("Day of week: ");
Serial.println(&timeinfo, "%A");
Serial.print("Month: ");
Serial.println(&timeinfo, "%B");
Serial.print("Day of Month: ");
Serial.println(&timeinfo, "%d");
Serial.print("Year: ");
Serial.println(&timeinfo, "%Y");
Serial.print("Hour: ");
Serial.println(&timeinfo, "%H");
Serial.print("Hour (12 hour format): ");
Serial.println(&timeinfo, "%I");
Serial.print("Minute: ");
Serial.println(&timeinfo, "%M");
Serial.print("Second: ");
Serial.println(&timeinfo, "%S");
Serial.println("Time variables");
char timeHour[3];
strftime(timeHour,3, "%H", &timeinfo);
Serial.println(timeHour);
char timeWeekDay[10];
strftime(timeWeekDay,10, "%A", &timeinfo);
Serial.println(timeWeekDay);
Serial.println();
lcd.setCursor(0, 0);
lcd.print(&timeinfo, "%H:%M:%S");
lcd.setCursor(0, 1);
lcd.print("FeDex");
}
// dodanie 1h dla strefy GTM+1 Polska
void adjustTimezone(struct tm &timeinfo, int timezoneOffsetHours) {
// Dostosuj czas o przesunięcie czasowe w godzinach
timeinfo.tm_hour += timezoneOffsetHours;
if (timeinfo.tm_hour >= 24) {
timeinfo.tm_hour -= 24;
timeinfo.tm_mday += 1;
}
if (timeinfo.tm_hour < 0) {
timeinfo.tm_hour += 24;
timeinfo.tm_mday -= 1;
}
}
bool isTimeInRange(struct tm &timeinfo, int startHour, int startMinute, int endHour, int endMinute) {
int currentHour = timeinfo.tm_hour;
int currentMinute = timeinfo.tm_min;
if (currentHour > startHour && currentHour < endHour) {
return true;
} else if (currentHour == startHour && currentMinute >= startMinute) {
return true;
} else if (currentHour == endHour && currentMinute <= endMinute) {
return true;
}
return false;
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
adjustTimezone(timeinfo, 1);
// Teraz masz aktualny czas w strukturze timeinfo.
if (isTimeInRange(timeinfo, 12, 5, 12, 50)) {
Serial.println("Aktualny czas jest pomiędzy 12:05 a 12:50");
// Wykonaj operacje, gdy jest w tym przedziale czasowym
}
}