Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 35 additions & 6 deletions firmware/microReader-v1.0/microReader-v1.0.ino
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#define VBAT_FULL_MV 3600 // Напряжение питания при заряженном аккуме в (мВ)
#define VBAT_EMPTY_MV 2600 // Напряжение питания при севшем аккуме в (мВ)
#define _EB_DEB 25 // Дебаунс кнопок (мс)
#define MAX_FILENAME_SIZE 10 // Ограничение на длину файлов (!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! не превышать undefined behavior)
/* =========================================== */
/* ============ Список библиотек ============= */
#include <Wire.h> // Либа I2C
Expand Down Expand Up @@ -59,6 +60,7 @@ byte files = 0; // Количество файло
int batMv = 3000; // Напряжение питания ESP
uint32_t uiTimer = 0; // Таймер таймаута дисплея
uint32_t batTimer = 0; // Таймер опроса АКБ
char* file_names;
/* =========================================== */

/* ============================ setup + loop ============================= */
Expand Down Expand Up @@ -97,6 +99,8 @@ void setup() {
oled.setContrast(con); // Тут же задаем яркость оледа
batMv = ESP.getVcc(); // Читаем напряжение питания
files = getFilesCount(); // Читаем количество файлов
file_names = (char*)malloc(sizeof(byte) * files * MAX_FILENAME_SIZE);
fillFileNames();
uiTimer = millis(); // Сбрасываем таймер дисплея
drawMainMenu(); // Рисуем главное меню
}
Expand All @@ -110,7 +114,7 @@ void loop() {
uiTimer = millis(); // Сбрасываем таймер дисплея
cursor = constrain(cursor - 1, 0, files - 1); // Двигаем курсор
drawMainMenu(); // Обновляем главное меню
} else if (down.isClick() or up.isHold()) { // Если нажата или удержана кнопка вниз
} else if (down.isClick() or down.isHold()) { // Если нажата или удержана кнопка вниз
uiTimer = millis(); // Сбрасываем таймер дисплея
cursor = constrain(cursor + 1, 0, files - 1); // Двигаем курсор
drawMainMenu(); // Обновляем главное меню
Expand Down Expand Up @@ -174,11 +178,36 @@ void action(GyverPortal& p) { // Подсос значений со стр
/* ======================================================================= */
/* ========================== Работа с файлами =========================== */
String getFilenameByIndex(int idx) { // Вывод имени файла по номеру
String ans = "";
for (int i = idx * sizeof(char) * MAX_FILENAME_SIZE; i < (idx + 1) * sizeof(char) * MAX_FILENAME_SIZE; i++){
if (file_names[i] != '\0'){
ans += file_names[i];
} else {
break;
}
}
return ans;
// Dir root = LittleFS.openDir("/"); // Открываем директорию (корень)
// for (int i = 0; root.next(); i++) { // Шагаем по директории
// if (i != idx) continue; // Если не тот файл по номеру - в начало цикла
// return ("/" + root.fileName()); // Нужный файл - возвращаем имя + путь
// }
}

void fillFileNames(){
Dir root = LittleFS.openDir("/"); // Открываем директорию (корень)
for (int i = 0; root.next(); i++) { // Шагаем по директории
if (i != idx) continue; // Если не тот файл по номеру - в начало цикла
return ("/" + root.fileName()); // Нужный файл - возвращаем имя + путь
}
int i = 0;
while (root.next()) { // Шагаем по директории
File file = root.openFile("r"); // Открываем файл для чтения
if (file){
for (int j = 0; j < root.fileName().length(); j++){
file_names[i * sizeof(char) * MAX_FILENAME_SIZE + j] = root.fileName()[j];
}
file_names[i * sizeof(char) * MAX_FILENAME_SIZE + root.fileName().length()] = '\0';
i++;
} // Если с файлом все ОК - инкремент
file.close(); // Закрываем файл
}
}

int getFilesCount(void) { // Вывод количества файлов в системе
Expand Down Expand Up @@ -402,7 +431,7 @@ void enterToReadFile(void) { // Режим чтения
down.tick();
if (ok.isClick()) { // Если ок нажат
uiTimer = millis(); // Сбрасываем таймер дисплея
files = getFilesCount(); drawMainMenu(); // Смотрим количество файлов и рисуем главное меню
drawMainMenu(); // Смотрим количество файлов и рисуем главное меню
file.close(); return; // Закрываем файл и выходим
} else if (up.isClick() or up.isHold()) { // Если нажата или удержана вверх
uiTimer = millis(); // Сбрасываем таймер дисплея
Expand Down