123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #pragma once
-
- #include "FSMTreppe2/FSMTreppe2.h"
- #include "PCA9685.h"
-
- // #define LDRDEBUG // comment in to override LDR measurement
-
- #define LDR_HYS 5.0 // Hysteresis for switching off FSM [lux]
-
- #define SENSOR_OBEN 16
- #define SENSOR_UNTEN 12
- #define OE 14
-
- #define INT_TIME 20 // interrupt intervall [ms]
-
- class Treppe {
- private:
- const uint8_t stufen;
- uint16_t time_per_stair = 300; // dimmtime per stair [ms]
- uint16_t idle_pwm = 100;
- uint16_t idle_pwm_internal = 0;
- uint16_t active_pwm = 700;
-
- uint16_t ldr_schwelle = 7; // activation value for FSM [lx]
-
- uint16_t start_pwm = 0;
- uint16_t ziel_pwm = 0;
-
- bool anim_beendet = true;
- uint8_t stufe = 0;
- uint16_t current_tick = 0;
- float current_pwm = 0.0;
- uint16_t ticks_pro_stufe = 0;
- float differenz_pwm_pro_tick = 0.0;
-
- // 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;
- enum fsm_status_t {
- ST_INAKTIV_LDR =0,
- ST_RUHEZUSTAND =1,
- ST_AUFDIMMEN_HOCH =2,
- ST_WARTEN_HOCH =3,
- ST_ABDIMMEN_HOCH =4,
- ST_AUFDIMMEN_RUNTER =5,
- ST_WARTEN_RUNTER =6,
- ST_ABDIMMEN_RUNTER =7
- };
- enum fsm_laufrichtung_t {
- LR_RUNTER=0,
- LR_HOCH=1
- };
- enum fsm_dimmrichtung_t {
- DR_ABDIMMEN=0,
- DR_AUFDIMMEN=1
- };
-
- /* DIMM */
- bool dimm_stufe(uint8_t stufe);
- bool dimm_treppe();
- void anim_tick();
- void start_animation();
- void berechne_dimmer();
- void print_state_on_change();
-
- /* LDR */
- bool read_sensor(int sensor);
- float read_ldr();
- bool check_ldr();
- public:
- Treppe(uint8_t _stufen) : stufen(_stufen){
- FSMTreppe_Obj.initialize();
- berechne_dimmer();
- }
- ~Treppe() {
- FSMTreppe_Obj.terminate();
- }
-
- void setup();
- void task(); // call periodically
-
- // Parameter section
- void set_idle_prozent(int prozent);
- void set_idle_pwm(uint16_t _idle_pwm);
- void activate_idle_pwm(bool active);
- void set_active_pwm(uint16_t _active_pwm);
- void set_time_per_stair(uint16_t _time_per_stair);
- };
|