2021-07-07 18:28:05 +02:00
|
|
|
#ifndef __TREPPE_H
|
|
|
|
#define __TREPPE_H
|
2021-06-23 21:23:31 +02:00
|
|
|
|
2021-07-07 20:52:20 +02:00
|
|
|
#include "FSMTreppe3/FSMTreppe3.h"
|
2021-06-23 21:23:31 +02:00
|
|
|
#include "PCA9685.h"
|
|
|
|
|
2021-07-05 11:40:45 +02:00
|
|
|
// #define LDRDEBUG // comment in to override LDR measurement
|
2021-07-06 14:19:35 +02:00
|
|
|
#define LDR_HYS 1 // Hysteresis for switching off FSM [lux]
|
2021-07-05 11:40:45 +02:00
|
|
|
|
2021-07-05 15:54:35 +02:00
|
|
|
#define SENSOR_OBEN 16
|
2021-07-03 12:48:17 +02:00
|
|
|
#define SENSOR_UNTEN 12
|
2021-06-28 15:47:10 +02:00
|
|
|
#define OE 14
|
2021-06-25 19:23:02 +02:00
|
|
|
|
2021-07-03 11:21:18 +02:00
|
|
|
#define INT_TIME 20 // interrupt intervall [ms]
|
2021-06-25 19:23:02 +02:00
|
|
|
|
2021-06-23 21:23:31 +02:00
|
|
|
class Treppe {
|
2021-06-25 04:53:06 +02:00
|
|
|
private:
|
2021-07-03 21:04:24 +02:00
|
|
|
const uint8_t stufen;
|
2021-07-08 02:54:08 +02:00
|
|
|
const uint16_t time_ldr = 500;
|
2021-07-03 21:04:24 +02:00
|
|
|
uint16_t time_per_stair = 300; // dimmtime per stair [ms]
|
2021-07-07 21:13:58 +02:00
|
|
|
uint16_t idle_pwm_max = 100;
|
2021-07-08 02:54:08 +02:00
|
|
|
uint16_t idle_pwm_ist = idle_pwm_max;
|
2021-07-07 21:13:58 +02:00
|
|
|
uint16_t idle_pwm_soll = 0;
|
2021-07-05 21:20:00 +02:00
|
|
|
uint16_t active_pwm = 700;
|
2021-06-23 21:23:31 +02:00
|
|
|
|
2021-07-06 14:19:35 +02:00
|
|
|
uint16_t ldr_schwelle = 2; // activation value for FSM [lx]
|
2021-07-08 02:54:08 +02:00
|
|
|
struct fsm_pending_inputs_t {
|
|
|
|
bool anim_beendet = true;
|
|
|
|
bool sensor_unten = false;
|
|
|
|
bool sensor_oben = false;
|
|
|
|
bool ldr_changed = false;
|
|
|
|
};
|
|
|
|
fsm_pending_inputs_t fsm_pend;
|
2021-07-05 11:40:45 +02:00
|
|
|
|
2021-07-08 02:54:08 +02:00
|
|
|
struct dimmer_t {
|
2021-07-07 21:13:58 +02:00
|
|
|
uint8_t stufe = 0;
|
|
|
|
uint16_t ticks = 0;
|
|
|
|
uint16_t tick = 0;
|
|
|
|
|
|
|
|
float delta_pwm = 0.0;
|
|
|
|
float pwm = 0.0;
|
|
|
|
uint16_t start_pwm = 0;
|
|
|
|
uint16_t ziel_pwm = 0;
|
|
|
|
};
|
2021-07-08 02:54:08 +02:00
|
|
|
enum dimmer_type_t {
|
|
|
|
DIM_STUFEN=0,
|
|
|
|
DIM_LDR=1
|
2021-07-07 21:13:58 +02:00
|
|
|
};
|
2021-07-08 02:54:08 +02:00
|
|
|
dimmer_t dimmer_stufen;
|
|
|
|
dimmer_t dimmer_ldr;
|
2021-07-03 21:04:24 +02:00
|
|
|
|
2021-07-03 12:48:17 +02:00
|
|
|
// initialize with i2c-Address 0, use Wire Library
|
|
|
|
PCA9685 pwmController;
|
|
|
|
FSMTreppeModelClass FSMTreppe_Obj;
|
|
|
|
FSMTreppeModelClass::ExtU_FSMTreppe_T fsm_inputs;
|
|
|
|
FSMTreppeModelClass::ExtY_FSMTreppe_T fsm_outputs;
|
2021-07-03 18:10:30 +02:00
|
|
|
enum fsm_status_t {
|
|
|
|
ST_INAKTIV_LDR =0,
|
2021-07-07 20:52:20 +02:00
|
|
|
ST_AUFDIMMEN_LDR =1,
|
|
|
|
ST_ABDIMMEN_LDR =2,
|
|
|
|
ST_RUHEZUSTAND =3,
|
|
|
|
ST_AUFDIMMEN_HOCH =4,
|
|
|
|
ST_WARTEN_HOCH =5,
|
|
|
|
ST_ABDIMMEN_HOCH =6,
|
|
|
|
ST_AUFDIMMEN_RUNTER =7,
|
|
|
|
ST_WARTEN_RUNTER =8,
|
|
|
|
ST_ABDIMMEN_RUNTER =9
|
2021-07-03 18:10:30 +02:00
|
|
|
};
|
2021-07-03 21:04:24 +02:00
|
|
|
enum fsm_laufrichtung_t {
|
|
|
|
LR_RUNTER=0,
|
|
|
|
LR_HOCH=1
|
|
|
|
};
|
|
|
|
enum fsm_dimmrichtung_t {
|
|
|
|
DR_ABDIMMEN=0,
|
|
|
|
DR_AUFDIMMEN=1
|
|
|
|
};
|
2021-07-03 12:48:17 +02:00
|
|
|
|
2021-07-05 15:16:43 +02:00
|
|
|
/* DIMM */
|
2021-07-08 02:54:08 +02:00
|
|
|
// bool dimmer(dimmer_t* dimmer, bool dim_type);
|
|
|
|
bool dimmer_tick(dimmer_t* dimmer, bool dim_type);
|
|
|
|
void start_animation(dimmer_t* dimmer, bool dim_type,
|
|
|
|
uint16_t on_pwm, uint16_t off_pwm);
|
|
|
|
// void berechne_dimmer(dimmer_t* dimmer, bool dim_type);
|
2021-07-05 15:16:43 +02:00
|
|
|
void print_state_on_change();
|
|
|
|
|
|
|
|
/* LDR */
|
2021-07-05 11:40:45 +02:00
|
|
|
bool read_sensor(int sensor);
|
|
|
|
float read_ldr();
|
|
|
|
bool check_ldr();
|
2021-06-25 04:53:06 +02:00
|
|
|
public:
|
2021-07-03 21:04:24 +02:00
|
|
|
Treppe(uint8_t _stufen) : stufen(_stufen){
|
2021-07-03 11:31:46 +02:00
|
|
|
FSMTreppe_Obj.initialize();
|
2021-06-25 04:53:06 +02:00
|
|
|
}
|
2021-07-03 11:31:46 +02:00
|
|
|
~Treppe() {
|
|
|
|
FSMTreppe_Obj.terminate();
|
|
|
|
}
|
2021-06-25 18:35:16 +02:00
|
|
|
|
2021-06-23 21:23:31 +02:00
|
|
|
void setup();
|
2021-06-25 21:10:07 +02:00
|
|
|
void task(); // call periodically
|
2021-06-23 21:23:31 +02:00
|
|
|
|
|
|
|
// Parameter section
|
2021-07-05 19:51:55 +02:00
|
|
|
void set_idle_prozent(int prozent);
|
2021-07-07 21:13:58 +02:00
|
|
|
void set_idle_pwm_max(const uint16_t new_pwm);
|
2021-07-05 21:20:00 +02:00
|
|
|
void set_active_pwm(uint16_t _active_pwm);
|
2021-07-03 21:04:24 +02:00
|
|
|
void set_time_per_stair(uint16_t _time_per_stair);
|
2021-07-07 18:28:05 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // __TREPPE_H
|