#include <Preferences.h>
#include <WiFi.h>
// Objekat Preferences
Preferences preferencesTimer;
// Broj digitalnih izlaza
const int numOutputs = 8;
// Pinovi za izlaze
const int outputPins[numOutputs] = {2, 3, 4, 5, 6, 7, 8, 9};
const char* ssid = "Wokwi-GUEST";
const char* password = "";
void setup() {
Serial.begin(115200);
// Primer teksta koji sadrži znak |
char text[] = "7|1|0|1709925300|1709946000";
char *token = strtok(text, "|");
// Ispisivanje prvog dela teksta
if (token != NULL) {
Serial.println(token);
}
// Podela teksta na delove koristeći znak |
int i = 0;
String port = "";
String aktivan = "";
String ponavljamje = "";
String pocetak = "";
String kraj = "";
while (token != NULL) {
if (i == 0) {
port = token;
}
if (i == 1) {
aktivan = token;
}
if (i == 2) {
ponavljamje = token;
}
if (i == 3) {
pocetak = token;
}
if (i == 4) {
kraj = token;
}
token = strtok(NULL, "|");
i++;
}
Serial.println(port);
Serial.println(aktivan);
Serial.println(ponavljamje);
Serial.println(pocetak);
Serial.println(kraj);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(200);
Serial.print(".");
delay(200);
}
// Otvaranje Preferences
preferencesTimer.begin("timer_prefs", false);
for (int i = 0; i < 1; i++) {
preferencesTimer.putULong(("onTime_" + String(i)).c_str(), 1709666669);
preferencesTimer.putULong(("offTime_" + String(i)).c_str(), 1709666729);
preferencesTimer.putBool(("ponavljanje_" + String(i)).c_str(), true);
}
configTime(3600, 0, "pool.ntp.org", "time.nist.gov");
// Dobijanje trenutnog vremena
time_t now = time(nullptr);
// Pretvaranje trenutnog vremena u timestamp
unsigned long timestamp = (unsigned long)now;
while (timestamp < 1510592825) {
delay(200);
now = time(nullptr);
timestamp = (unsigned long)now;
Serial.println(timestamp);
}
Serial.println("done!");
}
void loop() {
time_t now = time(nullptr);
unsigned long timestamp = (unsigned long)now;
timestamp = (unsigned long)now;
Serial.println(timestamp);
// Provera tajmera za svaki izlaz
for (int i = 0; i < 8; i++) {
unsigned long onTimeSeconds = preferencesTimer.getULong(("onTime_" + String(i)).c_str(), 0);
unsigned long offTimeSeconds = preferencesTimer.getULong(("offTime_" + String(i)).c_str(), 0);
bool ponavljanje = preferencesTimer.getBool(("ponavljanje_" + String(i)).c_str(), false);
//Ovde ide provera vremena ukljucenja i iskljucenja
if (onTimeSeconds != 0 || offTimeSeconds != 0) {
//Ako postoji vreme ukljucenja za odredjeni pin
Serial.println(onTimeSeconds);
if (onTimeSeconds != 0) {
if (onTimeSeconds < timestamp) {
Serial.println('Prebacuje se na 1');
if (ponavljanje) {
preferencesTimer.putULong(("onTime_" + String(i)).c_str(), onTimeSeconds + 86400);
} else {
preferencesTimer.putULong(("onTime_" + String(i)).c_str(), 0);
}
}
}
//Ako postoji vreme iskljucenja za odredjeni pin
if (offTimeSeconds != 0) {
Serial.println(offTimeSeconds);
if (offTimeSeconds < timestamp) {
Serial.println('Prebacuje se na 0');
if (ponavljanje) {
preferencesTimer.putULong(("offTime_" + String(i)).c_str(), onTimeSeconds + 86400);
} else {
preferencesTimer.putULong(("offTime_" + String(i)).c_str(), 0);
}
}
}
delay(500);
}
}
delay(1000); // Sačekaj sekundu prije ponovne provere
}
// Funkcija za dobijanje vremena u sekundama za određeni čas i minut
unsigned long getTimeInSeconds(int hour, int minute) {
return hour * 3600UL + minute * 60UL;
}
// Funkcija za ispisivanje vremena u formatu "hh:mm"
void printTime(unsigned long timeInSeconds) {
unsigned long hours = timeInSeconds / 3600;
unsigned long minutes = (timeInSeconds / 60) % 60;
Serial.print(hours);
Serial.print(":");
if (minutes < 10) {
Serial.print("0");
}
Serial.print(minutes);
Serial.println();
}