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