Добавил сортировку

This commit is contained in:
parent cd9fe46170
commit b3b68c04e1
1 changed files with 14 additions and 3 deletions

View File

@ -17,7 +17,7 @@ MicroDS18B20<PIN_SENSOR> sensor; // датчик на пине D2
#define MAX_TIMEOUTS 10
// Структура для хранения данных о температуре и таймаутах
struct
struct TIMEOUT_DATA
{
float temp;
uint32_t openTime;
@ -32,6 +32,16 @@ int timeouts_count = 0; // Общее количество зарегистри
// Макрос для удобства записи таймаута в секундах (переводит в мс)
#define SEC_TO_MSEC(time) (long)time*1000
// функция сравнения элементов для qsort по возрастанию
int qsort_compare(const void *cmp1, const void *cmp2)
{
// Указатели для простоты работы
struct TIMEOUT_DATA *a = (struct TIMEOUT_DATA *)cmp1;
struct TIMEOUT_DATA *b = (struct TIMEOUT_DATA *)cmp2;
// если значение отрицательное, то a < b, если положительное, то a > b, иначе равны
return a->temp - b->temp;
}
void setup()
{
// Для отладочной печати
@ -43,7 +53,6 @@ void setup()
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //
// НИЖЕ РЕГИСТРИРУЕТСЯ ВРЕМЯ И ТАЙМАУТЫ ОТКРЫТИЯ/ЗАКРЫТИЯ РЕЛЕ //
// ЗНАЧЕНИЯ ДОЛЖНЫ БЫТЬ ОТСОРТИРОВАНЫ ПО ВОЗРАСТАНИЮ ТЕМПЕРАТУРЫ //
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //
REGISTER_TIMEOUT(83, 300, SEC_TO_MSEC(150));
@ -60,7 +69,6 @@ void setup()
// ВЫШЕ РЕГИСТРИРУЕТСЯ ВРЕМЯ И ТАЙМАУТЫ ОТКРЫТИЯ/ЗАКРЫТИЯ РЕЛЕ //
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //
// Проверка что не было зарегистрировано больше данных, чем это возможно
if (timeouts_count >= MAX_TIMEOUTS)
{
@ -70,6 +78,9 @@ void setup()
while(1); // Программа не запуститься дальше, если допущена ошибка
}
// Сортировка массива по времени, критично для алгоритма
qsort(timeouts, timeouts_count, sizeof(timeouts[0]), qsort_compare);
// Настройка реле
pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
digitalWrite(PIN_RELAY, LOW); // Выключаем реле - посылаем сигнал 0