/* This program is for EEPROM in ESP32,
EEPROM concept in ESP8266 or nodeMCU and Arduino is different
https://pijaeducation.com/eeprom-in-arduino-and-esp/
*/
// include EEPROM Library
#include<EEPROM.h>
/* Defining data storage addresses
As we know size of int is 4 Bytes,
If we store int at index 0 then the next EEPROM address can be anything (4,5..10 etc.) after 4 byte address i.e. (0-3)
You can use this statement to find size of int type data Serial.println(sizeof(int))
*/
//int eepromAddr1 = 0, eepromAddr2 = 10;
//
//// int and string data which we store in EEPROM of Arduino Uno or Arduino Nano etc.
//int intData = 1024;
//String stringData = "My String";
struct TAMANHO_INSUMO
{
int TEMPO_SELAGEM;
int LOCAL_SELAGEM;
int LOCAL_ALIMENTACAO;
};
struct TAMANHO_INSUMO INSUMO[10];
struct ENDERECO_TAMANHOS
{
int TEMPO_SELAGEM;
int LOCAL_SELAGEM;
int LOCAL_ALIMENTACAO;
};
struct ENDERECO_TAMANHOS ENDERECOS[10];
int QUANTIDADE_VARIAVEIS = 3;
int QUANTIDADE_INSUMO = 9;
int insumo_endereco = 0;
int TAMANHO = 0;
int PONTEIRO_TIPO_COLUNA;
int PONTEIRO_TAMANHO_LINHA;
int QUANTIDADE;
int QUANTIDADE_TOTAL;
int ENDERECOS_QUANTIDADE;
int ENDERECOS_QUANTIDADE_TOTAL;
int posicao_endereco = 0;
bool flag_config = false;
bool flag_escolha_OP = false;
bool flag_valor_tempo = false;
// put means writing to EEPROM and get means reading from EEPROM
void setup()
{
Serial.begin(9600);
/* Begin with EEPROM by deciding how much EEPROM memory you want to use.
The ESP32's maximum EEPROM size is 4096 bytes (4 KB), but we're just using 512 bytes here.
*/
EEPROM.begin(512);
delay(500);
int contador = 0;
for (int i = 0; i <= QUANTIDADE_VARIAVEIS; i++)
{
for (int j = 0; j <= QUANTIDADE_INSUMO; j++)
{
switch (i)
{
case 0:
if (j == 0)
{
contador++;
ENDERECOS[j].TEMPO_SELAGEM = 0;
Serial.print(contador);
Serial.print(";TEMPO DE SELAGEM;");
INSUMO[j].TEMPO_SELAGEM = EEPROM.readInt(ENDERECOS[j].TEMPO_SELAGEM);
Serial.print(INSUMO[j].TEMPO_SELAGEM);
Serial.print(";INSUMO ENDERECO;");
Serial.println(ENDERECOS[j].TEMPO_SELAGEM);
}
else if (j > 0)
{
contador++;
insumo_endereco = insumo_endereco + 10;
ENDERECOS[j].TEMPO_SELAGEM = insumo_endereco;
Serial.print(contador);
Serial.print(";TEMPO DE SELAGEM;");
INSUMO[j].TEMPO_SELAGEM = EEPROM.readInt(ENDERECOS[j].TEMPO_SELAGEM);
Serial.print(INSUMO[j].TEMPO_SELAGEM);
Serial.print(";INSUMO ENDERECO;");
Serial.println(ENDERECOS[j].TEMPO_SELAGEM);
}
break;
case 1:
contador++;
insumo_endereco = insumo_endereco + 10;
ENDERECOS[j].LOCAL_SELAGEM = insumo_endereco;
Serial.print(contador);
Serial.print(";LOCAL DA SELAGEM;");
INSUMO[j].LOCAL_SELAGEM = EEPROM.readInt(ENDERECOS[j].LOCAL_SELAGEM);
Serial.print( INSUMO[j].LOCAL_SELAGEM);
Serial.print(";INSUMO ENDERECO;");
Serial.println(ENDERECOS[j].LOCAL_SELAGEM);
break;
case 2:
contador++;
insumo_endereco = insumo_endereco + 10;
ENDERECOS[j].LOCAL_ALIMENTACAO = insumo_endereco;
Serial.print(contador);
Serial.print(";LOCAL DE ALIMENTACAO;");
INSUMO[j].LOCAL_ALIMENTACAO = EEPROM.readInt(ENDERECOS[j].LOCAL_ALIMENTACAO);
Serial.print(INSUMO[j].LOCAL_ALIMENTACAO);
Serial.print(";INSUMO ENDERECO;");
Serial.println(ENDERECOS[j].LOCAL_ALIMENTACAO);
break;
case 3:
break;
case 4:
break;
default:
break;
}
}
// Serial.println("→→→→→→→→→→→→→→→→");
}
insumo_endereco = insumo_endereco + 10;
ENDERECOS_QUANTIDADE = insumo_endereco;
Serial.print("QUANTIDADE:");
Serial.print(EEPROM.readInt(ENDERECOS_QUANTIDADE));
Serial.print("→QUANTIDADE ENDERECO:");
Serial.println(insumo_endereco);
insumo_endereco = insumo_endereco + 10;
ENDERECOS_QUANTIDADE_TOTAL = insumo_endereco;
Serial.print("QUANTIDADE TOTAL:");
Serial.print(EEPROM.readInt(ENDERECOS_QUANTIDADE_TOTAL));
Serial.print("→QUANTIDADE TOTAL ENDERECO:");
Serial.println(insumo_endereco);
//fim da eeprom
// User's message
// Serial.println("To put int Send → 'int' ");
// Serial.println("To put String Send → 'string' ");
// Serial.println("To get data Send → 'leitura' ");
// Serial.println("To clear EEPROM Send → 'clear' ");
}
void loop()
{
if (Serial.available())
{
String str = Serial.readString();
delay(10);
Serial.println("");
Serial.print("Input → ");
Serial.println(str);
if(str=="config\n")
{
flag_config = true;
Serial.println("Entrou em config.");
while(flag_config == true)
{
str = Serial.readString();
if(str=="50x50")
{
Serial.println("INSUMO 50X50");
Serial.println("ESCOLHA A OPÇAO;");
Serial.println("1.TEMPO DA SOLDA");
Serial.println("2.LOCAL DA SOLDA");
Serial.println("3.LOCAL DE ALIMENTACAO");
flag_escolha_OP = true;
while(flag_escolha_OP == true)
{
str = Serial.readString();
if(str == "1")
{
Serial.println("TEMPO DA SOLDA");
Serial.println("DIGITE O VALOR DE TEMPO DE SOLDA ou SAIR");
flag_valor_tempo = true;
while(flag_valor_tempo == true)
{
if(Serial.available() && str!="SAIR")
{
str = Serial.readString();
posicao_endereco = 0;
Serial.print("TEMPO ANTERIOR =");
Serial.println(EEPROM.readInt(ENDERECOS[posicao_endereco].TEMPO_SELAGEM));
INSUMO[posicao_endereco].TEMPO_SELAGEM = EEPROM.readInt(ENDERECOS[posicao_endereco].TEMPO_SELAGEM)+str.toInt();
EEPROM.writeInt(ENDERECOS[posicao_endereco].TEMPO_SELAGEM, INSUMO[posicao_endereco].TEMPO_SELAGEM );
EEPROM.commit();
Serial.print("TEMPO DO ENDERECO[");
Serial.print(ENDERECOS[posicao_endereco].TEMPO_SELAGEM);
Serial.print("]=");
Serial.println(EEPROM.readInt(ENDERECOS[posicao_endereco].TEMPO_SELAGEM));
}
if(str == "SAIR")
{
Serial.println("SAINDO");
Serial.println("DIGITE CONFIGURACOES");
flag_valor_tempo = false;
flag_escolha_OP = false;
flag_config = false;
}
}
}
if(str == "2")
{
Serial.println("LOCAL DA SOLDA");
}
if(str == "3")
{
Serial.println("LOCAL DE ALIMENTACAO");
}
}
}
if(str=="saiu")
{
Serial.println("saiu em config.");
flag_config = false;
}
}
}
/* If the user enters 'read' as input,
we will read from the EEPROM using 'readInt and readString' function.
*/
// if(str == "read")
// {
// int rInt = EEPROM.readInt(eepromAddr1);
// String rString = EEPROM.readString(eepromAddr2);
// Serial.println("Read from EEPROM");
// Serial.print("Int:");
// Serial.println(rInt);
// Serial.print("Str:");
// Serial.println(rString);
// }
/* if user send 'int' as input
then we will write to EEPROM using 'EEPROM.writeInt' function
*/
// else if (str == "int")
// {
// EEPROM.writeInt(eepromAddr1, intData);
// EEPROM.commit();
// Serial.println("intData write in EEPROM is Successful");
// }
// /* if user send 'string' as input
// then we will write to EEPROM using 'EEPROM.writeString' function
// */
// else if (str == "string")
// {
// EEPROM.writeString(eepromAddr2, stringData);
// EEPROM.commit();
// Serial.println("stringData write in EEPROM is Successful");
// }
// /* if user send 'clear' as input
// then we will clear data from EEPROM
// */
// else if (str == "clear")
// {
// for (int i = 0 ; i < 512 ; i++)
// {
// EEPROM.write(i, 0);
// }
// // Don't forget EEPROM.end();
// EEPROM.end();
// Serial.println("EEPROM Clear Done!");
// }
// // Provide a reply if the input does not match.
// else
// {
// Serial.println("Invalid Input");
// }
}
}