#include <Arduino.h>
#include <EEPROM.h>
// maxium of 3 profiles
// one profile correspond to 6 bytes => 18 bytes max
// wifi takes up most at 64 bytes -> start reading at byte 65
#define PROFILE_ADDR 65 // Starting address for color profiles in EEPROM
#define PROFILE_SIZE 7 // Size of each color profile in bytes
String loadColorProfile(int profileNumber) {
char buf[PROFILE_SIZE + 1]; // +1 for null terminator
EEPROM.get(PROFILE_ADDR + (profileNumber - 1) * PROFILE_SIZE, buf);
buf[PROFILE_SIZE] = '\0'; // Ensure null termination
return String(buf);
}
void setColorProfile(int profileNumber, String data) {
if (data.length() > PROFILE_SIZE) {
// Data exceeds profile size limit
return;
}
char buf[PROFILE_SIZE];
data.toCharArray(buf, PROFILE_SIZE);
// Erase previous data
for (int i = 0; i < PROFILE_SIZE; i++) {
EEPROM.write(PROFILE_ADDR + (profileNumber - 1) * PROFILE_SIZE + i, 0);
}
// Write new data
for (int i = 0; i < data.length(); i++) {
EEPROM.write(PROFILE_ADDR + (profileNumber - 1) * PROFILE_SIZE + i, buf[i]);
}
EEPROM.commit();
}
void setup() {
Serial.begin(115200);
EEPROM.begin(128);
}
void loop() {
if (Serial.available() > 0) {
String inp = Serial.readString();
inp.trim();
if (inp == "set") {
Serial.println("Profile? :");
while (Serial.available() <= 0) { delay(10); }
String number = Serial.readString();
number.trim();
Serial.println("Data? :");
while (Serial.available() <= 0) { delay(10); }
String data = Serial.readString();
data.trim();
setColorProfile(number.toInt(), data);
} else if (inp == "load") {
Serial.println("Profile? :");
while (Serial.available() <= 0) { delay(10); }
String number = Serial.readString();
number.trim();
String data = loadColorProfile(number.toInt());
Serial.println(data); // Print loaded data
}
}
delay(10);
}