#include <FS.h>
#include "SPIFFS.h"
#include <WiFi.h>
#include "time.h"
#define ledPin 19
const int buttonPin = 21;
int lastTimePressed = 0;
bool isLedOn = false;
unsigned short debounceDelay = 300;
const char* ssid = "POCO X3 Pro";
const char* password = "senhacomplicadaegrande";
const char* ntpServer = "time.google.com";
const long gmtOffset_sec = 0;
const int daylightOffset_sec = 3600;
void writeFile(String state, String path) { //sobrescreve conteúdo em um arquivo
File rFile = SPIFFS.open(path, "w");
if (!rFile) {
Serial.println("Erro ao abrir arquivo!");
}
else {
Serial.print("tamanho");
Serial.println(rFile.size());
rFile.print(state);
Serial.print("Gravou: ");
Serial.println(state);
}
rFile.close();
}
void appendToFile(String state, String path) { //adiciona conteúdo em um arquivo
File rFile = SPIFFS.open(path, "a");
if (!rFile) {
Serial.println("Erro ao abrir arquivo!");
}
else {
Serial.print("tamanho");
Serial.println(rFile.size());
rFile.print(state);
Serial.print("Gravou: ");
Serial.println(state);
}
rFile.close();
}
String readFile(String path) {
String s;
Serial.println("Read file");
File rFile = SPIFFS.open(path, "r");//r+ leitura e escrita
if (!rFile) {
Serial.println("Erro ao abrir arquivo!");
return "";
}
else {
Serial.print("----------Lendo arquivo ");
Serial.print(path);
Serial.println(" ---------");
while (rFile.position() < rFile.size())
{
s = rFile.readStringUntil('\n');
s.trim();
Serial.println(s);
}
rFile.close();
return s;
}
}
void formatFile() {
Serial.println("Formantando SPIFFS");
// SPIFFS.format();
Serial.println("Formatou SPIFFS");
}
void openFS(void) {
if (!SPIFFS.begin(true)) {
Serial.println("\nErro ao abrir o sistema de arquivos");
}
else {
Serial.println("\nSistema de arquivos aberto com sucesso!");
}
}
void setup() {
Serial.begin(115200);
delay(100);
Serial.println("inicio");
// 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.");
delay(1000);
// Init and get the time
configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
delay(200);
Serial.println("abrir arquivo");
openFS();
Serial.println("ler arquivo");
String read = readFile("/led.txt");
int ledOn = 0;
if (read == "") {
writeFile("0", "/led.txt");
} else {
ledOn = read.toInt();
}
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(ledPin, (ledOn) ? HIGH : LOW);
}
void loop() {
char buffer[40];
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
Serial.println("Failed to obtain time");
return;
}
if ((digitalRead(buttonPin) == HIGH) && ((millis() - lastTimePressed) > debounceDelay)) {
//Serial.println("bbbb");
isLedOn = !isLedOn;
digitalWrite(ledPin, (isLedOn) ? HIGH : LOW);
writeFile(String(isLedOn), "/led.txt");
//sprintf(buffer, "Led start %d at %A, %B %d %Y %H:%M:%S", isLedOn, timeinfo);
Serial.println("aaa");
strftime(buffer, sizeof(buffer), "%A, %B %d %Y %H:%M:%S", &timeinfo);
appendToFile(buffer, "/logs.txt");
lastTimePressed = millis();
}
//delay(1000);
}