#include <EEPROM.h>
const int EEPROM_DELAY_FACTOR_ADDR = 0;
const int EEPROM_IS_DELAY_DECREASING_ADDR = 1;
const int IS_DELAY_DECREASING = 0;
const int IS_DELAY_INCREASING = 1;
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
if (EEPROM.read(EEPROM_DELAY_FACTOR_ADDR) == 255) {
EEPROM.update(EEPROM_DELAY_FACTOR_ADDR, 1);
}
if (EEPROM.read(EEPROM_IS_DELAY_DECREASING_ADDR) == 255) {
EEPROM.update(EEPROM_IS_DELAY_DECREASING_ADDR, IS_DELAY_DECREASING);
}
}
// the loop function runs over and over again forever
void loop() {
int storedDelayFactor = EEPROM.read(EEPROM_DELAY_FACTOR_ADDR);
double delayFactor = 1 + (double)storedDelayFactor / 2;
bool isDelayDecreasing = EEPROM.read(EEPROM_IS_DELAY_DECREASING_ADDR) == IS_DELAY_DECREASING;
int currentDelay = 1000 / delayFactor;
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(currentDelay); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(currentDelay);
if (currentDelay >= 1000) {
EEPROM.update(EEPROM_IS_DELAY_DECREASING_ADDR, IS_DELAY_DECREASING);
isDelayDecreasing = true;
} else if (currentDelay <= 100) {
EEPROM.update(EEPROM_IS_DELAY_DECREASING_ADDR, IS_DELAY_INCREASING);
isDelayDecreasing = false;
}
if (isDelayDecreasing) {
EEPROM.update(EEPROM_DELAY_FACTOR_ADDR, storedDelayFactor + 1);
} else {
EEPROM.update(EEPROM_DELAY_FACTOR_ADDR, storedDelayFactor - 1);
}
}