Lydia - Printhead
StatusLight.h
Go to the documentation of this file.
1 #ifndef STATUSLIGHT_H
2 #define STATUSLIGHT_H
3 
4 #include <Arduino.h>
5 #include <Component.h>
6 #include <macros.h>
7 #include <xmath.h>
8 #include <ModbusValue.h>
9 #include <Bridge.h>
10 #include "../enums.h"
11 #include "../config.h"
12 
13 // COMPONENT_KEY_FEEDBACK_0 = 701,
14 // test relay::set <<701;2;64;701:set:1:0>>
15 
16 class StatusLight : public Component, public ModbusValue<int>
17 {
18 public:
19  StatusLight(Component *_owner,
20  short _pin,
21  short _id,
22  short _addr)
23  : last_blink(0),
24  status_blink_TS(0),
25  doBlink(false),
26  pin(_pin),
27  ModbusValue<int>(_addr, MB_FC::MB_FC_READ_REGISTERS),
28  Component("Status", _id, Component::COMPONENT_DEFAULT, _owner)
29  {
30  doBlink = false;
31  status_blink_TS = 0;
32  last_blink = !digitalRead(pin);
33  nFlags = SBI(nFlags, OBJECT_NET_CAPS::E_NCAPS_MODBUS);
34  setRegisterMode(MB_REGISTER_MODE::E_MB_REGISTER_MODE_READ_WRITE);
35  }
36 
37  void setBlink(bool blink)
38  {
39  doBlink = blink;
40  }
41 
42  void on()
43  {
44  set(1);
45  }
46 
47  void off()
48  {
49  set(0);
50  }
51 
52  short loop()
53  {
54  if (doBlink)
55  {
57  {
58  status_blink_TS = now;
60  digitalWrite(pin, last_blink);
61  }
62  }
63 
64  short val = netVal();
65  if (val != digitalRead(pin))
66  {
67  onSet(val);
68  set(val, 0);
69  }
70 
71  return E_OK;
72  }
73 
74  short set(short val0, short val1 = 0)
75  {
76  digitalWrite(pin, val0 ? HIGH : LOW);
77  return E_OK;
78  }
79 
80  short setup()
81  {
82  return E_OK;
83  }
84 
85  short debug()
86  {
87  return info();
88  }
89  short info()
90  {
91  //Log.verboseln("StatusLight::debug - Addr=%d | NetVal=%d | Value=%d", addr, netVal(), digitalRead(pin));
92  return E_OK;
93  }
94 
95  void status_blink(bool blink)
96  {
97  if (!doBlink && blink)
98  {
99  blink_start_ts = millis();
100  }
101  doBlink = blink;
102  }
103 
104  short onRegisterMethods(Bridge *bridge)
105  {
106  bridge->registerMemberFunction(id, this, C_STR("set"), (ComponentFnPtr)&StatusLight::set);
107  bridge->registerMemberFunction(id, this, C_STR("info"), (ComponentFnPtr)&StatusLight::info);
108  }
109 
110  short pin;
111  millis_t status_blink_TS;
112  bool doBlink;
114  millis_t blink_start_ts;
115  millis_t max_blink_time;
116 };
117 
118 #endif
StatusLight::setBlink
void setBlink(bool blink)
Definition: StatusLight.h:37
StatusLight::blink_start_ts
millis_t blink_start_ts
Definition: StatusLight.h:114
StatusLight::pin
short pin
Definition: StatusLight.h:110
StatusLight::max_blink_time
millis_t max_blink_time
Definition: StatusLight.h:115
StatusLight::setup
short setup()
Definition: StatusLight.h:80
STATUS_BLINK_INTERVAL
#define STATUS_BLINK_INTERVAL
Definition: config.h:46
StatusLight::last_blink
bool last_blink
Definition: StatusLight.h:113
StatusLight
Definition: StatusLight.h:16
StatusLight::loop
short loop()
Definition: StatusLight.h:52
StatusLight::onRegisterMethods
short onRegisterMethods(Bridge *bridge)
Definition: StatusLight.h:104
StatusLight::status_blink
void status_blink(bool blink)
Definition: StatusLight.h:95
StatusLight::debug
short debug()
Definition: StatusLight.h:85
StatusLight::status_blink_TS
millis_t status_blink_TS
Definition: StatusLight.h:111
StatusLight::doBlink
bool doBlink
Definition: StatusLight.h:112
E_OK
#define E_OK
Definition: enums.h:11
StatusLight::on
void on()
Definition: StatusLight.h:42
StatusLight::off
void off()
Definition: StatusLight.h:47
StatusLight::info
short info()
Definition: StatusLight.h:89
StatusLight::StatusLight
StatusLight(Component *_owner, short _pin, short _id, short _addr)
Definition: StatusLight.h:19
StatusLight::set
short set(short val0, short val1=0)
Definition: StatusLight.h:74