Хранение значений - GyverLibs/GyverPortal GitHub Wiki
Основное применение веб интерфейса - настройка устройства. То есть нужно отобразить текущие значения из программы, иметь возможность их поменять и показать актуальные при следующей загрузке страницы. Таким образом значения компонентов из конструктора нужно брать из переменных, а при изменении записывать их в эти же переменные. Простой пример со слайдером, в котором значение хранится в глобальной переменной sld
, передаётся в конструктор, а также принимает новое значение по клику:
int sld;
void build() {
GP.BUILD_BEGIN();
GP.THEME(GP_DARK);
GP.SLIDER("sld", sld);
GP.BUILD_END();
}
void action() {
portal.clickInt("sld", sld);
}
Упаковка в структуру
При использовании нескольких компонентов бывает удобно объединить переменные в структуру:
struct Data {
int sld;
bool sw;
};
Data data;
void build() {
GP.BUILD_BEGIN();
GP.THEME(GP_DARK);
GP.SWITCH("sw", data.sw);
GP.BREAK();
GP.SLIDER("sld", data.sld);
GP.BUILD_END();
}
void action() {
portal.clickInt("sld", data.sld);
portal.clickBool("sw", data.sw);
}
Хранение в EEPROM
Также это позволит удобно хранить все настройки в EEPROM, например с библиотекой EEManager:
struct Data {
int sld;
bool sw;
};
Data data;
#include <EEManager.h>
EEManager memory(data);
void setup() {
// ....
EEPROM.begin(100);
memory.begin(0, 0);
}
void build() {
GP.BUILD_BEGIN();
GP.THEME(GP_DARK);
GP.SWITCH("sw", data.sw);
GP.BREAK();
GP.SLIDER("sld", data.sld);
GP.BUILD_END();
}
void action() {
if (portal.click()) {
portal.clickInt("sld", data.sld);
portal.clickBool("sw", data.sw);
memory.update();
}
}
void loop() {
memory.tick();
}
Теперь позиция слайдера и состояния чекбокса будут сохраняться при перезагрузке esp.