#include <esp_task_wdt.h>
#define WDT_TIMEOUT 5
#define SW1 16
#define SW2 17
#define SW3 5
#define LED 25
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "EEPROM.h"
#define EEPROM_SIZE 50
int lasttime;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire);
char buffString[100];
int adc;
int adc8;
int address=0;
int current = 0;
bool student = false;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
if (!EEPROM.begin(EEPROM_SIZE)) {
Serial.println("Failed init EEPROM");
delay(1000);
ESP.restart();
}
//esp_task_deinit();
//esp_task_wdt_config_t wdt_config ={
//.timeout_ms =WDT_TIMEOUT *1000,
//.idle_core_mask = (1 << portNUM_PROCESSORS)-1,
// .trigger_panic =true
//};
//WDT init
//esp_task_wdt_init(&wdt_config);
//esp_task_wdt_add(NULL);
Serial.println("Success init EEPROM");
EEPROM.writeInt(0, 0);
EEPROM.commit();
EEPROM.writeInt(46, 0);
EEPROM.commit();
Serial.println("Hello, ESP32!");
pinMode(LED, OUTPUT);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
pinMode(SW3, INPUT_PULLUP);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
}
display.display();
delay(2000);
display.clearDisplay();
// Test Draw Char
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println(F("Lab9"));
display.setCursor(0, 16);
display.println(F("Embed"));
display.display();
delay(2000);
}
void loop() {
adc = analogRead(34);
adc8 = (adc * 255) / 4095;
Serial.print(adc);
Serial.print(", ");
Serial.println(adc8);
if (!student)
{
current = EEPROM.readInt(0);
}
else
{
current = EEPROM.readInt(46);
}
display.display();
display.clearDisplay();
// Test Draw Char
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("EEPROM ADC: ");
display.print(adc);
display.setCursor(0, 16);
sprintf(buffString, "Address %d(%03x)", address, address);
display.print(buffString);
display.setCursor(0, 32);
display.print("DATA: ");
display.print(current);
Serial.println(address);
display.display();
if(millis()-lasttime>=5000)
{
lasttime=millis();
if (digitalRead(SW1) == LOW) {
current = EEPROM.readInt(46);
analogWrite(LED, current);
Serial.println("sw1");
address = 46;
student = true;
} else if (digitalRead(SW2) == LOW) {
current = EEPROM.readInt(0);
analogWrite(LED, current);
address = 0;
student = false;
} else if (digitalRead(SW3) == LOW) {
if (!student)
{
EEPROM.writeInt(0, adc8);
EEPROM.commit();
current = EEPROM.readInt(0);
analogWrite(LED, current);
}
else
{
EEPROM.writeInt(46, adc8);
EEPROM.commit();
current = EEPROM.readInt(46);
analogWrite(LED, current);
}
}
if(digitalRead(SW3) == LOW)
{
esp_task_wdt_reset();
}
delay(10); // this speeds up the simulation
}
}