Добавил сортировку
This commit is contained in:
parent
cd9fe46170
commit
b3b68c04e1
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue