forked from electro/esp-irblaster
parent
5937417568
commit
cbf3ebd8e0
@ -0,0 +1,113 @@ |
|||||||
|
//
|
||||||
|
// Created by MightyPork on 2022/08/20.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "fancontrol.h" |
||||||
|
#include "freertos/FreeRTOS.h" |
||||||
|
#include "freertos/timers.h" |
||||||
|
#include "settings.h" |
||||||
|
#include "actuators.h" |
||||||
|
|
||||||
|
struct FanControlState gState = {}; |
||||||
|
|
||||||
|
static void timerCallback(TimerHandle_t xTimer); |
||||||
|
|
||||||
|
void settings_blind_time_set(uint16_t blind_time) { |
||||||
|
bool nadoraz = (gState.blind_position >= gSettings.blind_time) || (gState.blind_position >= blind_time); |
||||||
|
|
||||||
|
gSettings.blind_time = blind_time; |
||||||
|
|
||||||
|
if (nadoraz) { |
||||||
|
gState.blind_position = blind_time; |
||||||
|
} |
||||||
|
|
||||||
|
settings_persist(SETTINGS_blind_time); |
||||||
|
} |
||||||
|
|
||||||
|
void fancontrol_init() { |
||||||
|
gState.vent_mode = gSettings.initial_mode; |
||||||
|
gState.set_power = gSettings.initial_power; |
||||||
|
|
||||||
|
xTimerCreate("fanctl", |
||||||
|
pdMS_TO_TICKS(1000), |
||||||
|
pdTRUE, |
||||||
|
NULL, |
||||||
|
timerCallback); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
static void timerCallback(TimerHandle_t xTimer) { |
||||||
|
// posun rolety
|
||||||
|
if (gAct.blind) { |
||||||
|
if (gState.blind_position < gSettings.blind_time) { |
||||||
|
gState.blind_position++; |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (gState.blind_position > 0) { |
||||||
|
gState.blind_position--; |
||||||
|
} |
||||||
|
} |
||||||
|
if (gAct.power > 0) { |
||||||
|
if (gState.real_direction != gAct.dir) { |
||||||
|
if (gState.ramp > 0) { |
||||||
|
gState.ramp--; |
||||||
|
} else { |
||||||
|
gState.run_time = 0; |
||||||
|
gState.real_direction = gAct.dir; |
||||||
|
} |
||||||
|
} else { |
||||||
|
if (gState.ramp < gSettings.ramp_time) { |
||||||
|
gState.ramp++; |
||||||
|
} |
||||||
|
} |
||||||
|
gState.run_time++; |
||||||
|
} else { |
||||||
|
if (gState.ramp > 0) { |
||||||
|
gState.ramp--; |
||||||
|
} else { |
||||||
|
gState.run_time = 0; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
switch (gState.vent_mode) { |
||||||
|
case VENT_MODE_OFF: |
||||||
|
act_motor_power_set(0); |
||||||
|
act_blind_set(0); |
||||||
|
break; |
||||||
|
case VENT_MODE_FREE: |
||||||
|
act_motor_power_set(0); |
||||||
|
act_blind_set(1); |
||||||
|
break; |
||||||
|
case VENT_MODE_OUT: |
||||||
|
act_motor_direction_set(MOTOR_DIR_OUT); |
||||||
|
act_blind_set(1); |
||||||
|
if (gState.blind_position >= gSettings.blind_time) { |
||||||
|
act_motor_power_set(gState.set_power); |
||||||
|
} |
||||||
|
break; |
||||||
|
case VENT_MODE_IN: |
||||||
|
act_motor_direction_set(MOTOR_DIR_IN); |
||||||
|
act_blind_set(1); |
||||||
|
if (gState.blind_position >= gSettings.blind_time) { |
||||||
|
act_motor_power_set(gState.set_power); |
||||||
|
} |
||||||
|
break; |
||||||
|
case VENT_MODE_RECUP: |
||||||
|
act_blind_set(1); |
||||||
|
if (gState.blind_position >= gSettings.blind_time) { |
||||||
|
act_motor_power_set(gState.set_power); |
||||||
|
} |
||||||
|
|
||||||
|
// Stop condition
|
||||||
|
if (gState.run_time >= gSettings.recup_time) { |
||||||
|
// zmena smeru
|
||||||
|
gState.run_time = 0; |
||||||
|
act_motor_direction_set(1 - gAct.dir); |
||||||
|
} |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
if (gAct.dir == gState.real_direction && gState.ramp >= gSettings.ramp_time) { |
||||||
|
// Measure temperatures
|
||||||
|
} |
||||||
|
} |
@ -0,0 +1,51 @@ |
|||||||
|
//
|
||||||
|
// Created by MightyPork on 2022/08/20.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef FANCTL_FANCONTROL_H |
||||||
|
#define FANCTL_FANCONTROL_H |
||||||
|
|
||||||
|
#include <stdint.h> |
||||||
|
#include "actuators.h" |
||||||
|
|
||||||
|
void fancontrol_init(); |
||||||
|
|
||||||
|
enum ventilation_mode { |
||||||
|
VENT_MODE_OFF = 0, |
||||||
|
VENT_MODE_FREE = 1, |
||||||
|
VENT_MODE_OUT = 3, |
||||||
|
VENT_MODE_IN = 5, |
||||||
|
VENT_MODE_RECUP = 7, |
||||||
|
}; |
||||||
|
|
||||||
|
struct FanControlState { |
||||||
|
/**
|
||||||
|
* Poloha roletky, 0<->blind_time, inkrement/dekrement 1 za sekundu. |
||||||
|
* Pri zmene blind_time se musi hodnota aktualizovat, pokud je na doraze nebo za. |
||||||
|
*/ |
||||||
|
uint16_t blind_position; |
||||||
|
/**
|
||||||
|
* Power requested trough register or as the default value |
||||||
|
*/ |
||||||
|
uint16_t set_power; |
||||||
|
/**
|
||||||
|
* Cas chodu motoru v aktualnim smeru, inkrement 1 za sekundu. |
||||||
|
*/ |
||||||
|
uint16_t run_time; |
||||||
|
/**
|
||||||
|
* "stav chodu motoru". 0=stop, ramp_time = jede. |
||||||
|
*/ |
||||||
|
uint16_t ramp; |
||||||
|
/**
|
||||||
|
* skutecny aktualni pohyb motoru (zustava stejny, dokud ramp time nedosahne nuly) |
||||||
|
*/ |
||||||
|
enum motor_direction real_direction; |
||||||
|
/**
|
||||||
|
* rezim ventilace |
||||||
|
*/ |
||||||
|
enum ventilation_mode vent_mode; |
||||||
|
}; |
||||||
|
|
||||||
|
extern struct FanControlState gState; |
||||||
|
|
||||||
|
#endif //FANCTL_FANCONTROL_H
|
Loading…
Reference in new issue