Модуль читает построково файл лога и отображает значения на дисплее в определенном порядке
C++
void graph_log() // Функция вывода лога в графическом представлении
{
File logFile_graph = SD.open("/log.txt", FILE_READ);
if (logFile_graph)
{
int sum_line = countLinesInFile(logFile_graph); // 1334
//Serial.print("countLinesInFile: ");
//Serial.println(sum_line);
logFile_graph.seek(pos_graf_log); // Перемещаем указатель файла на последнюю позицию чтения
char value_3_str[16]; // массив символов для хранения value_3_str
int value_4 = 0;
int currentLine = 0;
String data_graph, time_graph;
// Читаем XXX(100) значений из файла и выводим их в порт
// logFile_graph.seek(0); // Сбросить указатель на начало файла перед чтением
// for (int i = 0; i < sum_line; i++)
for (int i = 0; i < 300; i++)
{
if (logFile_graph.available())
{
String line = logFile_graph.readStringUntil('\n');
int pos_4 = 0;
for (int j = 0; j < 4; j++)
{
pos_4 = line.indexOf(';', pos_4) + 1;
}
value_4 = line.substring(pos_4, line.indexOf(';', pos_4)).toInt();
currentLine++; // увеличиваем значение текущей строки
if (i == 0)
{
curve_ch_2[12] = highByte(value_4 + 200);
curve_ch_2[13] = lowByte(value_4 + 200);
Serial2.write(curve_ch_2, 14);
int sep_idx = line.indexOf(';'); // Разбираем строку по разделителю ;
data_graph = line.substring(sep_idx + 2, sep_idx + 12);
time_graph = line.substring(sep_idx + 14, sep_idx + 22);
char start_date[19] = {0x5a, 0xa5, 0x0E, 0x82, 0x68, 0x1E};
data_graph.toCharArray(&start_date[6], 10 + 1, 0);
Serial2.write(start_date, sizeof(start_date));
char start_time[19] = {0x5a, 0xa5, 0x0E, 0x82, 0x68, 0x2A};
time_graph.toCharArray(&start_time[6], 10 + 1, 0);
Serial2.write(start_time, sizeof(start_time));
}
//if (i == sum_line - 1)
if (i == 300 - 1 || i == sum_line)
{
curve_ch_2[12] = highByte(value_4 + 200);
curve_ch_2[13] = lowByte(value_4 + 200);
Serial2.write(curve_ch_2, 14);
int sep_idx = line.indexOf(';'); // Разбираем строку по разделителю ;
data_graph = line.substring(sep_idx + 2, sep_idx + 12);
time_graph = line.substring(sep_idx + 14, sep_idx + 22);
char start_date[19] = {0x5a, 0xa5, 0x0E, 0x82, 0x68, 0x36};
data_graph.toCharArray(&start_date[6], 10 + 1, 0);
Serial2.write(start_date, sizeof(start_date));
char start_time[19] = {0x5a, 0xa5, 0x0E, 0x82, 0x68, 0x42};
time_graph.toCharArray(&start_time[6], 10 + 1, 0);
Serial2.write(start_time, sizeof(start_time));
}
else
{
curve_ch_2[12] = highByte(value_4 + 200);
curve_ch_2[13] = lowByte(value_4 + 200);
Serial2.write(curve_ch_2, 14);
}
pos_graf_log = logFile_graph.position(); // Сохраняем позицию последнего прочитанного символа
}
else
{
pos_graf_log = 0; // Возвращаем указатель на начало файла, если достигнут конец
logFile_graph.seek(pos_graf_log);
}
if (currentLine >= sum_line)
{
// Достигнут конец файла, переходим в начало
currentLine = 0;
}
}
logFile_graph.close();
}
else
{
Serial.println("Failed to open log file");
}
}