diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/ButtonReader_8cpp.html b/ButtonReader_8cpp.html new file mode 100644 index 0000000..b81b58d --- /dev/null +++ b/ButtonReader_8cpp.html @@ -0,0 +1,124 @@ + + + + + + + +Humidistat: src/input/ButtonReader.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ButtonReader.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "ButtonReader.h"
+
+Include dependency graph for ButtonReader.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/ButtonReader_8cpp__incl.map b/ButtonReader_8cpp__incl.map new file mode 100644 index 0000000..cf119bd --- /dev/null +++ b/ButtonReader_8cpp__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ButtonReader_8cpp__incl.md5 b/ButtonReader_8cpp__incl.md5 new file mode 100644 index 0000000..732498a --- /dev/null +++ b/ButtonReader_8cpp__incl.md5 @@ -0,0 +1 @@ +68509bb45a30a14b675f01b4baa351de \ No newline at end of file diff --git a/ButtonReader_8cpp__incl.svg b/ButtonReader_8cpp__incl.svg new file mode 100644 index 0000000..84336ea --- /dev/null +++ b/ButtonReader_8cpp__incl.svg @@ -0,0 +1,111 @@ + + + + + + +src/input/ButtonReader.cpp + + +Node1 + + +src/input/ButtonReader.cpp + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ButtonReader.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +aliases.h + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +Buttons.h + + + + + +Node3->Node6 + + + + + + + + diff --git a/ButtonReader_8cpp_source.html b/ButtonReader_8cpp_source.html new file mode 100644 index 0000000..1090338 --- /dev/null +++ b/ButtonReader_8cpp_source.html @@ -0,0 +1,152 @@ + + + + + + + +Humidistat: src/input/ButtonReader.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ButtonReader.cpp
+
+
+Go to the documentation of this file.
1#include <Arduino.h>
+
2#include "ButtonReader.h"
+
3
+
4ButtonReader::ButtonReader(uint8_t pin_btn, const VoltLadder *voltLadder) : voltLadder(*voltLadder), pin_btn(pin_btn) {}
+
5
+
+ +
7 Buttons state = voltLadder.voltageToButton(analogRead(pin_btn));
+
8 if (state != lastState) {
+
9 lastState = state;
+
10 pressedSince = micros();
+
11 }
+
12}
+
+
13
+
+ +
15 return lastState;
+
16}
+
+
17
+
+ +
19 return micros() - pressedSince;
+
20}
+
+ +
Buttons
Possible button values.
Definition Buttons.h:5
+
uint8_t pin_btn
Pin corresponding to the keypad.
+
uint32_t getPressedFor() const
Get the duration the key has been pressed. This can be used for debouncing using a stable interval.
+
Buttons isPressed() const
Get the button state.
+
ButtonReader(uint8_t pin_btn, const VoltLadder *voltLadder)
Constructor.
+
unsigned long pressedSince
Time of the start of the keypress (in micros)
+
void sample()
Sample the button signal. Call this in the main loop.
+
const VoltLadder & voltLadder
Reference to a voltLadder instance.
+
Buttons lastState
Last sampled state of the keypad.
+
VoltLadder voltLadder
Definition main.cpp:33
+
+
+ + + + diff --git a/ButtonReader_8h.html b/ButtonReader_8h.html new file mode 100644 index 0000000..9e2bcfd --- /dev/null +++ b/ButtonReader_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: src/input/ButtonReader.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ButtonReader.h File Reference
+
+
+
#include <stdint.h>
+#include "aliases.h"
+#include "Buttons.h"
+
+Include dependency graph for ButtonReader.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  ButtonReader
 Read button state from a voltage ladder-style keypad. More...
 
+
+
+ + + + diff --git a/ButtonReader_8h.js b/ButtonReader_8h.js new file mode 100644 index 0000000..faafdc2 --- /dev/null +++ b/ButtonReader_8h.js @@ -0,0 +1,4 @@ +var ButtonReader_8h = +[ + [ "ButtonReader", "classButtonReader.html", "classButtonReader" ] +]; \ No newline at end of file diff --git a/ButtonReader_8h__dep__incl.map b/ButtonReader_8h__dep__incl.map new file mode 100644 index 0000000..b6b8b3e --- /dev/null +++ b/ButtonReader_8h__dep__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/ButtonReader_8h__dep__incl.md5 b/ButtonReader_8h__dep__incl.md5 new file mode 100644 index 0000000..cd803a3 --- /dev/null +++ b/ButtonReader_8h__dep__incl.md5 @@ -0,0 +1 @@ +ee0e6d0fe0c4696db938057ebe6691de \ No newline at end of file diff --git a/ButtonReader_8h__dep__incl.svg b/ButtonReader_8h__dep__incl.svg new file mode 100644 index 0000000..be2ae20 --- /dev/null +++ b/ButtonReader_8h__dep__incl.svg @@ -0,0 +1,147 @@ + + + + + + +src/input/ButtonReader.h + + +Node1 + + +src/input/ButtonReader.h + + + + + +Node2 + + +src/input/ButtonReader.cpp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/main.cpp + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +src/ui/ControllerUI.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/ui/CharDisplayUI.h + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +src/ui/ControllerUI.cpp + + + + + +Node4->Node7 + + + + + + + + +Node8 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node4->Node8 + + + + + + + + +Node6 + + +src/ui/CharDisplayUI.cpp + + + + + +Node5->Node6 + + + + + + + + diff --git a/ButtonReader_8h__incl.map b/ButtonReader_8h__incl.map new file mode 100644 index 0000000..7821fc8 --- /dev/null +++ b/ButtonReader_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ButtonReader_8h__incl.md5 b/ButtonReader_8h__incl.md5 new file mode 100644 index 0000000..939ca77 --- /dev/null +++ b/ButtonReader_8h__incl.md5 @@ -0,0 +1 @@ +24eaa48d566b7c2c9d171941ef5d8ae5 \ No newline at end of file diff --git a/ButtonReader_8h__incl.svg b/ButtonReader_8h__incl.svg new file mode 100644 index 0000000..091e96e --- /dev/null +++ b/ButtonReader_8h__incl.svg @@ -0,0 +1,75 @@ + + + + + + +src/input/ButtonReader.h + + +Node1 + + +src/input/ButtonReader.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +aliases.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +Buttons.h + + + + + +Node1->Node4 + + + + + + + + diff --git a/ButtonReader_8h_source.html b/ButtonReader_8h_source.html new file mode 100644 index 0000000..011b9cc --- /dev/null +++ b/ButtonReader_8h_source.html @@ -0,0 +1,156 @@ + + + + + + + +Humidistat: src/input/ButtonReader.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ButtonReader.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_BUTTONREADER_H
+
2#define HUMIDISTAT_BUTTONREADER_H
+
3
+
4#include <stdint.h>
+
5
+
6#include "aliases.h"
+
7#include "Buttons.h"
+
8
+
+ +
11private:
+
12 const VoltLadder &voltLadder;
+
13 uint8_t pin_btn;
+
14
+ +
16 unsigned long pressedSince = 0;
+
17public:
+
21 explicit ButtonReader(uint8_t pin_btn, const VoltLadder *voltLadder);
+
22
+
24 void sample();
+
25
+
28 Buttons isPressed() const;
+
29
+
32 uint32_t getPressedFor() const;
+
33};
+
+
34
+
35#endif //HUMIDISTAT_BUTTONREADER_H
+ +
Buttons
Possible button values.
Definition Buttons.h:5
+ + +
Read button state from a voltage ladder-style keypad.
+
uint8_t pin_btn
Pin corresponding to the keypad.
+
uint32_t getPressedFor() const
Get the duration the key has been pressed. This can be used for debouncing using a stable interval.
+
Buttons isPressed() const
Get the button state.
+
ButtonReader(uint8_t pin_btn, const VoltLadder *voltLadder)
Constructor.
+
unsigned long pressedSince
Time of the start of the keypress (in micros)
+
void sample()
Sample the button signal. Call this in the main loop.
+
const VoltLadder & voltLadder
Reference to a voltLadder instance.
+
Buttons lastState
Last sampled state of the keypad.
+
+
+ + + + diff --git a/Buttons_8h.html b/Buttons_8h.html new file mode 100644 index 0000000..06d9376 --- /dev/null +++ b/Buttons_8h.html @@ -0,0 +1,175 @@ + + + + + + + +Humidistat: src/input/Buttons.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Buttons.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Enumerations

enum class  Buttons {
+  NONE +, RIGHT +, UP +, DOWN +,
+  LEFT +, SELECT +
+ }
 Possible button values. More...
 
+

Enumeration Type Documentation

+ +

◆ Buttons

+ +
+
+ + + + + +
+ + + + +
enum class Buttons
+
+strong
+
+ +

Possible button values.

+ + + + + + + +
Enumerator
NONE 
RIGHT 
UP 
DOWN 
LEFT 
SELECT 
+ +

Definition at line 5 of file Buttons.h.

+ +
+
+
+
+ + + + diff --git a/Buttons_8h.js b/Buttons_8h.js new file mode 100644 index 0000000..d6bb0d1 --- /dev/null +++ b/Buttons_8h.js @@ -0,0 +1,11 @@ +var Buttons_8h = +[ + [ "Buttons", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034", [ + [ "NONE", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034ab50339a10e1de285ac99d4c3990b8693", null ], + [ "RIGHT", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a21507b40c80068eda19865706fdc2403", null ], + [ "UP", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034afbaedde498cdead4f2780217646e9ba1", null ], + [ "DOWN", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034ac4e0e4e3118472beeb2ae75827450f1f", null ], + [ "LEFT", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a684d325a7303f52e64011467ff5c5758", null ], + [ "SELECT", "Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a63225f19fccb18e7c709f1fa11bc738e", null ] + ] ] +]; \ No newline at end of file diff --git a/Buttons_8h__dep__incl.map b/Buttons_8h__dep__incl.map new file mode 100644 index 0000000..1a7f14d --- /dev/null +++ b/Buttons_8h__dep__incl.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Buttons_8h__dep__incl.md5 b/Buttons_8h__dep__incl.md5 new file mode 100644 index 0000000..5389b2b --- /dev/null +++ b/Buttons_8h__dep__incl.md5 @@ -0,0 +1 @@ +6c0882e2e1aa3bda4a3fd5691aa267a8 \ No newline at end of file diff --git a/Buttons_8h__dep__incl.svg b/Buttons_8h__dep__incl.svg new file mode 100644 index 0000000..b905d0b --- /dev/null +++ b/Buttons_8h__dep__incl.svg @@ -0,0 +1,237 @@ + + + + + + +src/input/Buttons.h + + +Node1 + + +src/input/Buttons.h + + + + + +Node2 + + +src/input/ButtonReader.h + + + + + +Node1->Node2 + + + + + + + + +Node10 + + +src/input/Ks0256VoltLadder.h + + + + + +Node1->Node10 + + + + + + + + +Node12 + + +src/input/Ks0466VoltLadder.h + + + + + +Node1->Node12 + + + + + + + + +Node3 + + +src/input/ButtonReader.cpp + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +src/main.cpp + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +src/ui/ControllerUI.h + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +src/ui/CharDisplayUI.h + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +src/ui/ControllerUI.cpp + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +src/ui/CharDisplayUI.cpp + + + + + +Node6->Node7 + + + + + + + + +Node11 + + +src/input/Ks0256VoltLadder.cpp + + + + + +Node10->Node11 + + + + + + + + +Node13 + + +src/input/Ks0466VoltLadder.cpp + + + + + +Node12->Node13 + + + + + + + + diff --git a/Buttons_8h_source.html b/Buttons_8h_source.html new file mode 100644 index 0000000..ae27b99 --- /dev/null +++ b/Buttons_8h_source.html @@ -0,0 +1,137 @@ + + + + + + + +Humidistat: src/input/Buttons.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Buttons.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_BUTTONS_H
+
2#define HUMIDISTAT_BUTTONS_H
+
3
+
+
5enum class Buttons {
+
6 NONE,
+
7 RIGHT,
+
8 UP,
+
9 DOWN,
+
10 LEFT,
+
11 SELECT,
+
12};
+
+
13
+
14#endif //HUMIDISTAT_BUTTONS_H
+
Buttons
Possible button values.
Definition Buttons.h:5
+ + + + + + +
+
+ + + + diff --git a/CascadeHumidistat_8cpp.html b/CascadeHumidistat_8cpp.html new file mode 100644 index 0000000..c8bdc36 --- /dev/null +++ b/CascadeHumidistat_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/control/CascadeHumidistat.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CascadeHumidistat.cpp File Reference
+
+
+
#include "CascadeHumidistat.h"
+
+Include dependency graph for CascadeHumidistat.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/CascadeHumidistat_8cpp__incl.map b/CascadeHumidistat_8cpp__incl.map new file mode 100644 index 0000000..45df605 --- /dev/null +++ b/CascadeHumidistat_8cpp__incl.map @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CascadeHumidistat_8cpp__incl.md5 b/CascadeHumidistat_8cpp__incl.md5 new file mode 100644 index 0000000..95fd5bb --- /dev/null +++ b/CascadeHumidistat_8cpp__incl.md5 @@ -0,0 +1 @@ +1b73fade99dc3cc469c213e19b551a3b \ No newline at end of file diff --git a/CascadeHumidistat_8cpp__incl.svg b/CascadeHumidistat_8cpp__incl.svg new file mode 100644 index 0000000..bf7ac97 --- /dev/null +++ b/CascadeHumidistat_8cpp__incl.svg @@ -0,0 +1,309 @@ + + + + + + +src/control/CascadeHumidistat.cpp + + +Node1 + + +src/control/CascadeHumidistat.cpp + + + + + +Node2 + + +CascadeHumidistat.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +etl/array.h + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +aliases.h + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +Humidistat.h + + + + + +Node2->Node6 + + + + + + + + +Node11 + + +../sensor/FlowSensor.h + + + + + +Node2->Node11 + + + + + + + + +Node13 + + +FlowController.h + + + + + +Node2->Node13 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +Controller.h + + + + + +Node6->Node7 + + + + + + + + +Node10 + + +../EEPROMConfig.h + + + + + +Node6->Node10 + + + + + + + + +Node8 + + +stdint.h + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +PID.h + + + + + +Node7->Node9 + + + + + + + + +Node7->Node10 + + + + + + + + +Node9->Node8 + + + + + + + + +Node11->Node8 + + + + + + + + +Node12 + + +imath.h + + + + + +Node11->Node12 + + + + + + + + +Node13->Node7 + + + + + + + + +Node13->Node9 + + + + + + + + +Node13->Node10 + + + + + + + + +Node13->Node11 + + + + + + + + diff --git a/CascadeHumidistat_8cpp_source.html b/CascadeHumidistat_8cpp_source.html new file mode 100644 index 0000000..e8d8be4 --- /dev/null +++ b/CascadeHumidistat_8cpp_source.html @@ -0,0 +1,180 @@ + + + + + + + +Humidistat: src/control/CascadeHumidistat.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CascadeHumidistat.cpp
+
+
+Go to the documentation of this file.
1#include "CascadeHumidistat.h"
+
2
+
+ +
4 etl::span<const FlowSensor, 2> flowSensors, etl::array<uint8_t, 2> pins_solenoid,
+
5 uint8_t pwmRes)
+
6 : Humidistat(cs, hs, cs->HC_Kp, cs->HC_Ki, cs->HC_Kd, cs->HC_Kf, cs->dt, 0, 1),
+
7 fcs{FlowController(&flowSensors[0], cs, pins_solenoid[0], pwmRes),
+
8 FlowController(&flowSensors[1], cs, pins_solenoid[1], pwmRes)} {
+
9 fcs[0].active = true;
+
10 fcs[1].active = true;
+
11}
+
+
12
+
+ +
14 runCycle();
+
15
+
16 // Set CV of humidity controller as SP of flow controllers
+ +
18 fcs[1].sp = (1 - cv) * cs.HC_totalFlowrate;
+
19
+
20 fcs[0].update();
+
21 fcs[1].update();
+
22}
+
+
23
+
+ +
25 return &fcs[n];
+
26}
+
+
27
+ + +
const FlowController * getInner(uint8_t n) const
Get a pointer to a inner FlowController instance.
+ +
CascadeHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::span< const FlowSensor, 2 > flowSensors, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)
Constructor.
+
FlowController fcs[2]
+ +
double sp
Setpoint.
Definition Controller.h:22
+
bool active
Definition Controller.h:19
+ +
const ConfigStore & cs
Definition Controller.h:14
+
double cv
Control variable.
Definition Controller.h:23
+
Controls flow. Holds a reference to a FlowSensor instance.
+ + +
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
void runCycle()
Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
+
void setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt)
Set the gains and timestep.
Definition PID.cpp:59
+
const uint8_t pwmRes
Definition main.cpp:44
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+ +
double HC_totalFlowrate
Total flowrate (for cascade controller) (L/min)
+ +
double HC_Kp
Humidity controller PID parameters.
+ +
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+
+
+ + + + diff --git a/CascadeHumidistat_8h.html b/CascadeHumidistat_8h.html new file mode 100644 index 0000000..36cd394 --- /dev/null +++ b/CascadeHumidistat_8h.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/control/CascadeHumidistat.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
CascadeHumidistat.h File Reference
+
+
+
#include <etl/span.h>
+#include <etl/array.h>
+#include "aliases.h"
+#include "Humidistat.h"
+#include "../sensor/FlowSensor.h"
+#include "FlowController.h"
+
+Include dependency graph for CascadeHumidistat.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  CascadeHumidistat
 Control humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers, which drive a solenoid valve each. Adjust the public setpoint variable and call update(). More...
 
+
+
+ + + + diff --git a/CascadeHumidistat_8h.js b/CascadeHumidistat_8h.js new file mode 100644 index 0000000..b81e8cb --- /dev/null +++ b/CascadeHumidistat_8h.js @@ -0,0 +1,4 @@ +var CascadeHumidistat_8h = +[ + [ "CascadeHumidistat", "classCascadeHumidistat.html", "classCascadeHumidistat" ] +]; \ No newline at end of file diff --git a/CascadeHumidistat_8h__dep__incl.map b/CascadeHumidistat_8h__dep__incl.map new file mode 100644 index 0000000..047213b --- /dev/null +++ b/CascadeHumidistat_8h__dep__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/CascadeHumidistat_8h__dep__incl.md5 b/CascadeHumidistat_8h__dep__incl.md5 new file mode 100644 index 0000000..ea218bb --- /dev/null +++ b/CascadeHumidistat_8h__dep__incl.md5 @@ -0,0 +1 @@ +d9b7c09629255ebb7f980d3ea7cabc86 \ No newline at end of file diff --git a/CascadeHumidistat_8h__dep__incl.svg b/CascadeHumidistat_8h__dep__incl.svg new file mode 100644 index 0000000..af9d7e7 --- /dev/null +++ b/CascadeHumidistat_8h__dep__incl.svg @@ -0,0 +1,93 @@ + + + + + + +src/control/CascadeHumidistat.h + + +Node1 + + +src/control/CascadeHumidistat.h + + + + + +Node2 + + +src/SerialLogger.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +src/control/CascadeHumidistat.cpp + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +src/main.cpp + + + + + +Node2->Node3 + + + + + + + + diff --git a/CascadeHumidistat_8h__incl.map b/CascadeHumidistat_8h__incl.map new file mode 100644 index 0000000..14c309c --- /dev/null +++ b/CascadeHumidistat_8h__incl.map @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CascadeHumidistat_8h__incl.md5 b/CascadeHumidistat_8h__incl.md5 new file mode 100644 index 0000000..037da8c --- /dev/null +++ b/CascadeHumidistat_8h__incl.md5 @@ -0,0 +1 @@ +937b91f2f69b5cdcbd0f0172cadc5e65 \ No newline at end of file diff --git a/CascadeHumidistat_8h__incl.svg b/CascadeHumidistat_8h__incl.svg new file mode 100644 index 0000000..df043c0 --- /dev/null +++ b/CascadeHumidistat_8h__incl.svg @@ -0,0 +1,291 @@ + + + + + + +src/control/CascadeHumidistat.h + + +Node1 + + +src/control/CascadeHumidistat.h + + + + + +Node2 + + +etl/span.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/array.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +aliases.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +Humidistat.h + + + + + +Node1->Node5 + + + + + + + + +Node10 + + +../sensor/FlowSensor.h + + + + + +Node1->Node10 + + + + + + + + +Node12 + + +FlowController.h + + + + + +Node1->Node12 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6 + + +Controller.h + + + + + +Node5->Node6 + + + + + + + + +Node9 + + +../EEPROMConfig.h + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +stdint.h + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +PID.h + + + + + +Node6->Node8 + + + + + + + + +Node6->Node9 + + + + + + + + +Node8->Node7 + + + + + + + + +Node10->Node7 + + + + + + + + +Node11 + + +imath.h + + + + + +Node10->Node11 + + + + + + + + +Node12->Node6 + + + + + + + + +Node12->Node8 + + + + + + + + +Node12->Node9 + + + + + + + + +Node12->Node10 + + + + + + + + diff --git a/CascadeHumidistat_8h_source.html b/CascadeHumidistat_8h_source.html new file mode 100644 index 0000000..c935acb --- /dev/null +++ b/CascadeHumidistat_8h_source.html @@ -0,0 +1,161 @@ + + + + + + + +Humidistat: src/control/CascadeHumidistat.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CascadeHumidistat.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CASCADEHUMIDISTAT_H
+
2#define HUMIDISTAT_CASCADEHUMIDISTAT_H
+
3
+
4#include <etl/span.h>
+
5#include <etl/array.h>
+
6
+
7#include "aliases.h"
+
8#include "Humidistat.h"
+ +
10#include "FlowController.h"
+
11
+
+ +
16private:
+ +
18
+
19public:
+
26 CascadeHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::span<const FlowSensor, 2> flowSensors,
+
27 etl::array<uint8_t, 2> pins_solenoid, uint8_t pwmRes);
+
28
+
32 [[nodiscard]] const FlowController* getInner(uint8_t n) const;
+
33
+
34 // Overridden from Controller
+
35 void update();
+ +
37};
+
+
38
+
39
+
40#endif //HUMIDISTAT_CASCADEHUMIDISTAT_H
+ + + + +
Control humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers,...
+
const FlowController * getInner(uint8_t n) const
Get a pointer to a inner FlowController instance.
+ +
CascadeHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::span< const FlowSensor, 2 > flowSensors, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)
Constructor.
+
FlowController fcs[2]
+ +
const ConfigStore & cs
Definition Controller.h:14
+
Controls flow. Holds a reference to a FlowSensor instance.
+
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
HumiditySensor & hs
Definition Humidistat.h:12
+
const uint8_t pwmRes
Definition main.cpp:44
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
+
+ + + + diff --git a/CharDisplayUI_8cpp.html b/CharDisplayUI_8cpp.html new file mode 100644 index 0000000..b135d13 --- /dev/null +++ b/CharDisplayUI_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/ui/CharDisplayUI.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CharDisplayUI.cpp File Reference
+
+
+
#include "CharDisplayUI.h"
+
+Include dependency graph for CharDisplayUI.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/CharDisplayUI_8cpp__incl.map b/CharDisplayUI_8cpp__incl.map new file mode 100644 index 0000000..d1af920 --- /dev/null +++ b/CharDisplayUI_8cpp__incl.map @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CharDisplayUI_8cpp__incl.md5 b/CharDisplayUI_8cpp__incl.md5 new file mode 100644 index 0000000..32e35f1 --- /dev/null +++ b/CharDisplayUI_8cpp__incl.md5 @@ -0,0 +1 @@ +b7fcdec9caf950526e6c613709f3f3d5 \ No newline at end of file diff --git a/CharDisplayUI_8cpp__incl.svg b/CharDisplayUI_8cpp__incl.svg new file mode 100644 index 0000000..8af64b5 --- /dev/null +++ b/CharDisplayUI_8cpp__incl.svg @@ -0,0 +1,453 @@ + + + + + + +src/ui/CharDisplayUI.cpp + + +Node1 + + +src/ui/CharDisplayUI.cpp + + + + + +Node2 + + +CharDisplayUI.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +LiquidCrystal.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +etl/span.h + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +ControllerUI.h + + + + + +Node2->Node5 + + + + + + + + +Node15 + + +control/SingleHumidistat.h + + + + + +Node2->Node15 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6 + + +stdint.h + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +Print.h + + + + + +Node5->Node7 + + + + + + + + +Node8 + + +input/ButtonReader.h + + + + + +Node5->Node8 + + + + + + + + +Node11 + + +sensor/ThermistorReader.h + + + + + +Node5->Node11 + + + + + + + + +Node12 + + +asprintf.h + + + + + +Node5->Node12 + + + + + + + + +Node8->Node6 + + + + + + + + +Node9 + + +aliases.h + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +Buttons.h + + + + + +Node8->Node10 + + + + + + + + +Node11->Node6 + + + + + + + + +Node13 + + +stdlib.h + + + + + +Node12->Node13 + + + + + + + + +Node14 + + +stdio.h + + + + + +Node12->Node14 + + + + + + + + +Node15->Node6 + + + + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +etl/array.h + + + + + +Node15->Node16 + + + + + + + + +Node17 + + +Humidistat.h + + + + + +Node15->Node17 + + + + + + + + +Node20 + + +../EEPROMConfig.h + + + + + +Node15->Node20 + + + + + + + + +Node17->Node9 + + + + + + + + +Node18 + + +Controller.h + + + + + +Node17->Node18 + + + + + + + + +Node17->Node20 + + + + + + + + +Node18->Node6 + + + + + + + + +Node19 + + +PID.h + + + + + +Node18->Node19 + + + + + + + + +Node18->Node20 + + + + + + + + +Node19->Node6 + + + + + + + + diff --git a/CharDisplayUI_8cpp_source.html b/CharDisplayUI_8cpp_source.html new file mode 100644 index 0000000..85821a1 --- /dev/null +++ b/CharDisplayUI_8cpp_source.html @@ -0,0 +1,276 @@ + + + + + + + +Humidistat: src/ui/CharDisplayUI.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CharDisplayUI.cpp
+
+
+Go to the documentation of this file.
1#include "CharDisplayUI.h"
+
2
+
+
3CharDisplayUI::CharDisplayUI(LiquidCrystal *liquidCrystal, const ButtonReader *buttonReader,
+
4 SingleHumidistat *humidistat, etl::span<const ThermistorReader, 4> trs)
+
5 : ControllerUI(liquidCrystal, buttonReader, trs), liquidCrystal(*liquidCrystal), humidistat(*humidistat) {}
+
+
6
+
+ +
8 lastRefreshed = millis();
+
9 // Update current humidity and temperature readings
+
10 printf(2, 0, "%4.1f", humidistat.getHumidity());
+
11 printf(12, 1, "%4.1f", humidistat.getTemperature());
+
12
+
13 // Setpoint
+
14 {
+
15 char *buf = asprintf("%3.0f%%", humidistat.sp);
+
16 if (abs(humidistat.sp - humidistat.getHumidity())/100 > tolerance) {
+
17 blink(7, 0, buf);
+
18 } else {
+
19 liquidCrystal.setCursor(7, 0);
+
20 liquidCrystal.print(buf);
+
21 }
+
22 delete buf;
+
23 }
+
24
+
25 // Control value
+
26 printf(12, 0, "%3.0f%%", humidistat.cv*100);
+
27
+
28 // Active status
+
29 liquidCrystal.setCursor(0, 0);
+ +
31
+
32 // Thermistors
+
33 for (size_t i = 0; i < trs.size(); ++i) {
+
34 printNTC(3 * i, 1, i);
+
35 }
+
36}
+
+
37
+
+ +
39 liquidCrystal.clear();
+
40}
+
+
41
+
+
42void CharDisplayUI::setCursor(uint8_t col, uint8_t row) {
+
43 liquidCrystal.setCursor(col, row);
+
44}
+
+
45
+
+ +
47 liquidCrystal.clear();
+
48 liquidCrystal.setCursor(0, 0);
+
49 liquidCrystal.print("Humidistat");
+
50 liquidCrystal.setCursor(0, 1);
+
51 liquidCrystal.print("Lars Veldscholte");
+
52}
+
+
53
+
+ +
55 liquidCrystal.clear();
+
56 printf(0, 0, "%4u %3.2f %4.3f",
+ + + +
60 );
+
61 printf(0, 1, "%4.3f %4.3f",
+ + +
64 );
+
65}
+
+
66
+
+ +
68 liquidCrystal.begin(16, 2);
+
69}
+
+
70
+
+
71bool CharDisplayUI::handleInput(Buttons state, uint16_t pressedFor) {
+
72 int8_t delta;
+
73 switch (state) {
+
74 case Buttons::UP:
+
75 delta = 1;
+
76 break;
+
77 case Buttons::DOWN:
+
78 delta = -1;
+
79 break;
+
80 case Buttons::LEFT:
+
81 delta = static_cast<int8_t>(-adjustStep);
+
82 break;
+
83 case Buttons::RIGHT:
+
84 delta = static_cast<int8_t>(adjustStep);
+
85 break;
+
86 case Buttons::SELECT:
+
87 // Toggle active state
+ +
89 return true;
+
90 default:
+
91 return false;
+
92 }
+
93
+
94 if (humidistat.active) {
+
95 adjustValue(delta, humidistat.sp, 0, 100);
+
96 } else {
+ +
98 }
+
99 return true;
+
100}
+
+
Buttons
Possible button values.
Definition Buttons.h:5
+ + + + + + +
char * asprintf(const char *fmt, T... args)
Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition asprintf.h:13
+
Read button state from a voltage ladder-style keypad.
+
LiquidCrystal & liquidCrystal
+
void drawSplash() override
Draw splash screen.
+
bool handleInput(Buttons state, uint16_t pressedFor) override
Handle input.
+
void setCursor(uint8_t col, uint8_t row) override
Set cursor to coordinates.
+
CharDisplayUI(LiquidCrystal *liquidCrystal, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs)
Constructor.
+
void drawInfo() override
Draw info screen.
+
void draw() override
Draw main interface (main loop).
+
SingleHumidistat & humidistat
+
void begin() override
Initialize the display.
+
void clear() override
Clear screen.
+
User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input,...
+
const double tolerance
+
static void adjustValue(double delta, double &value, uint8_t min, uint8_t max)
In-/de-crement a variable, while clipping it to [min, max].
+
etl::span< const ThermistorReader, 4 > trs
+
unsigned long lastRefreshed
Last time display was updated (in millis)
+
void printf(uint8_t col, uint8_t row, const char *fmt, T... args)
Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer int...
+
void printNTC(uint8_t col, uint8_t row, uint8_t i)
Print temperature read from thermistors. Handles NaN values as 0.
+
const uint8_t adjustStep
+
void blink(uint8_t col, uint8_t row, const char *buf)
Print blinking text.
+
double sp
Setpoint.
Definition Controller.h:22
+
const ConfigStore * getConfigStore()
Get a pointer to the ConfigStore instance.
+
bool active
Definition Controller.h:19
+
double cv
Control variable.
Definition Controller.h:23
+
double getHumidity() const
Read the humidity.
Definition Humidistat.cpp:7
+
double getCvMin() const
+
double getCvMax() const
+
double getTemperature() const
Read the temperature.
+
Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and ca...
+
SerialLogger< cHumidistat > serialLogger & humidistat
Definition main.cpp:84
+
ButtonReader buttonReader(config::PIN_BTN, &voltLadder)
+
ThermistorReader trs[]
Definition main.cpp:25
+ + +
double HC_Kp
Humidity controller PID parameters.
+
double S_lowValue
Minimum solenoid duty cycle (deadband)
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+
+
+ + + + diff --git a/CharDisplayUI_8h.html b/CharDisplayUI_8h.html new file mode 100644 index 0000000..14d4860 --- /dev/null +++ b/CharDisplayUI_8h.html @@ -0,0 +1,140 @@ + + + + + + + +Humidistat: src/ui/CharDisplayUI.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
CharDisplayUI.h File Reference
+
+
+
#include <LiquidCrystal.h>
+#include <etl/span.h>
+#include "ControllerUI.h"
+#include "control/SingleHumidistat.h"
+
+Include dependency graph for CharDisplayUI.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  CharDisplayUI
 TUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display. Displays current mode, PV, SP, and CV the first line of the display, and temperatures on the second line. Use keypad to adjust setpoint (UP/DOWN for fine, LEFT/RIGHT for coarse). More...
 
+
+
+ + + + diff --git a/CharDisplayUI_8h.js b/CharDisplayUI_8h.js new file mode 100644 index 0000000..b691b54 --- /dev/null +++ b/CharDisplayUI_8h.js @@ -0,0 +1,4 @@ +var CharDisplayUI_8h = +[ + [ "CharDisplayUI", "classCharDisplayUI.html", "classCharDisplayUI" ] +]; \ No newline at end of file diff --git a/CharDisplayUI_8h__dep__incl.map b/CharDisplayUI_8h__dep__incl.map new file mode 100644 index 0000000..715a3f8 --- /dev/null +++ b/CharDisplayUI_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/CharDisplayUI_8h__dep__incl.md5 b/CharDisplayUI_8h__dep__incl.md5 new file mode 100644 index 0000000..9f29bf7 --- /dev/null +++ b/CharDisplayUI_8h__dep__incl.md5 @@ -0,0 +1 @@ +e2fea8ef6483467bd50050e0224525b3 \ No newline at end of file diff --git a/CharDisplayUI_8h__dep__incl.svg b/CharDisplayUI_8h__dep__incl.svg new file mode 100644 index 0000000..fa23bef --- /dev/null +++ b/CharDisplayUI_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/ui/CharDisplayUI.h + + +Node1 + + +src/ui/CharDisplayUI.h + + + + + +Node2 + + +src/ui/CharDisplayUI.cpp + + + + + +Node1->Node2 + + + + + + + + diff --git a/CharDisplayUI_8h__incl.map b/CharDisplayUI_8h__incl.map new file mode 100644 index 0000000..853855f --- /dev/null +++ b/CharDisplayUI_8h__incl.map @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CharDisplayUI_8h__incl.md5 b/CharDisplayUI_8h__incl.md5 new file mode 100644 index 0000000..df9882a --- /dev/null +++ b/CharDisplayUI_8h__incl.md5 @@ -0,0 +1 @@ +c9a54a334e62e28a625a1d0d04bddc4b \ No newline at end of file diff --git a/CharDisplayUI_8h__incl.svg b/CharDisplayUI_8h__incl.svg new file mode 100644 index 0000000..083d0e9 --- /dev/null +++ b/CharDisplayUI_8h__incl.svg @@ -0,0 +1,435 @@ + + + + + + +src/ui/CharDisplayUI.h + + +Node1 + + +src/ui/CharDisplayUI.h + + + + + +Node2 + + +LiquidCrystal.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +ControllerUI.h + + + + + +Node1->Node4 + + + + + + + + +Node14 + + +control/SingleHumidistat.h + + + + + +Node1->Node14 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +Print.h + + + + + +Node4->Node6 + + + + + + + + +Node7 + + +input/ButtonReader.h + + + + + +Node4->Node7 + + + + + + + + +Node10 + + +sensor/ThermistorReader.h + + + + + +Node4->Node10 + + + + + + + + +Node11 + + +asprintf.h + + + + + +Node4->Node11 + + + + + + + + +Node7->Node5 + + + + + + + + +Node8 + + +aliases.h + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +Buttons.h + + + + + +Node7->Node9 + + + + + + + + +Node10->Node5 + + + + + + + + +Node12 + + +stdlib.h + + + + + +Node11->Node12 + + + + + + + + +Node13 + + +stdio.h + + + + + +Node11->Node13 + + + + + + + + +Node14->Node5 + + + + + + + + +Node14->Node8 + + + + + + + + +Node15 + + +etl/array.h + + + + + +Node14->Node15 + + + + + + + + +Node16 + + +Humidistat.h + + + + + +Node14->Node16 + + + + + + + + +Node19 + + +../EEPROMConfig.h + + + + + +Node14->Node19 + + + + + + + + +Node16->Node8 + + + + + + + + +Node17 + + +Controller.h + + + + + +Node16->Node17 + + + + + + + + +Node16->Node19 + + + + + + + + +Node17->Node5 + + + + + + + + +Node18 + + +PID.h + + + + + +Node17->Node18 + + + + + + + + +Node17->Node19 + + + + + + + + +Node18->Node5 + + + + + + + + diff --git a/CharDisplayUI_8h_source.html b/CharDisplayUI_8h_source.html new file mode 100644 index 0000000..1c04cef --- /dev/null +++ b/CharDisplayUI_8h_source.html @@ -0,0 +1,166 @@ + + + + + + + +Humidistat: src/ui/CharDisplayUI.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CharDisplayUI.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CHARDISPLAYUI_H
+
2#define HUMIDISTAT_CHARDISPLAYUI_H
+
3
+
4#include <LiquidCrystal.h>
+
5#include <etl/span.h>
+
6
+
7#include "ControllerUI.h"
+ +
9
+
+ +
15private:
+
16 LiquidCrystal& liquidCrystal;
+ +
18
+
19 void draw() override;
+
20 void drawSplash() override;
+
21 void drawInfo() override;
+
22 void clear() override;
+
23 void setCursor(uint8_t col, uint8_t row) override;
+
24 bool handleInput(Buttons state, uint16_t pressedFor) override;
+
25
+
26public:
+ +
33 etl::span<const ThermistorReader, 4> trs);
+
34
+
35 void begin() override;
+
36};
+
+
37
+
38
+
39#endif //HUMIDISTAT_CHARDISPLAYUI_H
+
Buttons
Possible button values.
Definition Buttons.h:5
+ + +
Read button state from a voltage ladder-style keypad.
+
TUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display....
+
LiquidCrystal & liquidCrystal
+
void drawSplash() override
Draw splash screen.
+
bool handleInput(Buttons state, uint16_t pressedFor) override
Handle input.
+
void setCursor(uint8_t col, uint8_t row) override
Set cursor to coordinates.
+
CharDisplayUI(LiquidCrystal *liquidCrystal, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs)
Constructor.
+
void drawInfo() override
Draw info screen.
+
void draw() override
Draw main interface (main loop).
+
SingleHumidistat & humidistat
+
void begin() override
Initialize the display.
+
void clear() override
Clear screen.
+
User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input,...
+
etl::span< const ThermistorReader, 4 > trs
+
const ButtonReader & buttonReader
+
Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and ca...
+
+
+ + + + diff --git a/ConfigPar_8cpp.html b/ConfigPar_8cpp.html new file mode 100644 index 0000000..82c8190 --- /dev/null +++ b/ConfigPar_8cpp.html @@ -0,0 +1,127 @@ + + + + + + + +Humidistat: src/ui/ConfigPar.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ConfigPar.cpp File Reference
+
+
+
#include <stdint.h>
+#include <math.h>
+#include "ConfigPar.h"
+#include "asprintf.h"
+#include "imath.h"
+
+Include dependency graph for ConfigPar.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/ConfigPar_8cpp__incl.map b/ConfigPar_8cpp__incl.map new file mode 100644 index 0000000..8fc4230 --- /dev/null +++ b/ConfigPar_8cpp__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/ConfigPar_8cpp__incl.md5 b/ConfigPar_8cpp__incl.md5 new file mode 100644 index 0000000..2fb1853 --- /dev/null +++ b/ConfigPar_8cpp__incl.md5 @@ -0,0 +1 @@ +89b37399a16067aa5590934b058517b1 \ No newline at end of file diff --git a/ConfigPar_8cpp__incl.svg b/ConfigPar_8cpp__incl.svg new file mode 100644 index 0000000..8193355 --- /dev/null +++ b/ConfigPar_8cpp__incl.svg @@ -0,0 +1,147 @@ + + + + + + +src/ui/ConfigPar.cpp + + +Node1 + + +src/ui/ConfigPar.cpp + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +math.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +ConfigPar.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +asprintf.h + + + + + +Node1->Node5 + + + + + + + + +Node8 + + +imath.h + + + + + +Node1->Node8 + + + + + + + + +Node6 + + +stdlib.h + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +stdio.h + + + + + +Node5->Node7 + + + + + + + + diff --git a/ConfigPar_8cpp_source.html b/ConfigPar_8cpp_source.html new file mode 100644 index 0000000..a01a5cd --- /dev/null +++ b/ConfigPar_8cpp_source.html @@ -0,0 +1,186 @@ + + + + + + + +Humidistat: src/ui/ConfigPar.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ConfigPar.cpp
+
+
+Go to the documentation of this file.
1#include <stdint.h>
+
2#include <math.h>
+
3
+
4#include "ConfigPar.h"
+
5#include "asprintf.h"
+
6#include "imath.h"
+
7
+
+
8void ConfigPar::adjust(int16_t delta) const {
+
9 switch (var.type) {
+ +
11 *var.ui8 += delta;
+
12 return;
+ +
14 *var.ui16 += delta;
+
15 return;
+ +
17 *var.d += static_cast<double>(delta) / ipow(10, NUM_DECIMALS);
+
18 return;
+
19 }
+
20}
+
+
21
+
+
22char *ConfigPar::asprint() const {
+
23 switch (var.type) {
+ +
25 return asprintf("%-8s % " XSTR(WIDTH) "u", label, *var.ui8);
+ +
27 return asprintf("%-8s % " XSTR(WIDTH) "u", label, *var.ui16);
+ +
29 return asprintf("%-8s % " XSTR(WIDTH) "." XSTR(NUM_DECIMALS) "f", label, *var.d);
+
30 }
+
31}
+
+
32
+
+
33uint8_t ConfigPar::magnitude() const {
+
34 auto mag = [](auto n) -> uint8_t {return floor(ilog10(floor(abs(n))));};
+
35
+
36 switch (var.type) {
+ +
38 return mag(*var.ui8);
+ +
40 return mag(*var.ui16);
+ +
42 return mag(*var.d);
+
43 }
+
44}
+
+ +
#define XSTR(s)
Definition ConfigPar.h:4
+
#define WIDTH
Definition ConfigPar.h:6
+
#define NUM_DECIMALS
Definition ConfigPar.h:8
+ +
char * asprintf(const char *fmt, T... args)
Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition asprintf.h:13
+
uint8_t magnitude() const
Get magnitude (number of digits before the decimal separator) of variable.
Definition ConfigPar.cpp:33
+
char * asprint() const
Print "label: value" to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition ConfigPar.cpp:22
+
void adjust(int16_t delta) const
Add delta to the variable.
Definition ConfigPar.cpp:8
+ + + +
struct ConfigPar::Var var
+
char label[10]
Definition ConfigPar.h:40
+ +
constexpr unsigned int ilog10(int n)
Constexpr integer base-10 logarithm.
Definition imath.h:17
+
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
double *const d
Definition ConfigPar.h:25
+
const ConfigParType type
Definition ConfigPar.h:21
+
uint16_t *const ui16
Definition ConfigPar.h:24
+
uint8_t *const ui8
Definition ConfigPar.h:23
+
+
+ + + + diff --git a/ConfigPar_8h.html b/ConfigPar_8h.html new file mode 100644 index 0000000..45bf59a --- /dev/null +++ b/ConfigPar_8h.html @@ -0,0 +1,237 @@ + + + + + + + +Humidistat: src/ui/ConfigPar.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ConfigPar.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + +

+Classes

class  ConfigPar
 A class for storing references to variables of various types (uint8_t, uint16_t, or double). More...
 
struct  ConfigPar::Var
 
+ + + + + + + + + + + +

+Macros

#define XSTR(s)
 
#define STR(s)
 
#define WIDTH   7
 
#define NUM_DIGITS   WIDTH - 2
 
#define NUM_DECIMALS   4
 
+

Macro Definition Documentation

+ +

◆ NUM_DECIMALS

+ +
+
+ + + + +
#define NUM_DECIMALS   4
+
+ +

Definition at line 8 of file ConfigPar.h.

+ +
+
+ +

◆ NUM_DIGITS

+ +
+
+ + + + +
#define NUM_DIGITS   WIDTH - 2
+
+ +

Definition at line 7 of file ConfigPar.h.

+ +
+
+ +

◆ STR

+ +
+
+ + + + + + + +
#define STR( s)
+
+Value:
#s
+
+

Definition at line 5 of file ConfigPar.h.

+ +
+
+ +

◆ WIDTH

+ +
+
+ + + + +
#define WIDTH   7
+
+ +

Definition at line 6 of file ConfigPar.h.

+ +
+
+ +

◆ XSTR

+ +
+
+ + + + + + + +
#define XSTR( s)
+
+Value:
STR(s)
+
#define STR(s)
Definition ConfigPar.h:5
+
+

Definition at line 4 of file ConfigPar.h.

+ +
+
+
+
+ + + + diff --git a/ConfigPar_8h.js b/ConfigPar_8h.js new file mode 100644 index 0000000..3a8ea03 --- /dev/null +++ b/ConfigPar_8h.js @@ -0,0 +1,10 @@ +var ConfigPar_8h = +[ + [ "ConfigPar", "classConfigPar.html", "classConfigPar" ], + [ "ConfigPar::Var", "structConfigPar_1_1Var.html", "structConfigPar_1_1Var" ], + [ "NUM_DECIMALS", "ConfigPar_8h.html#ab105e459be047d1c57e048a2ce0820ac", null ], + [ "NUM_DIGITS", "ConfigPar_8h.html#a0b79fa1bdb1363440df485691386a74c", null ], + [ "STR", "ConfigPar_8h.html#a6388870e639eee9c0a69446876f1f8cc", null ], + [ "WIDTH", "ConfigPar_8h.html#a241aeeb764887ae5e3de58b98f04b16d", null ], + [ "XSTR", "ConfigPar_8h.html#a03943706e48069237cd57f2d35ca987e", null ] +]; \ No newline at end of file diff --git a/ConfigPar_8h__dep__incl.map b/ConfigPar_8h__dep__incl.map new file mode 100644 index 0000000..8cb3259 --- /dev/null +++ b/ConfigPar_8h__dep__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/ConfigPar_8h__dep__incl.md5 b/ConfigPar_8h__dep__incl.md5 new file mode 100644 index 0000000..786332d --- /dev/null +++ b/ConfigPar_8h__dep__incl.md5 @@ -0,0 +1 @@ +db2c9c7022f1ffa1ae6784a18721cb60 \ No newline at end of file diff --git a/ConfigPar_8h__dep__incl.svg b/ConfigPar_8h__dep__incl.svg new file mode 100644 index 0000000..e5f950e --- /dev/null +++ b/ConfigPar_8h__dep__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/ui/ConfigPar.h + + +Node1 + + +src/ui/ConfigPar.h + + + + + +Node2 + + +src/ui/ConfigPar.cpp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/ConfigPar_8h_source.html b/ConfigPar_8h_source.html new file mode 100644 index 0000000..286702e --- /dev/null +++ b/ConfigPar_8h_source.html @@ -0,0 +1,184 @@ + + + + + + + +Humidistat: src/ui/ConfigPar.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ConfigPar.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CONFIGPAR_H
+
2#define HUMIDISTAT_CONFIGPAR_H
+
3
+
4#define XSTR(s) STR(s)
+
5#define STR(s) #s
+
6#define WIDTH 7
+
7#define NUM_DIGITS WIDTH - 2
+
8#define NUM_DECIMALS 4
+
9
+
+
11class ConfigPar {
+
12public:
+
+
13 enum class ConfigParType {
+
14 ui8,
+
15 ui16,
+
16 d,
+
17 };
+
+
18 // The nested struct is in order to have an overloaded constructor for the type and the union, but avoid
+
19 // having to strcopy the label
+
+
20 struct Var {
+ +
22 union {
+
23 uint8_t *const ui8;
+
24 uint16_t *const ui16;
+
25 double *const d;
+
26 };
+
27
+
31 Var(uint8_t *par) : type(ConfigParType::ui16), ui8(par) {}
+
32 Var(uint16_t *par) : type(ConfigParType::ui16), ui16(par) {}
+
33 Var(double *par) : type(ConfigParType::d), d(par) {}
+
35
+
37 Var() : type(ConfigParType::ui8), ui8(nullptr) {}
+
38 } var;
+
+
39
+
40 char label[10];
+
41
+
44 void adjust(int16_t delta) const;
+
45
+
49 char *asprint() const;
+
50
+
53 uint8_t magnitude() const;
+
54};
+
+
55
+
56
+
57#endif //HUMIDISTAT_CONFIGPAR_H
+
A class for storing references to variables of various types (uint8_t, uint16_t, or double).
Definition ConfigPar.h:11
+
uint8_t magnitude() const
Get magnitude (number of digits before the decimal separator) of variable.
Definition ConfigPar.cpp:33
+
char * asprint() const
Print "label: value" to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition ConfigPar.cpp:22
+
void adjust(int16_t delta) const
Add delta to the variable.
Definition ConfigPar.cpp:8
+ + + + +
struct ConfigPar::Var var
+
char label[10]
Definition ConfigPar.h:40
+ +
Var(double *par)
Definition ConfigPar.h:33
+
double *const d
Definition ConfigPar.h:25
+
Var(uint16_t *par)
Definition ConfigPar.h:32
+
const ConfigParType type
Definition ConfigPar.h:21
+
uint16_t *const ui16
Definition ConfigPar.h:24
+
uint8_t *const ui8
Definition ConfigPar.h:23
+
Var()
Default constructor, initializes with nullptr.
Definition ConfigPar.h:37
+
Var(uint8_t *par)
Constructor.
Definition ConfigPar.h:31
+
+
+ + + + diff --git a/ControllerUI_8cpp.html b/ControllerUI_8cpp.html new file mode 100644 index 0000000..5a1e068 --- /dev/null +++ b/ControllerUI_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/ui/ControllerUI.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ControllerUI.cpp File Reference
+
+
+
#include "ControllerUI.h"
+
+Include dependency graph for ControllerUI.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/ControllerUI_8cpp__incl.map b/ControllerUI_8cpp__incl.map new file mode 100644 index 0000000..9d93583 --- /dev/null +++ b/ControllerUI_8cpp__incl.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ControllerUI_8cpp__incl.md5 b/ControllerUI_8cpp__incl.md5 new file mode 100644 index 0000000..772a1ee --- /dev/null +++ b/ControllerUI_8cpp__incl.md5 @@ -0,0 +1 @@ +547709b76ddcfa0950999901dfcc6431 \ No newline at end of file diff --git a/ControllerUI_8cpp__incl.svg b/ControllerUI_8cpp__incl.svg new file mode 100644 index 0000000..b5bddaf --- /dev/null +++ b/ControllerUI_8cpp__incl.svg @@ -0,0 +1,237 @@ + + + + + + +src/ui/ControllerUI.cpp + + +Node1 + + +src/ui/ControllerUI.cpp + + + + + +Node2 + + +ControllerUI.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +etl/span.h + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +Print.h + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +input/ButtonReader.h + + + + + +Node2->Node6 + + + + + + + + +Node9 + + +sensor/ThermistorReader.h + + + + + +Node2->Node9 + + + + + + + + +Node10 + + +asprintf.h + + + + + +Node2->Node10 + + + + + + + + +Node6->Node3 + + + + + + + + +Node7 + + +aliases.h + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +Buttons.h + + + + + +Node6->Node8 + + + + + + + + +Node9->Node3 + + + + + + + + +Node11 + + +stdlib.h + + + + + +Node10->Node11 + + + + + + + + +Node12 + + +stdio.h + + + + + +Node10->Node12 + + + + + + + + diff --git a/ControllerUI_8cpp_source.html b/ControllerUI_8cpp_source.html new file mode 100644 index 0000000..93dc97e --- /dev/null +++ b/ControllerUI_8cpp_source.html @@ -0,0 +1,236 @@ + + + + + + + +Humidistat: src/ui/ControllerUI.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ControllerUI.cpp
+
+
+Go to the documentation of this file.
1#include "ControllerUI.h"
+
2
+
+
3ControllerUI::ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span<const ThermistorReader, 4> trs)
+
4 : display(*display), buttonReader(*buttonReader), trs(trs) {}
+
+
5
+
+ +
7 // Show splash screen and info (draw it once) for a short time after boot
+
8 if (millis() < splashDuration) {
+
9 if (!splashDrawn) {
+
10 drawSplash();
+
11 splashDrawn = true;
+
12 }
+
13 return;
+
14 }
+
15 if (millis() - splashDuration < infoDuration) {
+
16 if (!infoDrawn) {
+
17 drawInfo();
+
18 infoDrawn = true;
+
19 }
+
20 return;
+
21 }
+
22 // Clear screen once after splash and info are shown
+
23 if (!screenCleared) {
+
24 clear();
+
25 screenCleared = true;
+
26 }
+
27
+ +
29 uint32_t pressedFor = buttonReader.getPressedFor();
+
30 // Debouncing: only call the input handler if it has been at least inputInterval since the last action, and if
+
31 // the keypress has been stable for at least buttonDebounceInterval
+
32 if (millis() - lastPressed >= inputInterval && pressedFor > buttonDebounceInterval) {
+
33 if (handleInput(state, pressedFor/1000)) {
+
34 lastPressed = millis();
+
35 draw();
+
36 }
+
37 }
+
38 if (millis() - lastRefreshed >= refreshInterval) {
+
39 draw();
+
40 }
+
41}
+
+
42
+
+
43void ControllerUI::blink(uint8_t col, uint8_t row, const char *buf) {
+
44 setCursor(col, row);
+
45 if (millis() % (2 * blinkInterval) >= blinkInterval) {
+
46 display.print(buf);
+
47 } else {
+
48 // Create char array of spaces with same length as buf
+
49 size_t len = strlen(buf);
+
50 char clrBuf[len + 1];
+
51 memset(clrBuf, ' ', len);
+
52 clrBuf[len] = '\0';
+
53
+
54 display.print(clrBuf);
+
55 }
+
56}
+
+
57
+
+
58void ControllerUI::printNTC(uint8_t col, uint8_t row, uint8_t i) {
+
59 double temp = trs[i].readTemp();
+
60 if (isnan(temp)) {
+
61 printf(col, row, "%2u", 0);
+
62 } else {
+
63 printf(col, row, "%2u", static_cast<uint8_t>(temp));
+
64 }
+
65}
+
+
66
+
+
67void ControllerUI::adjustValue(double delta, double &value, uint8_t min, uint8_t max) {
+
68 // Clip value to [min, max] before uint overflow happens
+
69 if(value + delta < min) {
+
70 value = min;
+
71 return;
+
72 }
+
73 if(value + delta > max) {
+
74 value = max;
+
75 return;
+
76 }
+
77 value += delta;
+
78}
+
+
Buttons
Possible button values.
Definition Buttons.h:5
+ +
Read button state from a voltage ladder-style keypad.
+
uint32_t getPressedFor() const
Get the duration the key has been pressed. This can be used for debouncing using a stable interval.
+
Buttons isPressed() const
Get the button state.
+
const uint16_t refreshInterval
+
Print & display
+
static void adjustValue(double delta, double &value, uint8_t min, uint8_t max)
In-/de-crement a variable, while clipping it to [min, max].
+
etl::span< const ThermistorReader, 4 > trs
+
unsigned long lastRefreshed
Last time display was updated (in millis)
+
const uint16_t splashDuration
+ +
void update()
Update the display and handle input: set Humidistat's setpoint.
+
const uint16_t inputInterval
+
virtual void drawSplash()=0
Draw splash screen.
+ +
virtual void setCursor(uint8_t col, uint8_t row)=0
Set cursor to coordinates.
+
const uint16_t infoDuration
+
void printf(uint8_t col, uint8_t row, const char *fmt, T... args)
Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer int...
+
const uint16_t blinkInterval
+
virtual bool handleInput(Buttons state, uint16_t pressedFor)=0
Handle input.
+
const uint16_t buttonDebounceInterval
+
ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)
Constructor.
+
const ButtonReader & buttonReader
+
void printNTC(uint8_t col, uint8_t row, uint8_t i)
Print temperature read from thermistors. Handles NaN values as 0.
+
virtual void drawInfo()=0
Draw info screen.
+
virtual void draw()=0
Draw main interface (main loop).
+
unsigned long lastPressed
Last time a keypress event occurred (in millis)
+ +
virtual void clear()=0
Clear screen.
+
void blink(uint8_t col, uint8_t row, const char *buf)
Print blinking text.
+
ButtonReader buttonReader(config::PIN_BTN, &voltLadder)
+
ThermistorReader trs[]
Definition main.cpp:25
+
+
+ + + + diff --git a/ControllerUI_8h.html b/ControllerUI_8h.html new file mode 100644 index 0000000..ea7723c --- /dev/null +++ b/ControllerUI_8h.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/ui/ControllerUI.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ControllerUI.h File Reference
+
+
+
#include <stdint.h>
+#include <etl/span.h>
+#include <Print.h>
+#include "input/ButtonReader.h"
+#include "sensor/ThermistorReader.h"
+#include "asprintf.h"
+
+Include dependency graph for ControllerUI.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  ControllerUI
 User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input, and Humidistat for updating the humidity setpoint. More...
 
+
+
+ + + + diff --git a/ControllerUI_8h.js b/ControllerUI_8h.js new file mode 100644 index 0000000..c52ae61 --- /dev/null +++ b/ControllerUI_8h.js @@ -0,0 +1,4 @@ +var ControllerUI_8h = +[ + [ "ControllerUI", "classControllerUI.html", "classControllerUI" ] +]; \ No newline at end of file diff --git a/ControllerUI_8h__dep__incl.map b/ControllerUI_8h__dep__incl.map new file mode 100644 index 0000000..c4a0aed --- /dev/null +++ b/ControllerUI_8h__dep__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/ControllerUI_8h__dep__incl.md5 b/ControllerUI_8h__dep__incl.md5 new file mode 100644 index 0000000..cc36cbb --- /dev/null +++ b/ControllerUI_8h__dep__incl.md5 @@ -0,0 +1 @@ +e7aaa4d968813cd8a4897667ca1da2f8 \ No newline at end of file diff --git a/ControllerUI_8h__dep__incl.svg b/ControllerUI_8h__dep__incl.svg new file mode 100644 index 0000000..9f92903 --- /dev/null +++ b/ControllerUI_8h__dep__incl.svg @@ -0,0 +1,93 @@ + + + + + + +src/ui/ControllerUI.h + + +Node1 + + +src/ui/ControllerUI.h + + + + + +Node2 + + +src/ui/CharDisplayUI.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +src/ui/ControllerUI.cpp + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +src/ui/CharDisplayUI.cpp + + + + + +Node2->Node3 + + + + + + + + diff --git a/ControllerUI_8h__incl.map b/ControllerUI_8h__incl.map new file mode 100644 index 0000000..34876ad --- /dev/null +++ b/ControllerUI_8h__incl.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ControllerUI_8h__incl.md5 b/ControllerUI_8h__incl.md5 new file mode 100644 index 0000000..c1c4f5f --- /dev/null +++ b/ControllerUI_8h__incl.md5 @@ -0,0 +1 @@ +dadd50c8939cc9de645ace5aaaaaf46c \ No newline at end of file diff --git a/ControllerUI_8h__incl.svg b/ControllerUI_8h__incl.svg new file mode 100644 index 0000000..2b85c6b --- /dev/null +++ b/ControllerUI_8h__incl.svg @@ -0,0 +1,219 @@ + + + + + + +src/ui/ControllerUI.h + + +Node1 + + +src/ui/ControllerUI.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +Print.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +input/ButtonReader.h + + + + + +Node1->Node5 + + + + + + + + +Node8 + + +sensor/ThermistorReader.h + + + + + +Node1->Node8 + + + + + + + + +Node9 + + +asprintf.h + + + + + +Node1->Node9 + + + + + + + + +Node5->Node2 + + + + + + + + +Node6 + + +aliases.h + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +Buttons.h + + + + + +Node5->Node7 + + + + + + + + +Node8->Node2 + + + + + + + + +Node10 + + +stdlib.h + + + + + +Node9->Node10 + + + + + + + + +Node11 + + +stdio.h + + + + + +Node9->Node11 + + + + + + + + diff --git a/ControllerUI_8h_source.html b/ControllerUI_8h_source.html new file mode 100644 index 0000000..908f4a6 --- /dev/null +++ b/ControllerUI_8h_source.html @@ -0,0 +1,235 @@ + + + + + + + +Humidistat: src/ui/ControllerUI.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ControllerUI.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CONTROLLERUI_H
+
2#define HUMIDISTAT_CONTROLLERUI_H
+
3
+
4#include <stdint.h>
+
5#include <etl/span.h>
+
6#include <Print.h>
+
7
+
8#include CONFIG_HEADER
+ + +
11#include "asprintf.h"
+
12
+
+ +
16private:
+
17 Print &display;
+ +
19
+
20 unsigned long lastPressed = 0;
+
21
+ + + + + +
27
+
28 bool splashDrawn = false;
+
29 bool infoDrawn = false;
+
30 bool screenCleared = false;
+
31
+
33 virtual void draw() = 0;
+
35 virtual void drawSplash() = 0;
+
37 virtual void drawInfo() = 0;
+
38
+
40 virtual void clear() = 0;
+
44 virtual void setCursor(uint8_t col, uint8_t row) = 0;
+
45
+
50 virtual bool handleInput(Buttons state, uint16_t pressedFor) = 0;
+
51
+
52protected:
+
53 etl::span<const ThermistorReader, 4> trs;
+
54
+
55 unsigned long lastRefreshed = 0;
+
56
+ + + +
60
+
65 explicit ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span<const ThermistorReader, 4> trs);
+
66
+
71 void blink(uint8_t col, uint8_t row, const char *buf);
+
72
+
77 void printNTC(uint8_t col, uint8_t row, uint8_t i);
+
78
+
84 static void adjustValue(double delta, double &value, uint8_t min, uint8_t max);
+
85
+
91 template <typename... T>
+
+
92 void printf(uint8_t col, uint8_t row, const char *fmt, T... args) {
+
93 char *buf = asprintf(fmt, args...);
+
94
+
95 setCursor(col, row);
+
96 display.print(buf);
+
97
+
98 delete buf;
+
99 }
+
+
100
+
101public:
+
103 virtual void begin() = 0;
+
104
+
106 void update();
+
107};
+
+
108
+
109#endif //HUMIDISTAT_CONTROLLERUI_H
+ +
Buttons
Possible button values.
Definition Buttons.h:5
+ + +
char * asprintf(const char *fmt, T... args)
Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition asprintf.h:13
+
Read button state from a voltage ladder-style keypad.
+
User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input,...
+
const uint16_t refreshInterval
+
const double tolerance
+
Print & display
+
static void adjustValue(double delta, double &value, uint8_t min, uint8_t max)
In-/de-crement a variable, while clipping it to [min, max].
+
etl::span< const ThermistorReader, 4 > trs
+
unsigned long lastRefreshed
Last time display was updated (in millis)
+
const uint16_t splashDuration
+ +
void update()
Update the display and handle input: set Humidistat's setpoint.
+
const uint16_t inputInterval
+
virtual void drawSplash()=0
Draw splash screen.
+ +
virtual void setCursor(uint8_t col, uint8_t row)=0
Set cursor to coordinates.
+
const uint16_t infoDuration
+
virtual void begin()=0
Initialize the display.
+
void printf(uint8_t col, uint8_t row, const char *fmt, T... args)
Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer int...
+
const uint16_t blinkInterval
+
virtual bool handleInput(Buttons state, uint16_t pressedFor)=0
Handle input.
+
const uint16_t buttonDebounceInterval
+
ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)
Constructor.
+
const ButtonReader & buttonReader
+
void printNTC(uint8_t col, uint8_t row, uint8_t i)
Print temperature read from thermistors. Handles NaN values as 0.
+
virtual void drawInfo()=0
Draw info screen.
+
virtual void draw()=0
Draw main interface (main loop).
+
unsigned long lastPressed
Last time a keypress event occurred (in millis)
+
const uint8_t adjustStep
+ +
virtual void clear()=0
Clear screen.
+
void blink(uint8_t col, uint8_t row, const char *buf)
Print blinking text.
+
const uint16_t refreshInterval
Interval for updating the display (in millis)
Definition config.h:163
+
const uint16_t blinkInterval
Interval for blinking display elements (in millis)
Definition config.h:154
+
const double tolerance
Tolerance in difference between process variable and setpoint outside which the setpoint blinks (in p...
Definition config.h:170
+
const uint16_t buttonDebounceInterval
For debouncing: interval the keypad state must be stable for (in micros)
Definition config.h:148
+
const uint16_t infoDuration
Duration for which to show the info screen (in millis)
Definition config.h:160
+
const uint16_t splashDuration
Duration for which to show the splash screen (in millis)
Definition config.h:157
+
const uint8_t adjustStep
Step size by which to in-/de-crement for coarse adjustment.
Definition config.h:166
+
const uint16_t inputInterval
Repeat interval for keypress events (in millis)
Definition config.h:151
+
+
+ + + + diff --git a/Controller_8cpp.html b/Controller_8cpp.html new file mode 100644 index 0000000..87aed73 --- /dev/null +++ b/Controller_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/control/Controller.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Controller.cpp File Reference
+
+
+
#include "Controller.h"
+
+Include dependency graph for Controller.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/Controller_8cpp__incl.map b/Controller_8cpp__incl.map new file mode 100644 index 0000000..2779573 --- /dev/null +++ b/Controller_8cpp__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Controller_8cpp__incl.md5 b/Controller_8cpp__incl.md5 new file mode 100644 index 0000000..511c625 --- /dev/null +++ b/Controller_8cpp__incl.md5 @@ -0,0 +1 @@ +92690008cd7c807a47111ca4a0b19ec9 \ No newline at end of file diff --git a/Controller_8cpp__incl.svg b/Controller_8cpp__incl.svg new file mode 100644 index 0000000..ecffaef --- /dev/null +++ b/Controller_8cpp__incl.svg @@ -0,0 +1,102 @@ + + + + + + +src/control/Controller.cpp + + +Node1 + + +src/control/Controller.cpp + + + + + +Node2 + + +Controller.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +PID.h + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +../EEPROMConfig.h + + + + + +Node2->Node5 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/Controller_8cpp_source.html b/Controller_8cpp_source.html new file mode 100644 index 0000000..2a6b48b --- /dev/null +++ b/Controller_8cpp_source.html @@ -0,0 +1,146 @@ + + + + + + + +Humidistat: src/control/Controller.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Controller.cpp
+
+
+Go to the documentation of this file.
1#include "Controller.h"
+
2
+
+
3Controller::Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin,
+
4 double cvMax, double defaultSP, double defaultCV)
+
5 : pid(&pv, &cv, &sp, Kp, Ki, Kd, Kf, dt, cvMin, cvMax, cs->a), cs(*cs), sp(defaultSP), cv(defaultCV) {}
+
+
6
+
+
7void Controller::getTerms(double &pTerm, double &iTerm, double &dTerm) const {
+
8 pTerm = pid.pTerm;
+
9 iTerm = pid.iTerm;
+
10 dTerm = pid.dTerm;
+
11}
+
+
12
+
+ +
14 return &cs;
+
15}
+
+ +
const ConfigStore * getConfigStore()
Get a pointer to the ConfigStore instance.
+
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
Constructor.
Definition Controller.cpp:3
+ +
const ConfigStore & cs
Definition Controller.h:14
+
void getTerms(double &pTerm, double &iTerm, double &dTerm) const
Get the three PID terms by reference.
Definition Controller.cpp:7
+
double iTerm
Definition PID.h:33
+
double dTerm
Definition PID.h:33
+
double pTerm
Definition PID.h:33
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
+
+ + + + diff --git a/Controller_8h.html b/Controller_8h.html new file mode 100644 index 0000000..68ac685 --- /dev/null +++ b/Controller_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: src/control/Controller.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Controller.h File Reference
+
+
+
#include <stdint.h>
+#include "PID.h"
+#include "../EEPROMConfig.h"
+
+Include dependency graph for Controller.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Controller
 Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance. More...
 
+
+
+ + + + diff --git a/Controller_8h.js b/Controller_8h.js new file mode 100644 index 0000000..00bd5fd --- /dev/null +++ b/Controller_8h.js @@ -0,0 +1,4 @@ +var Controller_8h = +[ + [ "Controller", "classController.html", "classController" ] +]; \ No newline at end of file diff --git a/Controller_8h__dep__incl.map b/Controller_8h__dep__incl.map new file mode 100644 index 0000000..2834730 --- /dev/null +++ b/Controller_8h__dep__incl.map @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Controller_8h__dep__incl.md5 b/Controller_8h__dep__incl.md5 new file mode 100644 index 0000000..93db313 --- /dev/null +++ b/Controller_8h__dep__incl.md5 @@ -0,0 +1 @@ +f7a8e249c9a6e237fe7339bfe70cf82e \ No newline at end of file diff --git a/Controller_8h__dep__incl.svg b/Controller_8h__dep__incl.svg new file mode 100644 index 0000000..fbaad14 --- /dev/null +++ b/Controller_8h__dep__incl.svg @@ -0,0 +1,363 @@ + + + + + + +src/control/Controller.h + + +Node1 + + +src/control/Controller.h + + + + + +Node2 + + +src/control/Controller.cpp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/control/FlowController.cpp + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +src/control/FlowController.h + + + + + +Node1->Node4 + + + + + + + + +Node10 + + +src/control/Humidistat.h + + + + + +Node1->Node10 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +src/control/CascadeHumidistat.h + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +src/SerialLogger.h + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +src/control/CascadeHumidistat.cpp + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +src/main.cpp + + + + + +Node6->Node7 + + + + + + + + +Node10->Node5 + + + + + + + + +Node11 + + +src/SetpointProfileRunner.h + + + + + +Node10->Node11 + + + + + + + + +Node13 + + +src/control/Humidistat.cpp + + + + + +Node10->Node13 + + + + + + + + +Node14 + + +src/control/SingleHumidistat.h + + + + + +Node10->Node14 + + + + + + + + +Node11->Node7 + + + + + + + + +Node11->Node9 + + + + + + + + +Node12 + + +src/SetpointProfileRunner.cpp + + + + + +Node11->Node12 + + + + + + + + +Node14->Node6 + + + + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +src/control/SingleHumidistat.cpp + + + + + +Node14->Node15 + + + + + + + + +Node16 + + +src/ui/CharDisplayUI.h + + + + + +Node14->Node16 + + + + + + + + +Node17 + + +src/ui/CharDisplayUI.cpp + + + + + +Node16->Node17 + + + + + + + + diff --git a/Controller_8h__incl.map b/Controller_8h__incl.map new file mode 100644 index 0000000..9daa23c --- /dev/null +++ b/Controller_8h__incl.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Controller_8h__incl.md5 b/Controller_8h__incl.md5 new file mode 100644 index 0000000..b9358c6 --- /dev/null +++ b/Controller_8h__incl.md5 @@ -0,0 +1 @@ +d2c458ce992bff3685c8dbb320bebe31 \ No newline at end of file diff --git a/Controller_8h__incl.svg b/Controller_8h__incl.svg new file mode 100644 index 0000000..3237042 --- /dev/null +++ b/Controller_8h__incl.svg @@ -0,0 +1,84 @@ + + + + + + +src/control/Controller.h + + +Node1 + + +src/control/Controller.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +PID.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +../EEPROMConfig.h + + + + + +Node1->Node4 + + + + + + + + +Node3->Node2 + + + + + + + + diff --git a/Controller_8h_source.html b/Controller_8h_source.html new file mode 100644 index 0000000..b6faf02 --- /dev/null +++ b/Controller_8h_source.html @@ -0,0 +1,170 @@ + + + + + + + +Humidistat: src/control/Controller.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Controller.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CONTROLLER_H
+
2#define HUMIDISTAT_CONTROLLER_H
+
3
+
4#include <stdint.h>
+
5
+
6#include "PID.h"
+
7#include "../EEPROMConfig.h"
+
8
+
+ +
12protected:
+ + +
15
+
16 unsigned long sensorLastRead = 0;
+
17
+
18public:
+
19 bool active = false;
+
20
+
21 double pv = 0;
+
22 double sp;
+
23 double cv;
+
24
+
36 Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin,
+
37 double cvMax, double defaultSP, double defaultCV);
+
38
+
43 void getTerms(double &pTerm, double &iTerm, double &dTerm) const;
+
44
+
47 void update();
+
48
+ +
51
+ +
55};
+
+
56
+
57
+
58#endif //HUMIDISTAT_CONTROLLER_H
+ + +
Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance.
Definition Controller.h:11
+
double sp
Setpoint.
Definition Controller.h:22
+
const ConfigStore * getConfigStore()
Get a pointer to the ConfigStore instance.
+
bool active
Definition Controller.h:19
+
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
Constructor.
Definition Controller.cpp:3
+
double pv
Process variable.
Definition Controller.h:21
+
void update()
Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.
+ +
const ConfigStore & cs
Definition Controller.h:14
+
double cv
Control variable.
Definition Controller.h:23
+
void getTerms(double &pTerm, double &iTerm, double &dTerm) const
Get the three PID terms by reference.
Definition Controller.cpp:7
+
void updatePIDParameters()
Update the PID parameters from the configStore.
+
unsigned long sensorLastRead
Definition Controller.h:16
+
PID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Meas...
Definition PID.h:8
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
+
+ + + + diff --git a/DHTHumiditySensor_8cpp.html b/DHTHumiditySensor_8cpp.html new file mode 100644 index 0000000..9a454bd --- /dev/null +++ b/DHTHumiditySensor_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/sensor/DHTHumiditySensor.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DHTHumiditySensor.cpp File Reference
+
+
+
#include "DHTHumiditySensor.h"
+
+Include dependency graph for DHTHumiditySensor.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/DHTHumiditySensor_8cpp__incl.map b/DHTHumiditySensor_8cpp__incl.map new file mode 100644 index 0000000..7ece608 --- /dev/null +++ b/DHTHumiditySensor_8cpp__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/DHTHumiditySensor_8cpp__incl.md5 b/DHTHumiditySensor_8cpp__incl.md5 new file mode 100644 index 0000000..7384863 --- /dev/null +++ b/DHTHumiditySensor_8cpp__incl.md5 @@ -0,0 +1 @@ +994d85beb9d7e8e70c8abd1fc0eec81b \ No newline at end of file diff --git a/DHTHumiditySensor_8cpp__incl.svg b/DHTHumiditySensor_8cpp__incl.svg new file mode 100644 index 0000000..a3335d9 --- /dev/null +++ b/DHTHumiditySensor_8cpp__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/sensor/DHTHumiditySensor.cpp + + +Node1 + + +src/sensor/DHTHumiditySensor.cpp + + + + + +Node2 + + +DHTHumiditySensor.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +DHT.h + + + + + +Node2->Node3 + + + + + + + + diff --git a/DHTHumiditySensor_8cpp_source.html b/DHTHumiditySensor_8cpp_source.html new file mode 100644 index 0000000..52cf85c --- /dev/null +++ b/DHTHumiditySensor_8cpp_source.html @@ -0,0 +1,149 @@ + + + + + + + +Humidistat: src/sensor/DHTHumiditySensor.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DHTHumiditySensor.cpp
+
+
+Go to the documentation of this file.
1#include "DHTHumiditySensor.h"
+
2
+ +
4
+
+ +
6 return dht.readHumidity();
+
7}
+
+
8
+
+ +
10 return dht.readTemperature();
+
11}
+
+
12
+
+ +
14 dht.begin();
+
15}
+
+
16
+
+ +
18 dht.read(true);
+
19}
+
+ + +
double getHumidity() const
+
double getTemperature() const
+ + + +
+
+ + + + diff --git a/DHTHumiditySensor_8h.html b/DHTHumiditySensor_8h.html new file mode 100644 index 0000000..e53179a --- /dev/null +++ b/DHTHumiditySensor_8h.html @@ -0,0 +1,137 @@ + + + + + + + +Humidistat: src/sensor/DHTHumiditySensor.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
DHTHumiditySensor.h File Reference
+
+
+
#include "DHT.h"
+
+Include dependency graph for DHTHumiditySensor.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  DHTHumiditySensor
 Implementation of the HumiditySensor interface for the DHT22/AM2302 sensor. More...
 
+
+
+ + + + diff --git a/DHTHumiditySensor_8h.js b/DHTHumiditySensor_8h.js new file mode 100644 index 0000000..0aeee46 --- /dev/null +++ b/DHTHumiditySensor_8h.js @@ -0,0 +1,4 @@ +var DHTHumiditySensor_8h = +[ + [ "DHTHumiditySensor", "classDHTHumiditySensor.html", "classDHTHumiditySensor" ] +]; \ No newline at end of file diff --git a/DHTHumiditySensor_8h__dep__incl.map b/DHTHumiditySensor_8h__dep__incl.map new file mode 100644 index 0000000..f654622 --- /dev/null +++ b/DHTHumiditySensor_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/DHTHumiditySensor_8h__dep__incl.md5 b/DHTHumiditySensor_8h__dep__incl.md5 new file mode 100644 index 0000000..79f872c --- /dev/null +++ b/DHTHumiditySensor_8h__dep__incl.md5 @@ -0,0 +1 @@ +2c6b29ce505f9f3c5ee198964f38949a \ No newline at end of file diff --git a/DHTHumiditySensor_8h__dep__incl.svg b/DHTHumiditySensor_8h__dep__incl.svg new file mode 100644 index 0000000..4591087 --- /dev/null +++ b/DHTHumiditySensor_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/sensor/DHTHumiditySensor.h + + +Node1 + + +src/sensor/DHTHumiditySensor.h + + + + + +Node2 + + +src/sensor/DHTHumiditySensor.cpp + + + + + +Node1->Node2 + + + + + + + + diff --git a/DHTHumiditySensor_8h__incl.map b/DHTHumiditySensor_8h__incl.map new file mode 100644 index 0000000..89f1346 --- /dev/null +++ b/DHTHumiditySensor_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/DHTHumiditySensor_8h__incl.md5 b/DHTHumiditySensor_8h__incl.md5 new file mode 100644 index 0000000..7f39e84 --- /dev/null +++ b/DHTHumiditySensor_8h__incl.md5 @@ -0,0 +1 @@ +45375a97b288a0b4df7ebcc47184bd0a \ No newline at end of file diff --git a/DHTHumiditySensor_8h__incl.svg b/DHTHumiditySensor_8h__incl.svg new file mode 100644 index 0000000..7af602d --- /dev/null +++ b/DHTHumiditySensor_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/sensor/DHTHumiditySensor.h + + +Node1 + + +src/sensor/DHTHumiditySensor.h + + + + + +Node2 + + +DHT.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/DHTHumiditySensor_8h_source.html b/DHTHumiditySensor_8h_source.html new file mode 100644 index 0000000..8a85f78 --- /dev/null +++ b/DHTHumiditySensor_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/sensor/DHTHumiditySensor.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DHTHumiditySensor.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_DHTHUMIDITYSENSOR_H
+
2#define HUMIDISTAT_DHTHUMIDITYSENSOR_H
+
3
+
4#include "DHT.h"
+
5
+
+ +
8private:
+
9 DHT &dht;
+
10public:
+
11 explicit DHTHumiditySensor(DHT *dht);
+
12 double getHumidity() const;
+
13 double getTemperature() const;
+
14 void begin();
+
15 void readSample();
+
16};
+
+
17
+
18
+
19#endif //HUMIDISTAT_DHTHUMIDITYSENSOR_H
+
Implementation of the HumiditySensor interface for the DHT22/AM2302 sensor.
+ +
double getHumidity() const
+
double getTemperature() const
+ + + +
+
+ + + + diff --git a/EEPROMConfig_8cpp.html b/EEPROMConfig_8cpp.html new file mode 100644 index 0000000..5b721b9 --- /dev/null +++ b/EEPROMConfig_8cpp.html @@ -0,0 +1,124 @@ + + + + + + + +Humidistat: src/EEPROMConfig.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EEPROMConfig.cpp File Reference
+
+
+
#include <EEPROMex.h>
+#include "EEPROMConfig.h"
+
+Include dependency graph for EEPROMConfig.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/EEPROMConfig_8cpp__incl.map b/EEPROMConfig_8cpp__incl.map new file mode 100644 index 0000000..6925a2c --- /dev/null +++ b/EEPROMConfig_8cpp__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/EEPROMConfig_8cpp__incl.md5 b/EEPROMConfig_8cpp__incl.md5 new file mode 100644 index 0000000..3c81733 --- /dev/null +++ b/EEPROMConfig_8cpp__incl.md5 @@ -0,0 +1 @@ +c57f3f48963a9bb7ca8a0c94057861c5 \ No newline at end of file diff --git a/EEPROMConfig_8cpp__incl.svg b/EEPROMConfig_8cpp__incl.svg new file mode 100644 index 0000000..8299135 --- /dev/null +++ b/EEPROMConfig_8cpp__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/EEPROMConfig.cpp + + +Node1 + + +src/EEPROMConfig.cpp + + + + + +Node2 + + +EEPROMex.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +EEPROMConfig.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/EEPROMConfig_8cpp_source.html b/EEPROMConfig_8cpp_source.html new file mode 100644 index 0000000..bd63f7a --- /dev/null +++ b/EEPROMConfig_8cpp_source.html @@ -0,0 +1,165 @@ + + + + + + + +Humidistat: src/EEPROMConfig.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EEPROMConfig.cpp
+
+
+Go to the documentation of this file.
1#include <EEPROMex.h>
+
2
+
3#include "EEPROMConfig.h"
+
4
+
+ +
6 EEPROM.readBlock(address, configStore);
+
7
+
8 // Check whether loaded data is valid and if overrideEEPROM is not set
+ +
10 // Set loadedFromEEPROM flag
+ +
12 return true;
+
13 } else {
+
14 // Reset to defaults
+
15 reset();
+
16 save();
+
17 return false;
+
18 }
+
19}
+
+
20
+
+
21uint16_t EEPROMConfig::save() const {
+
22 return EEPROM.updateBlock(address, configStore);
+
23}
+
+
24
+
+ +
26 load();
+
27}
+
+
28
+ + +
struct ConfigStore defaultConfigStore
+
uint8_t address
+
void reset()
Reset the config store: overwrite the configStore with the default values.
+
uint16_t save() const
Saves current content of configStore into EEPROM.
+
bool load()
Load config values from EEPROM into configStore.
+
ConfigStore configStore
+
EEPROMConfig()
Constructor.
+
const bool overrideEEPROM
Set to true to override the values stored in EEPROM and use the default PID parameters defined below.
Definition config.h:36
+
char version[5]
String identifying this block.
Definition EEPROMConfig.h:8
+
bool loadedFromEEPROM
Whether this has been loaded from EEPROM.
Definition EEPROMConfig.h:9
+
+
+ + + + diff --git a/EEPROMConfig_8h.html b/EEPROMConfig_8h.html new file mode 100644 index 0000000..d7574ef --- /dev/null +++ b/EEPROMConfig_8h.html @@ -0,0 +1,188 @@ + + + + + + + +Humidistat: src/EEPROMConfig.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
EEPROMConfig.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  ConfigStore
 Config store containing variables, which can be stored in EEPROM. More...
 
class  EEPROMConfig
 Load/save an (internal) ConfigStore in EEPROM. More...
 
+ + + +

+Variables

struct ConfigStore defaultConfigStore
 
+

Variable Documentation

+ +

◆ defaultConfigStore

+ +
+
+ + + + +
struct ConfigStore defaultConfigStore
+
+Initial value:
= {
+
"hum2",
+
false,
+ +
+ + + + +
+ + + + + +
+ + + +
}
+
const double FC_Kf
Definition config.h:61
+
const uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
Definition config.h:45
+
const double HC_Kf
Definition config.h:53
+
const uint16_t FC_dt
Definition config.h:62
+
const double HC_Kd
Definition config.h:52
+
const double HC_Ki
Definition config.h:51
+
const double HC_Kp
Definition config.h:50
+
const double FC_Kd
Definition config.h:60
+
const double HC_totalFlowrate
Total flowrate (for cascade controller) (L/min)
Definition config.h:69
+
const double S_lowValue
Minimum solenoid duty cycle (deadband)
Definition config.h:66
+
const double FC_Kp
Definition config.h:58
+
const double a
Smoothing factor of EMA filter for derivative.
Definition config.h:72
+
const double FC_Ki
Definition config.h:59
+
+
+
+
+
+ + + + diff --git a/EEPROMConfig_8h.js b/EEPROMConfig_8h.js new file mode 100644 index 0000000..f0abafc --- /dev/null +++ b/EEPROMConfig_8h.js @@ -0,0 +1,6 @@ +var EEPROMConfig_8h = +[ + [ "ConfigStore", "structConfigStore.html", "structConfigStore" ], + [ "EEPROMConfig", "classEEPROMConfig.html", "classEEPROMConfig" ], + [ "defaultConfigStore", "EEPROMConfig_8h.html#ae38c45f16a5034202cd080e6ca4760a9", null ] +]; \ No newline at end of file diff --git a/EEPROMConfig_8h__dep__incl.map b/EEPROMConfig_8h__dep__incl.map new file mode 100644 index 0000000..04aeddb --- /dev/null +++ b/EEPROMConfig_8h__dep__incl.map @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/EEPROMConfig_8h__dep__incl.md5 b/EEPROMConfig_8h__dep__incl.md5 new file mode 100644 index 0000000..3e92fbd --- /dev/null +++ b/EEPROMConfig_8h__dep__incl.md5 @@ -0,0 +1 @@ +c0d981fff65ab4fc986c6d21e655e1b7 \ No newline at end of file diff --git a/EEPROMConfig_8h__dep__incl.svg b/EEPROMConfig_8h__dep__incl.svg new file mode 100644 index 0000000..2ae7c6f --- /dev/null +++ b/EEPROMConfig_8h__dep__incl.svg @@ -0,0 +1,444 @@ + + + + + + +src/EEPROMConfig.h + + +Node1 + + +src/EEPROMConfig.h + + + + + +Node2 + + +src/EEPROMConfig.cpp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/control/Controller.h + + + + + +Node1->Node3 + + + + + + + + +Node6 + + +src/control/FlowController.h + + + + + +Node1->Node6 + + + + + + + + +Node9 + + +src/main.cpp + + + + + +Node1->Node9 + + + + + + + + +Node11 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node11 + + + + + + + + +Node12 + + +src/control/Humidistat.h + + + + + +Node1->Node12 + + + + + + + + +Node16 + + +src/control/SingleHumidistat.h + + + + + +Node1->Node16 + + + + + + + + +Node4 + + +src/control/Controller.cpp + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +src/control/FlowController.cpp + + + + + +Node3->Node5 + + + + + + + + +Node3->Node6 + + + + + + + + +Node3->Node12 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +src/control/CascadeHumidistat.h + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +src/SerialLogger.h + + + + + +Node7->Node8 + + + + + + + + +Node10 + + +src/control/CascadeHumidistat.cpp + + + + + +Node7->Node10 + + + + + + + + +Node7->Node11 + + + + + + + + +Node8->Node9 + + + + + + + + +Node12->Node7 + + + + + + + + +Node13 + + +src/SetpointProfileRunner.h + + + + + +Node12->Node13 + + + + + + + + +Node15 + + +src/control/Humidistat.cpp + + + + + +Node12->Node15 + + + + + + + + +Node12->Node16 + + + + + + + + +Node13->Node9 + + + + + + + + +Node13->Node11 + + + + + + + + +Node14 + + +src/SetpointProfileRunner.cpp + + + + + +Node13->Node14 + + + + + + + + +Node16->Node8 + + + + + + + + +Node16->Node11 + + + + + + + + +Node17 + + +src/control/SingleHumidistat.cpp + + + + + +Node16->Node17 + + + + + + + + +Node18 + + +src/ui/CharDisplayUI.h + + + + + +Node16->Node18 + + + + + + + + +Node19 + + +src/ui/CharDisplayUI.cpp + + + + + +Node18->Node19 + + + + + + + + diff --git a/EEPROMConfig_8h_source.html b/EEPROMConfig_8h_source.html new file mode 100644 index 0000000..fbfb168 --- /dev/null +++ b/EEPROMConfig_8h_source.html @@ -0,0 +1,223 @@ + + + + + + + +Humidistat: src/EEPROMConfig.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EEPROMConfig.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_EEPROMCONFIG_H
+
2#define HUMIDISTAT_EEPROMCONFIG_H
+
3
+
4#include CONFIG_HEADER
+
5
+
+
7struct ConfigStore {
+
8 char version[5];
+ +
10
+
11 uint16_t dt;
+
12
+
15 double HC_Kp;
+
16 double HC_Ki;
+
17 double HC_Kd;
+
18 double HC_Kf;
+
20
+
23 double FC_Kp;
+
24 double FC_Ki;
+
25 double FC_Kd;
+
26 double FC_Kf;
+
27 uint16_t FC_dt;
+
29
+
31 double S_lowValue;
+
32
+ +
35
+
37 double a;
+
38} const defaultConfigStore = {
+
+
39 "hum2",
+
40 false,
+ +
42
+ + + + +
47
+ + + + + +
53
+ + + +
57};
+
58
+
+ +
61private:
+ +
63
+
64public:
+ +
66
+ +
69
+
72 bool load();
+
73
+
76 uint16_t save() const;
+
77
+
79 void reset();
+
80};
+
+
81
+
82
+
83#endif //HUMIDISTAT_EEPROMCONFIG_H
+
struct ConfigStore defaultConfigStore
+
Load/save an (internal) ConfigStore in EEPROM.
+
uint8_t address
+
void reset()
Reset the config store: overwrite the configStore with the default values.
+
uint16_t save() const
Saves current content of configStore into EEPROM.
+
bool load()
Load config values from EEPROM into configStore.
+
ConfigStore configStore
+
EEPROMConfig()
Constructor.
+
const uint8_t EEPROMAddress
EEPROM address for storing the block.
Definition config.h:39
+
const double FC_Kf
Definition config.h:61
+
const uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
Definition config.h:45
+
const double HC_Kf
Definition config.h:53
+
const uint16_t FC_dt
Definition config.h:62
+
const double HC_Kd
Definition config.h:52
+
const double HC_Ki
Definition config.h:51
+
const double HC_Kp
Definition config.h:50
+
const double FC_Kd
Definition config.h:60
+
const double HC_totalFlowrate
Total flowrate (for cascade controller) (L/min)
Definition config.h:69
+
const double S_lowValue
Minimum solenoid duty cycle (deadband)
Definition config.h:66
+
const double FC_Kp
Definition config.h:58
+
const double a
Smoothing factor of EMA filter for derivative.
Definition config.h:72
+
const double FC_Ki
Definition config.h:59
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+ + +
uint16_t FC_dt
+
char version[5]
String identifying this block.
Definition EEPROMConfig.h:8
+
double HC_totalFlowrate
Total flowrate (for cascade controller) (L/min)
+
double a
Smoothing factor of EMA filter for derivative.
+ + +
double HC_Kp
Humidity controller PID parameters.
+ +
bool loadedFromEEPROM
Whether this has been loaded from EEPROM.
Definition EEPROMConfig.h:9
+
double FC_Kp
Flow controller PID parameters.
+
double S_lowValue
Minimum solenoid duty cycle (deadband)
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+ +
+
+ + + + diff --git a/FlowController_8cpp.html b/FlowController_8cpp.html new file mode 100644 index 0000000..ec75ab3 --- /dev/null +++ b/FlowController_8cpp.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: src/control/FlowController.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowController.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "FlowController.h"
+#include "Controller.h"
+
+Include dependency graph for FlowController.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/FlowController_8cpp__incl.map b/FlowController_8cpp__incl.map new file mode 100644 index 0000000..0114c84 --- /dev/null +++ b/FlowController_8cpp__incl.map @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/FlowController_8cpp__incl.md5 b/FlowController_8cpp__incl.md5 new file mode 100644 index 0000000..abd5e33 --- /dev/null +++ b/FlowController_8cpp__incl.md5 @@ -0,0 +1 @@ +60b224141d17bab947d0af33fad67ed5 \ No newline at end of file diff --git a/FlowController_8cpp__incl.svg b/FlowController_8cpp__incl.svg new file mode 100644 index 0000000..ee223a9 --- /dev/null +++ b/FlowController_8cpp__incl.svg @@ -0,0 +1,210 @@ + + + + + + +src/control/FlowController.cpp + + +Node1 + + +src/control/FlowController.cpp + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +FlowController.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +Controller.h + + + + + +Node1->Node4 + + + + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +PID.h + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +../EEPROMConfig.h + + + + + +Node3->Node7 + + + + + + + + +Node8 + + +../sensor/FlowSensor.h + + + + + +Node3->Node8 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node4->Node5 + + + + + + + + +Node4->Node6 + + + + + + + + +Node4->Node7 + + + + + + + + +Node6->Node5 + + + + + + + + +Node8->Node5 + + + + + + + + +Node9 + + +imath.h + + + + + +Node8->Node9 + + + + + + + + diff --git a/FlowController_8cpp_source.html b/FlowController_8cpp_source.html new file mode 100644 index 0000000..5176616 --- /dev/null +++ b/FlowController_8cpp_source.html @@ -0,0 +1,183 @@ + + + + + + + +Humidistat: src/control/FlowController.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowController.cpp
+
+
+Go to the documentation of this file.
1#include <Arduino.h>
+
2#include "FlowController.h"
+
3#include "Controller.h"
+
4
+
+
5FlowController::FlowController(const FlowSensor *fs, const ConfigStore *cs, uint8_t solenoidPin, uint8_t pwmRes)
+
6 : Controller(cs, cs->FC_Kp, cs->FC_Ki, cs->FC_Kd, cs->FC_Kf, cs->FC_dt, cs->S_lowValue, 1, 0, cs->S_lowValue),
+
7 fs(*fs), solenoidPin(solenoidPin), pwmRes(pwmRes) {}
+
+
8
+
+ +
10 if (millis() - sensorLastRead < cs.FC_dt)
+
11 return;
+
12 sensorLastRead = millis();
+
13
+ +
15
+
16 // Read flowrate (and update PV if not NaN)
+
17 double flowrate = fs.readFlowrate();
+
18 if (!isnan(flowrate))
+
19 pv = flowrate;
+
20
+
21 // Run PID cycle if active
+
22 pid.compute();
+
23
+
24 // Actuate solenoid (convert normalised double CV to integer PWM value)
+
25 analogWrite(solenoidPin, static_cast<int>(cv * ipow(2, pwmRes)));
+
26}
+
+
27
+ + + +
Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance.
Definition Controller.h:11
+
bool active
Definition Controller.h:19
+
double pv
Process variable.
Definition Controller.h:21
+ +
const ConfigStore & cs
Definition Controller.h:14
+
double cv
Control variable.
Definition Controller.h:23
+
unsigned long sensorLastRead
Definition Controller.h:16
+ +
const uint8_t pwmRes
+ +
const FlowSensor & fs
+
FlowController(const FlowSensor *fs, const ConfigStore *cs, uint8_t solenoidPin, uint8_t pwmRes)
Constructor.
+
const uint8_t solenoidPin
+
Read flow rate using a Omron D6F-P0010 MEMS flow sensor.
Definition FlowSensor.h:9
+
double readFlowrate() const
Read the flow rate.
Definition FlowSensor.cpp:8
+
void setAuto(bool inAuto)
Set the mode of the controller.
Definition PID.cpp:52
+
bool compute()
Run a cycle of the PID loop.
Definition PID.cpp:17
+
double cvMin
Definition PID.h:34
+
void setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt)
Set the gains and timestep.
Definition PID.cpp:59
+
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
const uint8_t pwmRes
Definition main.cpp:44
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+ +
uint16_t FC_dt
+ +
double FC_Kp
Flow controller PID parameters.
+
double S_lowValue
Minimum solenoid duty cycle (deadband)
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+ +
+
+ + + + diff --git a/FlowController_8h.html b/FlowController_8h.html new file mode 100644 index 0000000..39f78e6 --- /dev/null +++ b/FlowController_8h.html @@ -0,0 +1,140 @@ + + + + + + + +Humidistat: src/control/FlowController.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
FlowController.h File Reference
+
+
+
#include "Controller.h"
+#include "PID.h"
+#include "../sensor/FlowSensor.h"
+#include "../EEPROMConfig.h"
+
+Include dependency graph for FlowController.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  FlowController
 Controls flow. Holds a reference to a FlowSensor instance. More...
 
+
+
+ + + + diff --git a/FlowController_8h.js b/FlowController_8h.js new file mode 100644 index 0000000..8953bc7 --- /dev/null +++ b/FlowController_8h.js @@ -0,0 +1,4 @@ +var FlowController_8h = +[ + [ "FlowController", "classFlowController.html", "classFlowController" ] +]; \ No newline at end of file diff --git a/FlowController_8h__dep__incl.map b/FlowController_8h__dep__incl.map new file mode 100644 index 0000000..84fb09b --- /dev/null +++ b/FlowController_8h__dep__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/FlowController_8h__dep__incl.md5 b/FlowController_8h__dep__incl.md5 new file mode 100644 index 0000000..c5284b9 --- /dev/null +++ b/FlowController_8h__dep__incl.md5 @@ -0,0 +1 @@ +487745f79d5ac5cbeb6c8f6e7c320e2a \ No newline at end of file diff --git a/FlowController_8h__dep__incl.svg b/FlowController_8h__dep__incl.svg new file mode 100644 index 0000000..052b05f --- /dev/null +++ b/FlowController_8h__dep__incl.svg @@ -0,0 +1,129 @@ + + + + + + +src/control/FlowController.h + + +Node1 + + +src/control/FlowController.h + + + + + +Node2 + + +src/control/CascadeHumidistat.h + + + + + +Node1->Node2 + + + + + + + + +Node7 + + +src/control/FlowController.cpp + + + + + +Node1->Node7 + + + + + + + + +Node3 + + +src/SerialLogger.h + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +src/control/CascadeHumidistat.cpp + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node2->Node6 + + + + + + + + +Node4 + + +src/main.cpp + + + + + +Node3->Node4 + + + + + + + + diff --git a/FlowController_8h__incl.map b/FlowController_8h__incl.map new file mode 100644 index 0000000..fa7c63d --- /dev/null +++ b/FlowController_8h__incl.map @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/FlowController_8h__incl.md5 b/FlowController_8h__incl.md5 new file mode 100644 index 0000000..7834584 --- /dev/null +++ b/FlowController_8h__incl.md5 @@ -0,0 +1 @@ +2cad21c5ebda509ffed9335d8dc6cbed \ No newline at end of file diff --git a/FlowController_8h__incl.svg b/FlowController_8h__incl.svg new file mode 100644 index 0000000..2880b06 --- /dev/null +++ b/FlowController_8h__incl.svg @@ -0,0 +1,165 @@ + + + + + + +src/control/FlowController.h + + +Node1 + + +src/control/FlowController.h + + + + + +Node2 + + +Controller.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +PID.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +../EEPROMConfig.h + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +../sensor/FlowSensor.h + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node2->Node3 + + + + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node4->Node3 + + + + + + + + +Node6->Node3 + + + + + + + + +Node7 + + +imath.h + + + + + +Node6->Node7 + + + + + + + + diff --git a/FlowController_8h_source.html b/FlowController_8h_source.html new file mode 100644 index 0000000..43fec95 --- /dev/null +++ b/FlowController_8h_source.html @@ -0,0 +1,156 @@ + + + + + + + +Humidistat: src/control/FlowController.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowController.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_FLOWCONTROLLER_H
+
2#define HUMIDISTAT_FLOWCONTROLLER_H
+
3
+
4#include "Controller.h"
+
5#include "PID.h"
+ +
7#include "../EEPROMConfig.h"
+
8
+
+
11class FlowController : public Controller {
+
12private:
+
13 const FlowSensor &fs;
+
14 const uint8_t solenoidPin;
+
15 const uint8_t pwmRes;
+
16
+
17public:
+
23 FlowController(const FlowSensor *fs, const ConfigStore *cs, uint8_t solenoidPin, uint8_t pwmRes);
+
24
+
25 // Overridden from Controller
+
26 void update();
+ +
28};
+
+
29
+
30
+
31#endif //HUMIDISTAT_FLOWCONTROLLER_H
+ + + + +
Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance.
Definition Controller.h:11
+
const ConfigStore & cs
Definition Controller.h:14
+
Controls flow. Holds a reference to a FlowSensor instance.
+ +
const uint8_t pwmRes
+ +
const FlowSensor & fs
+
FlowController(const FlowSensor *fs, const ConfigStore *cs, uint8_t solenoidPin, uint8_t pwmRes)
Constructor.
+
const uint8_t solenoidPin
+
Read flow rate using a Omron D6F-P0010 MEMS flow sensor.
Definition FlowSensor.h:9
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
+
+ + + + diff --git a/FlowSensor_8cpp.html b/FlowSensor_8cpp.html new file mode 100644 index 0000000..09d86dc --- /dev/null +++ b/FlowSensor_8cpp.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: src/sensor/FlowSensor.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowSensor.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "FlowSensor.h"
+#include "imath.h"
+
+Include dependency graph for FlowSensor.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/FlowSensor_8cpp__incl.map b/FlowSensor_8cpp__incl.map new file mode 100644 index 0000000..57f3df6 --- /dev/null +++ b/FlowSensor_8cpp__incl.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/FlowSensor_8cpp__incl.md5 b/FlowSensor_8cpp__incl.md5 new file mode 100644 index 0000000..b270b18 --- /dev/null +++ b/FlowSensor_8cpp__incl.md5 @@ -0,0 +1 @@ +b1c5e7f7d3278f93c827f193bf32cd36 \ No newline at end of file diff --git a/FlowSensor_8cpp__incl.svg b/FlowSensor_8cpp__incl.svg new file mode 100644 index 0000000..6f417d7 --- /dev/null +++ b/FlowSensor_8cpp__incl.svg @@ -0,0 +1,102 @@ + + + + + + +src/sensor/FlowSensor.cpp + + +Node1 + + +src/sensor/FlowSensor.cpp + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +FlowSensor.h + + + + + +Node1->Node3 + + + + + + + + +Node5 + + +imath.h + + + + + +Node1->Node5 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node3->Node4 + + + + + + + + +Node3->Node5 + + + + + + + + diff --git a/FlowSensor_8cpp_source.html b/FlowSensor_8cpp_source.html new file mode 100644 index 0000000..ac5011d --- /dev/null +++ b/FlowSensor_8cpp_source.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/sensor/FlowSensor.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowSensor.cpp
+
+
+Go to the documentation of this file.
1#include <Arduino.h>
+
2
+
3#include "FlowSensor.h"
+
4#include "imath.h"
+
5
+
6FlowSensor::FlowSensor(uint8_t pin) : pin(pin) {}
+
7
+
+ +
9 double value = analogRead(pin);
+
10
+
11 // Calculate flowrate from voltage using polynomial approximation
+
12 return ( coeffs[0] * ipow(value, 5)
+
13 + coeffs[1] * ipow(value, 4)
+
14 + coeffs[2] * ipow(value, 3)
+
15 + coeffs[3] * ipow(value, 2)
+
16 + coeffs[4] * value
+
17 + coeffs[5]);
+
18}
+
+ +
static constexpr double coeffs[]
Coefficients of the polynomial approximation to the sensor response (and voltage mapping)
Definition FlowSensor.h:13
+
const uint8_t pin
Definition FlowSensor.h:11
+
FlowSensor(uint8_t pin)
Constructor.
Definition FlowSensor.cpp:6
+
double readFlowrate() const
Read the flow rate.
Definition FlowSensor.cpp:8
+ +
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
+
+ + + + diff --git a/FlowSensor_8h.html b/FlowSensor_8h.html new file mode 100644 index 0000000..cbe80f6 --- /dev/null +++ b/FlowSensor_8h.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/sensor/FlowSensor.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
FlowSensor.h File Reference
+
+
+
#include <stdint.h>
+#include "imath.h"
+
+Include dependency graph for FlowSensor.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  FlowSensor
 Read flow rate using a Omron D6F-P0010 MEMS flow sensor. More...
 
+
+
+ + + + diff --git a/FlowSensor_8h.js b/FlowSensor_8h.js new file mode 100644 index 0000000..a491438 --- /dev/null +++ b/FlowSensor_8h.js @@ -0,0 +1,4 @@ +var FlowSensor_8h = +[ + [ "FlowSensor", "classFlowSensor.html", "classFlowSensor" ] +]; \ No newline at end of file diff --git a/FlowSensor_8h__dep__incl.map b/FlowSensor_8h__dep__incl.map new file mode 100644 index 0000000..a98ce42 --- /dev/null +++ b/FlowSensor_8h__dep__incl.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/FlowSensor_8h__dep__incl.md5 b/FlowSensor_8h__dep__incl.md5 new file mode 100644 index 0000000..f079b9b --- /dev/null +++ b/FlowSensor_8h__dep__incl.md5 @@ -0,0 +1 @@ +87bb7e5a3c7ed2375827113a87341a31 \ No newline at end of file diff --git a/FlowSensor_8h__dep__incl.svg b/FlowSensor_8h__dep__incl.svg new file mode 100644 index 0000000..c9c2ce2 --- /dev/null +++ b/FlowSensor_8h__dep__incl.svg @@ -0,0 +1,174 @@ + + + + + + +src/sensor/FlowSensor.h + + +Node1 + + +src/sensor/FlowSensor.h + + + + + +Node2 + + +src/control/CascadeHumidistat.h + + + + + +Node1->Node2 + + + + + + + + +Node7 + + +src/control/FlowController.h + + + + + +Node1->Node7 + + + + + + + + +Node9 + + +src/sensor/FlowSensor.cpp + + + + + +Node1->Node9 + + + + + + + + +Node3 + + +src/SerialLogger.h + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +src/control/CascadeHumidistat.cpp + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node2->Node6 + + + + + + + + +Node4 + + +src/main.cpp + + + + + +Node3->Node4 + + + + + + + + +Node7->Node2 + + + + + + + + +Node8 + + +src/control/FlowController.cpp + + + + + +Node7->Node8 + + + + + + + + diff --git a/FlowSensor_8h__incl.map b/FlowSensor_8h__incl.map new file mode 100644 index 0000000..2c355e2 --- /dev/null +++ b/FlowSensor_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/FlowSensor_8h__incl.md5 b/FlowSensor_8h__incl.md5 new file mode 100644 index 0000000..921d965 --- /dev/null +++ b/FlowSensor_8h__incl.md5 @@ -0,0 +1 @@ +a2ecf3dc6dcce5b2de09ae9054f29788 \ No newline at end of file diff --git a/FlowSensor_8h__incl.svg b/FlowSensor_8h__incl.svg new file mode 100644 index 0000000..6f548cc --- /dev/null +++ b/FlowSensor_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/sensor/FlowSensor.h + + +Node1 + + +src/sensor/FlowSensor.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +imath.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/FlowSensor_8h_source.html b/FlowSensor_8h_source.html new file mode 100644 index 0000000..751b7e1 --- /dev/null +++ b/FlowSensor_8h_source.html @@ -0,0 +1,153 @@ + + + + + + + +Humidistat: src/sensor/FlowSensor.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowSensor.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_FLOWSENSOR_H
+
2#define HUMIDISTAT_FLOWSENSOR_H
+
3
+
4#include <stdint.h>
+
5
+
6#include "imath.h"
+
7
+
+
9class FlowSensor {
+
10private:
+
11 const uint8_t pin;
+
+
13 static constexpr double coeffs[] = {
+
14 0.094003 * ipow(3.3 / 1023, 5),
+
15 -0.564312 * ipow(3.3 / 1023, 4),
+
16 1.374705 * ipow(3.3 / 1023, 3),
+
17 -1.601495 * ipow(3.3 / 1023, 2),
+
18 1.060657 / 1023 * 3.3,
+
19 -0.269996,
+
20 };
+
+
21
+
22public:
+
25 explicit FlowSensor(uint8_t pin);
+
26
+
29 double readFlowrate() const;
+
30};
+
+
31
+
32
+
33#endif //HUMIDISTAT_FLOWSENSOR_H
+
Read flow rate using a Omron D6F-P0010 MEMS flow sensor.
Definition FlowSensor.h:9
+
static constexpr double coeffs[]
Coefficients of the polynomial approximation to the sensor response (and voltage mapping)
Definition FlowSensor.h:13
+
const uint8_t pin
Definition FlowSensor.h:11
+
FlowSensor(uint8_t pin)
Constructor.
Definition FlowSensor.cpp:6
+
double readFlowrate() const
Read the flow rate.
Definition FlowSensor.cpp:8
+ +
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
+
+ + + + diff --git a/GraphicalDisplayUI_8h.html b/GraphicalDisplayUI_8h.html new file mode 100644 index 0000000..4d9c122 --- /dev/null +++ b/GraphicalDisplayUI_8h.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/ui/GraphicalDisplayUI.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
GraphicalDisplayUI.h File Reference
+
+
+
#include <U8g2lib.h>
+#include <SPI.h>
+#include <etl/span.h>
+#include <cmath>
+#include "ConfigPar.h"
+#include "advanceEnum.h"
+#include "ControllerUI.h"
+#include "EEPROMConfig.h"
+#include "../control/SingleHumidistat.h"
+#include "../control/CascadeHumidistat.h"
+#include "SetpointProfileRunner.h"
+
+Include dependency graph for GraphicalDisplayUI.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  GraphicalDisplayUI< Humidistat_t >
 TUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to display, an EEPROMConfig instance to edit the config, and to a Humidistat instance to show/edit its state. More...
 
+
+
+ + + + diff --git a/GraphicalDisplayUI_8h.js b/GraphicalDisplayUI_8h.js new file mode 100644 index 0000000..510f441 --- /dev/null +++ b/GraphicalDisplayUI_8h.js @@ -0,0 +1,4 @@ +var GraphicalDisplayUI_8h = +[ + [ "GraphicalDisplayUI< Humidistat_t >", "classGraphicalDisplayUI.html", "classGraphicalDisplayUI" ] +]; \ No newline at end of file diff --git a/GraphicalDisplayUI_8h__incl.map b/GraphicalDisplayUI_8h__incl.map new file mode 100644 index 0000000..a0d1b1a --- /dev/null +++ b/GraphicalDisplayUI_8h__incl.map @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/GraphicalDisplayUI_8h__incl.md5 b/GraphicalDisplayUI_8h__incl.md5 new file mode 100644 index 0000000..5de1cef --- /dev/null +++ b/GraphicalDisplayUI_8h__incl.md5 @@ -0,0 +1 @@ +6c371d75eea7c591de0498bc7b2dfe55 \ No newline at end of file diff --git a/GraphicalDisplayUI_8h__incl.svg b/GraphicalDisplayUI_8h__incl.svg new file mode 100644 index 0000000..06a0ed4 --- /dev/null +++ b/GraphicalDisplayUI_8h__incl.svg @@ -0,0 +1,750 @@ + + + + + + +src/ui/GraphicalDisplayUI.h + + +Node1 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node2 + + +U8g2lib.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +SPI.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +etl/span.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +cmath + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +ConfigPar.h + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +advanceEnum.h + + + + + +Node1->Node7 + + + + + + + + +Node9 + + +ControllerUI.h + + + + + +Node1->Node9 + + + + + + + + +Node18 + + +EEPROMConfig.h + + + + + +Node1->Node18 + + + + + + + + +Node19 + + +../control/SingleHumidistat.h + + + + + +Node1->Node19 + + + + + + + + +Node24 + + +../control/CascadeHumidistat.h + + + + + +Node1->Node24 + + + + + + + + +Node28 + + +SetpointProfileRunner.h + + + + + +Node1->Node28 + + + + + + + + +Node8 + + +stdint.h + + + + + +Node7->Node8 + + + + + + + + +Node9->Node4 + + + + + + + + +Node9->Node8 + + + + + + + + +Node10 + + +Print.h + + + + + +Node9->Node10 + + + + + + + + +Node11 + + +input/ButtonReader.h + + + + + +Node9->Node11 + + + + + + + + +Node14 + + +sensor/ThermistorReader.h + + + + + +Node9->Node14 + + + + + + + + +Node15 + + +asprintf.h + + + + + +Node9->Node15 + + + + + + + + +Node11->Node8 + + + + + + + + +Node12 + + +aliases.h + + + + + +Node11->Node12 + + + + + + + + +Node13 + + +Buttons.h + + + + + +Node11->Node13 + + + + + + + + +Node14->Node8 + + + + + + + + +Node16 + + +stdlib.h + + + + + +Node15->Node16 + + + + + + + + +Node17 + + +stdio.h + + + + + +Node15->Node17 + + + + + + + + +Node19->Node8 + + + + + + + + +Node19->Node12 + + + + + + + + +Node19->Node18 + + + + + + + + +Node20 + + +etl/array.h + + + + + +Node19->Node20 + + + + + + + + +Node21 + + +Humidistat.h + + + + + +Node19->Node21 + + + + + + + + +Node21->Node12 + + + + + + + + +Node21->Node18 + + + + + + + + +Node22 + + +Controller.h + + + + + +Node21->Node22 + + + + + + + + +Node22->Node8 + + + + + + + + +Node22->Node18 + + + + + + + + +Node23 + + +PID.h + + + + + +Node22->Node23 + + + + + + + + +Node23->Node8 + + + + + + + + +Node24->Node4 + + + + + + + + +Node24->Node12 + + + + + + + + +Node24->Node20 + + + + + + + + +Node24->Node21 + + + + + + + + +Node25 + + +../sensor/FlowSensor.h + + + + + +Node24->Node25 + + + + + + + + +Node27 + + +FlowController.h + + + + + +Node24->Node27 + + + + + + + + +Node25->Node8 + + + + + + + + +Node26 + + +imath.h + + + + + +Node25->Node26 + + + + + + + + +Node27->Node18 + + + + + + + + +Node27->Node22 + + + + + + + + +Node27->Node23 + + + + + + + + +Node27->Node25 + + + + + + + + +Node28->Node4 + + + + + + + + +Node28->Node21 + + + + + + + + +Node29 + + +Point.h + + + + + +Node28->Node29 + + + + + + + + +Node29->Node4 + + + + + + + + +Node29->Node8 + + + + + + + + diff --git a/GraphicalDisplayUI_8h_source.html b/GraphicalDisplayUI_8h_source.html new file mode 100644 index 0000000..8f45134 --- /dev/null +++ b/GraphicalDisplayUI_8h_source.html @@ -0,0 +1,871 @@ + + + + + + + +Humidistat: src/ui/GraphicalDisplayUI.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
GraphicalDisplayUI.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_GRAPHICALDISPLAYUI_H
+
2#define HUMIDISTAT_GRAPHICALDISPLAYUI_H
+
3
+
4#include <U8g2lib.h>
+
5#include <SPI.h>
+
6#include <etl/span.h>
+
7#undef abs
+
8#include <cmath>
+
9
+
10#include CONFIG_HEADER
+
11#include "ConfigPar.h"
+
12#include "advanceEnum.h"
+
13#include "ControllerUI.h"
+
14#include "EEPROMConfig.h"
+ + + +
18
+
23template<class Humidistat_t>
+
+ +
25private:
+
+
27 enum class Tab {
+
28 main,
+
29 info,
+
30 config,
+
31 _last = config,
+
32 };
+
+
33
+
+
35 enum class Selection {
+
36 par,
+
37 number,
+
38 actions,
+
39 };
+
+
40
+
+
42 enum class Action {
+
43 save,
+
44 reset,
+
45 _last = reset
+
46 };
+
+
47
+
48 U8G2 &u8g2;
+ +
50 Humidistat_t &humidistat;
+ +
52
+
53 // States
+ +
55 uint8_t currentPar = 0;
+ + +
58 uint8_t currentDigit = NUM_DIGITS - 1;
+
59 uint8_t currentSPProfile = 0;
+
60
+
61 uint8_t frame = 0;
+
62 uint8_t configSaveTimer = 0;
+
63
+ + +
66
+
67 const uint8_t nConfigPars;
+ +
69
+
71 // (declaration, implementation specialised)
+
72 void drawMain();
+
73
+
+
74 void drawTabInfo() {
+
75 u8g2.setFont(u8g2_font_6x12_tr);
+
76
+
77 // Tab bar
+
78 u8g2.drawBox(12, 1, 26, 12);
+
79 u8g2.setDrawColor(0);
+
80 u8g2.drawStr(13, 10, "Info");
+
81 u8g2.setDrawColor(1);
+
82
+
83 u8g2.drawStr(2, 10, "C.");
+
84 u8g2.drawStr(40, 10, "C.");
+
85
+
86 // Temperature box
+
87 u8g2.drawVLine(67, 27, 18);
+
88 u8g2.drawStr(0, 23, "Temperatures");
+
89 u8g2.drawHLine(0, 26, 128);
+
90 u8g2.drawStr(0, 35, "Chamber");
+
91 printf(70, 35, "%3.1f", humidistat.getTemperature());
+
92 u8g2.drawStr(0, 43, "Thermistors");
+
93 u8g2.drawHLine(0, 44, 128);
+
94
+
95 // Thermistors
+
96 for (size_t i = 0; i < trs.size(); ++i) {
+
97 printNTC(70 + 15*i, 43, i);
+
98 }
+
99
+
100 // Setpoint profiles
+
101 u8g2.drawBox(0, 44, 65, 10);
+
102 u8g2.setDrawColor(0);
+
103 u8g2.drawStr(0, 52, "SP profile:");
+
104 u8g2.setDrawColor(1);
+
105 u8g2.drawStr(70, 53, config::profiles[currentSPProfile].label);
+
106
+
107
+
108 // Bottom bar
+
109 u8g2.drawHLine(0, 54, 128);
+
110 u8g2.setFont(u8g2_font_unifont_t_75);
+
111 u8g2.drawGlyph(0, 66, 9664);
+
112 u8g2.drawGlyph(40, 66, 9650);
+
113 u8g2.drawGlyph(50, 66, 9660);
+
114 u8g2.setFont(u8g2_font_5x7_tr);
+
115 u8g2.drawStr(10, 63, "tab");
+
116 u8g2.drawStr(60, 63, "adj");
+
117 u8g2.setFont(u8g2_font_6x12_tr);
+
118 }
+
+
119
+
+
121 void drawConfig() {
+
122 u8g2.setFont(u8g2_font_6x12_tr);
+
123
+
124 // Tab bar
+
125 u8g2.drawBox(25, 1, 38, 12);
+
126 u8g2.setDrawColor(0);
+
127 u8g2.drawStr(26, 10, "Config");
+
128 u8g2.setDrawColor(1);
+
129
+
130 u8g2.drawStr(2, 10, "C.");
+
131 u8g2.drawVLine(12, 1, 12);
+
132 u8g2.drawStr(14, 10, "I.");
+
133
+
134 // Print config parameters in scrolling menu
+
135 for (uint8_t i = 0; i < 4; i++) {
+
136 // Index of parameter to draw
+
137 int8_t nPar = currentPar + i - 1;
+
138
+
139 // Handling for first and last two parameters
+
140 if (currentPar == 0) nPar++;
+
141 if (currentPar == nConfigPars - 2) nPar -= 1;
+
142 if (currentPar == nConfigPars - 1) nPar -= 2;
+
143
+
144 uint8_t row = 22 + i * 10;
+
145
+
146 char *buf = configPars[nPar].asprint();
+
147 u8g2.drawStr(0, row, buf);
+
148 delete buf;
+
149
+ +
151 uint8_t x, w;
+
152 // Draw cursor on active parameter/digit
+ +
154 x = 0;
+
155 w = 40;
+
156 } else if (currentSelection == Selection::number) {
+
157 x = 66 + currentDigit * 6;
+
158 // Take into account the decimal separator:
+
159 // if the current parameter is a float and we're left of the decimal separator, move one block left
+ + +
162 x -= 6;
+
163 w = 6;
+
164 }
+
165
+
166 if (nPar == currentPar) {
+
167 u8g2.setDrawColor(2);
+
168 u8g2.drawBox(x, row - 8, w, 10);
+
169 u8g2.setDrawColor(1);
+
170 }
+
171 }
+
172 }
+
173
+
174 // Actions
+
175 u8g2.drawStr(100, 32, "Save");
+
176 u8g2.drawStr(100, 42, "Reset");
+ +
178 uint8_t y;
+ +
180 y = 32 - 8;
+
181 }
+ +
183 y = 42 - 8;
+
184 }
+
185
+
186 u8g2.setDrawColor(2);
+
187 u8g2.drawBox(100, y, 40, 10);
+
188 u8g2.setDrawColor(1);
+
189 }
+
190
+
191 // Mode
+ +
193 u8g2.drawStr(80, 10, "EEPROM");
+
194
+
195 if (configSaveTimer != 0) {
+
196 u8g2.drawStr(85, 22, "saved");
+
197 u8g2.setCursor(115, 22);
+
198 u8g2.print(configSaveTimer * refreshInterval / 1000);
+
199 }
+
200
+
201
+
202 // Bottom bar
+
203 u8g2.setFont(u8g2_font_unifont_t_75);
+
204 u8g2.drawHLine(0, 54, 128);
+
205 u8g2.drawGlyph(0, 66, 9664);
+
206 u8g2.drawGlyph(30, 66, 9650);
+
207 u8g2.drawGlyph(36, 66, 9660);
+
208 u8g2.drawGlyph(65, 66, 9654);
+
209 u8g2.drawGlyph(98, 66, 9679);
+
210 u8g2.setFont(u8g2_font_5x7_tr);
+ +
212 u8g2.drawStr(10, 63, "tab");
+
213 u8g2.drawStr(45, 63, "par");
+
214 u8g2.drawStr(75, 63, "menu");
+
215 u8g2.drawStr(108, 63, "edit");
+
216 }
+ +
218 u8g2.drawStr(45, 63, "adj");
+
219 u8g2.drawStr(108, 63, "OK");
+
220 }
+ +
222 u8g2.drawStr(10, 63, "back");
+
223 u8g2.drawStr(45, 63, "");
+
224 u8g2.drawStr(75, 63, "back");
+
225 u8g2.drawStr(108, 63, "OK");
+
226 }
+
227 u8g2.setFont(u8g2_font_6x12_tr);
+
228 }
+
+
229
+
+ +
232 u8g2.setFont(u8g2_font_6x12_tr);
+
233
+
234 // Tab bar
+
235 u8g2.drawBox(1, 1, 42, 12);
+
236 u8g2.setDrawColor(0);
+
237 u8g2.drawStr(1, 10, "Control");
+
238 u8g2.setDrawColor(1);
+
239
+
240 u8g2.drawStr(44, 10, "I.");
+
241 u8g2.drawVLine(55, 1, 12);
+
242 u8g2.drawStr(57, 10, "C.");
+
243 u8g2.drawVLine(70, 1, 12);
+
244
+
245 // Humidity box
+
246 u8g2.drawVLine(13, 27, 28);
+
247 u8g2.drawStr(0, 23, "Humidity");
+
248 u8g2.drawHLine(0, 26, 51);
+
249
+
250 u8g2.drawStr(0, 35, "PV");
+
251
+
252 if (humidistat.active) {
+
253 u8g2.drawBox(0, 36, 13, 9);
+
254 u8g2.setDrawColor(0);
+
255 }
+
256 {
+
257 char buf[] = "SP";
+
258 if (abs(humidistat.pv - humidistat.sp) > tolerance * 100) {
+
259 blink(0, 44, buf);
+
260 } else {
+
261 u8g2.drawStr(0, 44, buf);
+
262 }
+
263 }
+
264 u8g2.setDrawColor(1);
+
265
+
266 printf(14, 35, "%5.1f%%", humidistat.getHumidity());
+
267 printf(14, 44, "%5.1f%%", humidistat.sp);
+
268
+
269 // CV
+
270 if (!humidistat.active) {
+
271 u8g2.drawBox(0, 45, 13, 9);
+
272 u8g2.setDrawColor(0);
+
273 }
+
274 u8g2.drawStr(0, 53, "CV");
+
275 u8g2.setDrawColor(1);
+
276 printf(20, 53, "%3.0f%%", humidistat.cv * 100);
+
277
+
278 // Mode
+
279 if (humidistat.active)
+
280 u8g2.drawStr(80, 10, "auto");
+
281 else
+
282 u8g2.drawStr(80, 10, "manual");
+
283
+
284 // Setpoint profiles
+
285 if(spr.isRunning()) {
+
286 u8g2.setFont(u8g2_font_5x7_tr);
+
287 printf(52, 53, "Prof: %u/%u", spr.getCurrentPoint(), config::profiles[currentSPProfile].profile.size() - 1);
+
288 u8g2.setFont(u8g2_font_6x12_tr);
+
289 }
+
290
+
291 // Bottom bar
+
292 u8g2.drawHLine(0, 54, 128);
+
293 u8g2.setFont(u8g2_font_unifont_t_75);
+
294 u8g2.drawGlyph(0, 66, 9664);
+
295 u8g2.drawGlyph(30, 66, 9650);
+
296 u8g2.drawGlyph(36, 66, 9660);
+
297 u8g2.drawGlyph(65, 66, 9654);
+
298 u8g2.drawGlyph(98, 66, 9679);
+
299 u8g2.setFont(u8g2_font_5x7_tr);
+
300 u8g2.drawStr(10, 63, "tab");
+
301 u8g2.drawStr(45, 63, "adj");
+
302 u8g2.drawStr(75, 63, "prof");
+
303 u8g2.drawStr(108, 63, "mode");
+
304 u8g2.setFont(u8g2_font_6x12_tr);
+
305 }
+
+
306
+
+
308 void drawTabBar() {
+
309 u8g2.setFont(u8g2_font_6x12_tr);
+
310 u8g2.drawFrame(0, 0, 128, 14);
+
311
+
312 // Spinning indicator
+
313 u8g2.setFont(u8g2_font_unifont_t_75);
+
314 uint8_t i = (frame / 2) % 4;
+
315 u8g2.drawGlyph(118, 10, 0x25f3 - i);
+
316 }
+
+
317
+
+
318 bool handleInput(Buttons state, uint16_t pressedFor) override {
+
319 // First handle common input actions between tabs
+
320 if (state == Buttons::NONE) {
+
321 return false;
+
322 }
+
323
+
324 // Tab-specific handling
+
325 switch (currentTab) {
+
326 case Tab::main:
+
327 return handleInputMain(state, pressedFor);
+
328 case Tab::info:
+
329 return handleInputInfo(state, pressedFor);
+
330 case Tab::config:
+
331 return handleInputConfig(state, pressedFor);
+
332 }
+
333 }
+
+
334
+
+
336 bool handleInputMain(Buttons state, uint16_t pressedFor) {
+
337 int8_t delta = 0;
+
338 if (state == Buttons::LEFT) {
+ +
340 return true;
+
341 } else if (state == Buttons::RIGHT) {
+ +
343 spr.toggle();
+
344 } else if (state == Buttons::UP) {
+
345 delta = 1;
+
346 } else if (state == Buttons::DOWN) {
+
347 delta = -1;
+
348 } else if (state == Buttons::SELECT) {
+
349 // Toggle active state
+
350 humidistat.active = !humidistat.active;
+
351 return true;
+
352 }
+
353
+
354 // Long press coarse adjustment
+
355 if (pressedFor > longPressDuration)
+
356 delta *= adjustStep;
+
357 if (pressedFor > longPressDuration * 10)
+
358 delta *= 10;
+
359
+
360 if (humidistat.active) {
+
361 adjustValue(delta, humidistat.sp, 0, 100);
+
362 } else {
+
363 adjustValue(delta*0.01, humidistat.cv, humidistat.getCvMin(), humidistat.getCvMax());
+
364 }
+
365 return true;
+
366 }
+
+
367
+
+
369 bool handleInputInfo(Buttons state, uint16_t pressedFor) {
+
370 if (state == Buttons::LEFT) {
+ +
372 return true;
+
373 } else if (state == Buttons::UP) {
+ +
375 return true;
+
376 } else if (state == Buttons::DOWN) {
+ +
378 return true;
+
379 }
+
380 return false;
+
381 }
+
+
382
+
+
384 bool handleInputConfig(Buttons state, uint8_t pressedFor) {
+
385 // Ugly state machine below, maybe refactor?
+ +
387 if (state == Buttons::SELECT) {
+ +
389 return true;
+
390 }
+
391 if (state == Buttons::LEFT) {
+ +
393 return true;
+
394 }
+
395 if (state == Buttons::RIGHT) {
+ +
397 return true;
+
398 }
+
399 if (state == Buttons::UP) {
+
400 // Go up in parameter list
+ +
402 // Handle wrap-around
+
403 if (currentPar == 255) currentPar = nConfigPars - 1;
+
404 return true;
+
405 }
+
406 if (state == Buttons::DOWN) {
+
407 // Go down in parameter list
+ +
409 return true;
+
410 }
+
411 } else if (currentSelection == Selection::number) {
+
412 // Move selected digit left/right
+
413 if (state == Buttons::LEFT) {
+
414 currentDigit--;
+
415 if (currentDigit == 255) currentDigit = NUM_DIGITS - 1;
+
416 return true;
+
417 }
+
418 if (state == Buttons::RIGHT) {
+ +
420 return true;
+
421 }
+
422 // Go back to parameter selection
+
423 if (state == Buttons::SELECT) {
+ +
425 return true;
+
426 }
+
427 // Adjust digit up/down
+
428 if (state == Buttons::UP) {
+ +
430 return true;
+
431 }
+
432 if (state == Buttons::DOWN) {
+ +
434 return true;
+
435 }
+
436 } else if (currentSelection == Selection::actions) {
+
437 if (state == Buttons::LEFT || state == Buttons::RIGHT) {
+ +
439 return true;
+
440 }
+
441 if (state == Buttons::UP || state == Buttons::DOWN) {
+ +
443 return true;
+
444 }
+
445 if (state == Buttons::SELECT) {
+
446 humidistat.updatePIDParameters();
+ +
448 if (configSaveTimer == 0) {
+ + +
451 }
+
452 return true;
+
453 }
+ + +
456 return true;
+
457 }
+
458 }
+
459 }
+
460 }
+
+
461
+
+
462 void draw() override {
+
463 lastRefreshed = millis();
+
464
+
465 u8g2.clearBuffer();
+
466 drawTabBar();
+
467 switch (currentTab) {
+
468 case Tab::main:
+
469 drawMain();
+
470 break;
+
471 case Tab::info:
+
472 drawTabInfo();
+
473 break;
+
474 case Tab::config:
+
475 drawConfig();
+
476 break;
+
477 }
+
478 u8g2.sendBuffer();
+
479
+
480 // Keep track of frames
+
481 frame++;
+
482
+
483 // Decrement cooldown timer
+
484 if (configSaveTimer != 0)
+ +
486 }
+
+
487
+
+
488 void drawSplash() override {
+
489 u8g2.setFont(u8g2_font_helvB12_tr);
+
490 u8g2.drawStr(0, 24, "OpenHumidistat");
+
491
+
492 u8g2.setFont(u8g2_font_6x12_tr);
+
493 u8g2.drawStr(0, 40, "Lars Veldscholte");
+
494
+
495 u8g2.setFont(u8g2_font_5x7_tr);
+
496 u8g2.drawStr(0, 50, "https://github.com/");
+
497 u8g2.drawStr(0, 60, "OpenHumidistat");
+
498
+
499 u8g2.sendBuffer();
+
500 }
+
+
501
+
502 void drawInfo() override {}
+
503
+
+
504 void clear() override {
+
505 u8g2.clear();
+
506 }
+
+
507
+
+
508 void setCursor(uint8_t col, uint8_t row) override {
+
509 u8g2.setCursor(col, row);
+
510 }
+
+
511
+
512public:
+
+ +
522 etl::span<const ThermistorReader, 4> trs, EEPROMConfig *eepromConfig,
+ + + + + + +
529 {&eepromConfig->configStore.dt, "dt"},
+ +
531 {&eepromConfig->configStore.a, "a"},
+
532 } {}
+
+
533
+
+ +
535 etl::span<const ThermistorReader, 4> trs, EEPROMConfig *eepromConfig,
+ +
537 : ControllerUI(u8g2, buttonReader, trs), u8g2(*u8g2), eepromConfig(*eepromConfig),
+
538 humidistat(*humidistat), spr(*spr), nConfigPars(13), configPars{
+
539 {&eepromConfig->configStore.HC_Kp, "HC Kp"},
+
540 {&eepromConfig->configStore.HC_Ki, "HC Ki"},
+
541 {&eepromConfig->configStore.HC_Kd, "HC Kd"},
+
542 {&eepromConfig->configStore.HC_Kf, "HC Kf"},
+
543 {&eepromConfig->configStore.FC_Kp, "FC Kp"},
+
544 {&eepromConfig->configStore.FC_Ki, "FC Ki"},
+
545 {&eepromConfig->configStore.FC_Kd, "FC Kd"},
+
546 {&eepromConfig->configStore.FC_Kf, "FC Kf"},
+
547 {&eepromConfig->configStore.FC_dt, "FC dt"},
+ +
549 {&eepromConfig->configStore.dt, "dt"},
+ +
551 {&eepromConfig->configStore.a, "a"},
+
552 } {}
+
+
554
+
+
555 void begin() override {
+
556 SPI.begin();
+
557 u8g2.begin();
+
558 }
+
+
559};
+
+
560
+
561template<>
+
+ +
563 DrawMainCommon();
+
564
+
565 // PID box
+
566 double pTerm, iTerm, dTerm;
+
567 humidistat.getTerms(pTerm, iTerm, dTerm);
+
568
+
569 u8g2.drawFrame(52, 13, 47, 31);
+
570 u8g2.drawStr(54, 23, "P");
+
571 u8g2.drawStr(54, 32, "I");
+
572 u8g2.drawStr(54, 41, "D");
+
573 u8g2.drawVLine(60, 13, 31);
+
574
+
575 printf(62, 23, "%6.2f", pTerm);
+
576 printf(62, 32, "%6.2f", iTerm);
+
577 printf(62, 41, "%6.2f", dTerm);
+
578
+
579 // Temperature box
+
580 u8g2.setCursor(105, 23);
+
581 u8g2.print(humidistat.getTemperature(), 1);
+
582}
+
+
583
+
584template<>
+
+ +
586 DrawMainCommon();
+
587
+
588 // Flow box
+
589 u8g2.drawFrame(50, 13, 65, 42);
+
590 u8g2.drawStr(55, 23, "F");
+
591
+
592 {
+
593 char buf[] = "wet";
+
594 if (std::abs(humidistat.getInner(0)->pv - humidistat.getInner(0)->sp) > tolerance * 2) {
+
595 blink(66, 23, buf);
+
596 } else {
+
597 u8g2.drawStr(66, 23, buf);
+
598 }
+
599 }
+
600 {
+
601 char buf[] = "dry";
+
602 if (std::abs(humidistat.getInner(1)->pv - humidistat.getInner(1)->sp) > tolerance * 2) {
+
603 blink(91, 23, buf);
+
604 } else {
+
605 u8g2.drawStr(91, 23, buf);
+
606 }
+
607 }
+
608
+
609 u8g2.drawHLine(50, 26, 64);
+
610 u8g2.drawVLine(64, 13, 32);
+
611 u8g2.drawVLine(89, 13, 32);
+
612 u8g2.drawHLine(50, 45, 64);
+
613
+
614 u8g2.drawStr(52, 35, "PV");
+
615 u8g2.drawStr(52, 44, "CV");
+
616
+
617 printf(65, 35, "%3.2f", humidistat.getInner(0)->pv);
+
618 printf(65, 44, "%3.0f%%", humidistat.getInner(0)->cv * 100);
+
619 printf(90, 35, "%3.2f", humidistat.getInner(1)->pv);
+
620 printf(90, 44, "%3.0f%%", humidistat.getInner(1)->cv * 100);
+
621}
+
+
622
+
623#endif //HUMIDISTAT_GRAPHICALDISPLAYUI_H
+
Buttons
Possible button values.
Definition Buttons.h:5
+ + + + + + + + +
#define NUM_DIGITS
Definition ConfigPar.h:7
+
#define NUM_DECIMALS
Definition ConfigPar.h:8
+ + + + + +
void advanceEnum(T &e, int8_t n=1)
Cycle through (advance) an enum.
Definition advanceEnum.h:11
+
Read button state from a voltage ladder-style keypad.
+
Control humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers,...
+
A class for storing references to variables of various types (uint8_t, uint16_t, or double).
Definition ConfigPar.h:11
+
uint8_t magnitude() const
Get magnitude (number of digits before the decimal separator) of variable.
Definition ConfigPar.cpp:33
+
char * asprint() const
Print "label: value" to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition ConfigPar.cpp:22
+
void adjust(int16_t delta) const
Add delta to the variable.
Definition ConfigPar.cpp:8
+ +
User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input,...
+
const uint16_t refreshInterval
+
const double tolerance
+
static void adjustValue(double delta, double &value, uint8_t min, uint8_t max)
In-/de-crement a variable, while clipping it to [min, max].
+
etl::span< const ThermistorReader, 4 > trs
+
unsigned long lastRefreshed
Last time display was updated (in millis)
+
void printf(uint8_t col, uint8_t row, const char *fmt, T... args)
Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer int...
+
const ButtonReader & buttonReader
+
void printNTC(uint8_t col, uint8_t row, uint8_t i)
Print temperature read from thermistors. Handles NaN values as 0.
+
const uint8_t adjustStep
+
void blink(uint8_t col, uint8_t row, const char *buf)
Print blinking text.
+
Load/save an (internal) ConfigStore in EEPROM.
+
void reset()
Reset the config store: overwrite the configStore with the default values.
+
uint16_t save() const
Saves current content of configStore into EEPROM.
+
ConfigStore configStore
+
TUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to...
+
void setCursor(uint8_t col, uint8_t row) override
Set cursor to coordinates.
+
uint8_t configSaveTimer
Timer containing the current value of the cooldown on saving config to EEPROM.
+
Action
Config tab action definitions.
+ + +
void clear() override
Clear screen.
+
GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)
Constructor.
+
bool handleInputConfig(Buttons state, uint8_t pressedFor)
Handle input on the Config tab.
+
void drawMain()
Draw the Main tab.
+
Selection
Config tab selection definitions.
+ + + +
const uint16_t longPressDuration
+
Humidistat_t & humidistat
+
bool handleInput(Buttons state, uint16_t pressedFor) override
Handle input.
+ +
const uint8_t configSaveCooldown
+
GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, CascadeHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)
+
const uint8_t nConfigPars
Total number of config parameters.
+
uint8_t currentPar
Currently active config parameter.
+ + + + + +
void drawTabBar()
Draw the tab bar.
+
void begin() override
Initialize the display.
+
bool handleInputInfo(Buttons state, uint16_t pressedFor)
Handle input on the Info tab.
+
EEPROMConfig & eepromConfig
+
bool handleInputMain(Buttons state, uint16_t pressedFor)
Handle input on the Main tab.
+
Tab currentTab
Currently active tab.
+
void drawConfig()
Draw the Config tab.
+
void draw() override
Draw main interface (main loop).
+
void drawSplash() override
Draw splash screen.
+ +
SetpointProfileRunner & spr
+
void drawInfo() override
Draw info screen.
+ + +
const ConfigPar configPars[13]
Array of config parameters.
+
uint8_t frame
Frame counter (overflows, but that's OK)
+ +
void DrawMainCommon()
Draw common elements in Main tab.
+ +
'Runs' a setpoint profile.
+
void setProfile(const etl::span< const Point > &profile)
Set the profile.
+
bool isRunning() const
Get the run state.
+
size_t getCurrentPoint() const
Get the index of the current Point in the profile.
+
void toggle()
Toggle the run state.
+
Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and ca...
+
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
SerialLogger< cHumidistat > serialLogger & humidistat
Definition main.cpp:84
+
ButtonReader buttonReader(config::PIN_BTN, &voltLadder)
+
ThermistorReader trs[]
Definition main.cpp:25
+
EEPROMConfig eepromConfig
Definition main.cpp:36
+
const uint16_t longPressDuration
Duration for counting a press as 'long' (in millis)
Definition config.h:177
+
const SPProfile profiles[]
Setpoint profile definitions.
Definition config.h:139
+
const uint8_t configSaveCooldown
Cooldown on saving the config to EEPROM (in refresh cycles)
Definition config.h:180
+ + +
uint16_t FC_dt
+
double HC_totalFlowrate
Total flowrate (for cascade controller) (L/min)
+
double a
Smoothing factor of EMA filter for derivative.
+ + +
double HC_Kp
Humidity controller PID parameters.
+ +
bool loadedFromEEPROM
Whether this has been loaded from EEPROM.
Definition EEPROMConfig.h:9
+
double FC_Kp
Flow controller PID parameters.
+
double S_lowValue
Minimum solenoid duty cycle (deadband)
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+ +
const etl::span< const Point > profile
Definition Point.h:16
+
+
+ + + + diff --git a/Humidistat_8cpp.html b/Humidistat_8cpp.html new file mode 100644 index 0000000..6cbe051 --- /dev/null +++ b/Humidistat_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/control/Humidistat.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Humidistat.cpp File Reference
+
+
+
#include "Humidistat.h"
+
+Include dependency graph for Humidistat.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/Humidistat_8cpp__incl.map b/Humidistat_8cpp__incl.map new file mode 100644 index 0000000..5e9b483 --- /dev/null +++ b/Humidistat_8cpp__incl.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/Humidistat_8cpp__incl.md5 b/Humidistat_8cpp__incl.md5 new file mode 100644 index 0000000..0175b88 --- /dev/null +++ b/Humidistat_8cpp__incl.md5 @@ -0,0 +1 @@ +c010e2e046f0ebd63d2fe1903ba7fa9e \ No newline at end of file diff --git a/Humidistat_8cpp__incl.svg b/Humidistat_8cpp__incl.svg new file mode 100644 index 0000000..a285091 --- /dev/null +++ b/Humidistat_8cpp__incl.svg @@ -0,0 +1,147 @@ + + + + + + +src/control/Humidistat.cpp + + +Node1 + + +src/control/Humidistat.cpp + + + + + +Node2 + + +Humidistat.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +aliases.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +Controller.h + + + + + +Node2->Node4 + + + + + + + + +Node7 + + +../EEPROMConfig.h + + + + + +Node2->Node7 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +PID.h + + + + + +Node4->Node6 + + + + + + + + +Node4->Node7 + + + + + + + + +Node6->Node5 + + + + + + + + diff --git a/Humidistat_8cpp_source.html b/Humidistat_8cpp_source.html new file mode 100644 index 0000000..567e451 --- /dev/null +++ b/Humidistat_8cpp_source.html @@ -0,0 +1,184 @@ + + + + + + + +Humidistat: src/control/Humidistat.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Humidistat.cpp
+
+
+Go to the documentation of this file.
1#include "Humidistat.h"
+
2
+
+
3Humidistat::Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t
+
4 dt, double cvMin, double cvMax)
+
5 : Controller(cs, Kp, Ki, Kd, Kf, dt, cvMin, cvMax, 50, (cvMin + cvMax) / 2), hs(*hs) {}
+
+
6
+
+
7double Humidistat::getHumidity() const {
+
8 return hs.getHumidity();
+
9}
+
+
10
+
+ +
12 return hs.getTemperature();
+
13}
+
+
14
+
+ +
16 if (millis() - sensorLastRead < cs.dt)
+
17 return;
+
18 sensorLastRead = millis();
+
19
+ +
21
+
22 // Read humidity (if not NaN)
+
23 hs.readSample();
+
24 if (!isnan(hs.getHumidity()))
+
25 pv = hs.getHumidity();
+
26
+
27 // Run PID cycle if active (pid writes into this->cv)
+
28 pid.compute();
+
29}
+
+
30
+
+
31double Humidistat::getCvMin() const {
+
32 return pid.cvMin;
+
33}
+
+
34
+
+
35double Humidistat::getCvMax() const {
+
36 return pid.cvMax;
+
37}
+
+ +
Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance.
Definition Controller.h:11
+
bool active
Definition Controller.h:19
+
double pv
Process variable.
Definition Controller.h:21
+ +
const ConfigStore & cs
Definition Controller.h:14
+
unsigned long sensorLastRead
Definition Controller.h:16
+
double getHumidity() const
Read the humidity.
Definition Humidistat.cpp:7
+
double getCvMin() const
+
Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)
Constructor.
Definition Humidistat.cpp:3
+
double getCvMax() const
+
double getTemperature() const
Read the temperature.
+
void runCycle()
Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
+
HumiditySensor & hs
Definition Humidistat.h:12
+
void setAuto(bool inAuto)
Set the mode of the controller.
Definition PID.cpp:52
+
bool compute()
Run a cycle of the PID loop.
Definition PID.cpp:17
+
double cvMax
Lower/upper limits for cv.
Definition PID.h:34
+
double cvMin
Definition PID.h:34
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+
+
+ + + + diff --git a/Humidistat_8h.html b/Humidistat_8h.html new file mode 100644 index 0000000..f61f70e --- /dev/null +++ b/Humidistat_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: src/control/Humidistat.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Humidistat.h File Reference
+
+
+
#include "aliases.h"
+#include "Controller.h"
+#include "EEPROMConfig.h"
+
+Include dependency graph for Humidistat.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Humidistat
 Base class for a humidistat. Holds a reference to a HumiditySensor instance. More...
 
+
+
+ + + + diff --git a/Humidistat_8h.js b/Humidistat_8h.js new file mode 100644 index 0000000..a9a11ba --- /dev/null +++ b/Humidistat_8h.js @@ -0,0 +1,4 @@ +var Humidistat_8h = +[ + [ "Humidistat", "classHumidistat.html", "classHumidistat" ] +]; \ No newline at end of file diff --git a/Humidistat_8h__dep__incl.map b/Humidistat_8h__dep__incl.map new file mode 100644 index 0000000..83cb216 --- /dev/null +++ b/Humidistat_8h__dep__incl.map @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Humidistat_8h__dep__incl.md5 b/Humidistat_8h__dep__incl.md5 new file mode 100644 index 0000000..a0f40bf --- /dev/null +++ b/Humidistat_8h__dep__incl.md5 @@ -0,0 +1 @@ +fb800fbff7472c4b16886aaaf57b0728 \ No newline at end of file diff --git a/Humidistat_8h__dep__incl.svg b/Humidistat_8h__dep__incl.svg new file mode 100644 index 0000000..f6cbf39 --- /dev/null +++ b/Humidistat_8h__dep__incl.svg @@ -0,0 +1,273 @@ + + + + + + +src/control/Humidistat.h + + +Node1 + + +src/control/Humidistat.h + + + + + +Node2 + + +src/SetpointProfileRunner.h + + + + + +Node1->Node2 + + + + + + + + +Node6 + + +src/control/CascadeHumidistat.h + + + + + +Node1->Node6 + + + + + + + + +Node9 + + +src/control/Humidistat.cpp + + + + + +Node1->Node9 + + + + + + + + +Node10 + + +src/control/SingleHumidistat.h + + + + + +Node1->Node10 + + + + + + + + +Node3 + + +src/SetpointProfileRunner.cpp + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +src/main.cpp + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node2->Node5 + + + + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +src/SerialLogger.h + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +src/control/CascadeHumidistat.cpp + + + + + +Node6->Node8 + + + + + + + + +Node7->Node4 + + + + + + + + +Node10->Node5 + + + + + + + + +Node10->Node7 + + + + + + + + +Node11 + + +src/control/SingleHumidistat.cpp + + + + + +Node10->Node11 + + + + + + + + +Node12 + + +src/ui/CharDisplayUI.h + + + + + +Node10->Node12 + + + + + + + + +Node13 + + +src/ui/CharDisplayUI.cpp + + + + + +Node12->Node13 + + + + + + + + diff --git a/Humidistat_8h__incl.map b/Humidistat_8h__incl.map new file mode 100644 index 0000000..bfe0767 --- /dev/null +++ b/Humidistat_8h__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Humidistat_8h__incl.md5 b/Humidistat_8h__incl.md5 new file mode 100644 index 0000000..771add9 --- /dev/null +++ b/Humidistat_8h__incl.md5 @@ -0,0 +1 @@ +f5a1dd2e637cc523d8585a444b8c59d6 \ No newline at end of file diff --git a/Humidistat_8h__incl.svg b/Humidistat_8h__incl.svg new file mode 100644 index 0000000..2d06194 --- /dev/null +++ b/Humidistat_8h__incl.svg @@ -0,0 +1,129 @@ + + + + + + +src/control/Humidistat.h + + +Node1 + + +src/control/Humidistat.h + + + + + +Node2 + + +aliases.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Controller.h + + + + + +Node1->Node3 + + + + + + + + +Node6 + + +../EEPROMConfig.h + + + + + +Node1->Node6 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +PID.h + + + + + +Node3->Node5 + + + + + + + + +Node3->Node6 + + + + + + + + +Node5->Node4 + + + + + + + + diff --git a/Humidistat_8h_source.html b/Humidistat_8h_source.html new file mode 100644 index 0000000..17bc86f --- /dev/null +++ b/Humidistat_8h_source.html @@ -0,0 +1,158 @@ + + + + + + + +Humidistat: src/control/Humidistat.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Humidistat.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_HUMIDISTAT_H
+
2#define HUMIDISTAT_HUMIDISTAT_H
+
3
+
4#include "aliases.h"
+
5#include "Controller.h"
+
6#include "EEPROMConfig.h"
+
7
+
+
10class Humidistat : public Controller {
+
11protected:
+
12 HumiditySensor &hs;
+
13
+
16 void runCycle();
+
17
+
18public:
+
29 Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt,
+
30 double cvMin, double cvMax);
+
31
+
34 double getHumidity() const;
+
35
+
38 double getTemperature() const;
+
39
+
40 double getCvMin() const;
+
41 double getCvMax() const;
+
42};
+
+
43
+
44
+
45#endif //HUMIDISTAT_HUMIDISTAT_H
+ + + +
Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance.
Definition Controller.h:11
+
const ConfigStore & cs
Definition Controller.h:14
+
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
double getHumidity() const
Read the humidity.
Definition Humidistat.cpp:7
+
double getCvMin() const
+
Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)
Constructor.
Definition Humidistat.cpp:3
+
double getCvMax() const
+
double getTemperature() const
Read the temperature.
+
void runCycle()
Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
+
HumiditySensor & hs
Definition Humidistat.h:12
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
+
+ + + + diff --git a/Ks0256VoltLadder_8cpp.html b/Ks0256VoltLadder_8cpp.html new file mode 100644 index 0000000..e67ba73 --- /dev/null +++ b/Ks0256VoltLadder_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/input/Ks0256VoltLadder.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0256VoltLadder.cpp File Reference
+
+
+
#include "Ks0256VoltLadder.h"
+
+Include dependency graph for Ks0256VoltLadder.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/Ks0256VoltLadder_8cpp__incl.map b/Ks0256VoltLadder_8cpp__incl.map new file mode 100644 index 0000000..e71bef3 --- /dev/null +++ b/Ks0256VoltLadder_8cpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Ks0256VoltLadder_8cpp__incl.md5 b/Ks0256VoltLadder_8cpp__incl.md5 new file mode 100644 index 0000000..63f0385 --- /dev/null +++ b/Ks0256VoltLadder_8cpp__incl.md5 @@ -0,0 +1 @@ +1c5c7f6b651c33ceada4a7a2703fd4cf \ No newline at end of file diff --git a/Ks0256VoltLadder_8cpp__incl.svg b/Ks0256VoltLadder_8cpp__incl.svg new file mode 100644 index 0000000..552867b --- /dev/null +++ b/Ks0256VoltLadder_8cpp__incl.svg @@ -0,0 +1,75 @@ + + + + + + +src/input/Ks0256VoltLadder.cpp + + +Node1 + + +src/input/Ks0256VoltLadder.cpp + + + + + +Node2 + + +Ks0256VoltLadder.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +Buttons.h + + + + + +Node2->Node4 + + + + + + + + diff --git a/Ks0256VoltLadder_8cpp_source.html b/Ks0256VoltLadder_8cpp_source.html new file mode 100644 index 0000000..1a25773 --- /dev/null +++ b/Ks0256VoltLadder_8cpp_source.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/input/Ks0256VoltLadder.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0256VoltLadder.cpp
+
+
+Go to the documentation of this file.
1#include "Ks0256VoltLadder.h"
+
2
+
+ +
4 if (voltage > 1000) return Buttons::NONE;
+
5 if (voltage < 50) return Buttons::RIGHT;
+
6 if (voltage < 150) return Buttons::UP;
+
7 if (voltage < 300) return Buttons::DOWN;
+
8 if (voltage < 500) return Buttons::LEFT;
+
9 if (voltage < 750) return Buttons::SELECT;
+
10
+
11 return Buttons::NONE;
+
12}
+
+
Buttons
Possible button values.
Definition Buttons.h:5
+ + + + + + + +
Buttons voltageToButton(uint16_t voltage) const
+
+
+ + + + diff --git a/Ks0256VoltLadder_8h.html b/Ks0256VoltLadder_8h.html new file mode 100644 index 0000000..9834c16 --- /dev/null +++ b/Ks0256VoltLadder_8h.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/input/Ks0256VoltLadder.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Ks0256VoltLadder.h File Reference
+
+
+
#include <stdint.h>
+#include "Buttons.h"
+
+Include dependency graph for Ks0256VoltLadder.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Ks0256VoltLadder
 Implementation of the VoltLadder interface for the Keyestudio Ks0256 keypad. More...
 
+
+
+ + + + diff --git a/Ks0256VoltLadder_8h.js b/Ks0256VoltLadder_8h.js new file mode 100644 index 0000000..c4a34b5 --- /dev/null +++ b/Ks0256VoltLadder_8h.js @@ -0,0 +1,4 @@ +var Ks0256VoltLadder_8h = +[ + [ "Ks0256VoltLadder", "classKs0256VoltLadder.html", "classKs0256VoltLadder" ] +]; \ No newline at end of file diff --git a/Ks0256VoltLadder_8h__dep__incl.map b/Ks0256VoltLadder_8h__dep__incl.map new file mode 100644 index 0000000..ec94ffa --- /dev/null +++ b/Ks0256VoltLadder_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Ks0256VoltLadder_8h__dep__incl.md5 b/Ks0256VoltLadder_8h__dep__incl.md5 new file mode 100644 index 0000000..5b31ac0 --- /dev/null +++ b/Ks0256VoltLadder_8h__dep__incl.md5 @@ -0,0 +1 @@ +5a6ad36800115f6a57b19371d452ed14 \ No newline at end of file diff --git a/Ks0256VoltLadder_8h__dep__incl.svg b/Ks0256VoltLadder_8h__dep__incl.svg new file mode 100644 index 0000000..f355377 --- /dev/null +++ b/Ks0256VoltLadder_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/input/Ks0256VoltLadder.h + + +Node1 + + +src/input/Ks0256VoltLadder.h + + + + + +Node2 + + +src/input/Ks0256VoltLadder.cpp + + + + + +Node1->Node2 + + + + + + + + diff --git a/Ks0256VoltLadder_8h__incl.map b/Ks0256VoltLadder_8h__incl.map new file mode 100644 index 0000000..9d173e0 --- /dev/null +++ b/Ks0256VoltLadder_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Ks0256VoltLadder_8h__incl.md5 b/Ks0256VoltLadder_8h__incl.md5 new file mode 100644 index 0000000..d74474f --- /dev/null +++ b/Ks0256VoltLadder_8h__incl.md5 @@ -0,0 +1 @@ +2d8be1f8e2d418d5fdebc8b4905c0787 \ No newline at end of file diff --git a/Ks0256VoltLadder_8h__incl.svg b/Ks0256VoltLadder_8h__incl.svg new file mode 100644 index 0000000..bd8ca97 --- /dev/null +++ b/Ks0256VoltLadder_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/input/Ks0256VoltLadder.h + + +Node1 + + +src/input/Ks0256VoltLadder.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Buttons.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/Ks0256VoltLadder_8h_source.html b/Ks0256VoltLadder_8h_source.html new file mode 100644 index 0000000..81ff143 --- /dev/null +++ b/Ks0256VoltLadder_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + +Humidistat: src/input/Ks0256VoltLadder.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0256VoltLadder.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_KS0256VOLTLADDER_H
+
2#define HUMIDISTAT_KS0256VOLTLADDER_H
+
3
+
4#include <stdint.h>
+
5
+
6#include "Buttons.h"
+
7
+
+ +
10public:
+
11 Buttons voltageToButton(uint16_t voltage) const;
+
12};
+
+
13
+
14
+
15#endif //HUMIDISTAT_KS0256VOLTLADDER_H
+ +
Buttons
Possible button values.
Definition Buttons.h:5
+
Implementation of the VoltLadder interface for the Keyestudio Ks0256 keypad.
+
Buttons voltageToButton(uint16_t voltage) const
+
+
+ + + + diff --git a/Ks0466VoltLadder_8cpp.html b/Ks0466VoltLadder_8cpp.html new file mode 100644 index 0000000..68295c4 --- /dev/null +++ b/Ks0466VoltLadder_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/input/Ks0466VoltLadder.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0466VoltLadder.cpp File Reference
+
+
+
#include "Ks0466VoltLadder.h"
+
+Include dependency graph for Ks0466VoltLadder.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/Ks0466VoltLadder_8cpp__incl.map b/Ks0466VoltLadder_8cpp__incl.map new file mode 100644 index 0000000..8fe2c36 --- /dev/null +++ b/Ks0466VoltLadder_8cpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Ks0466VoltLadder_8cpp__incl.md5 b/Ks0466VoltLadder_8cpp__incl.md5 new file mode 100644 index 0000000..146b90f --- /dev/null +++ b/Ks0466VoltLadder_8cpp__incl.md5 @@ -0,0 +1 @@ +20fbca1982e879e0472c7e0666c8bc1c \ No newline at end of file diff --git a/Ks0466VoltLadder_8cpp__incl.svg b/Ks0466VoltLadder_8cpp__incl.svg new file mode 100644 index 0000000..9fa5563 --- /dev/null +++ b/Ks0466VoltLadder_8cpp__incl.svg @@ -0,0 +1,75 @@ + + + + + + +src/input/Ks0466VoltLadder.cpp + + +Node1 + + +src/input/Ks0466VoltLadder.cpp + + + + + +Node2 + + +Ks0466VoltLadder.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +Buttons.h + + + + + +Node2->Node4 + + + + + + + + diff --git a/Ks0466VoltLadder_8cpp_source.html b/Ks0466VoltLadder_8cpp_source.html new file mode 100644 index 0000000..31ee044 --- /dev/null +++ b/Ks0466VoltLadder_8cpp_source.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/input/Ks0466VoltLadder.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0466VoltLadder.cpp
+
+
+Go to the documentation of this file.
1#include "Ks0466VoltLadder.h"
+
2
+
+ +
4 if (voltage > 1000) return Buttons::NONE;
+
5 if (voltage < 75) return Buttons::LEFT;
+
6 if (voltage < 250) return Buttons::UP;
+
7 if (voltage < 425) return Buttons::DOWN;
+
8 if (voltage < 625) return Buttons::RIGHT;
+
9 if (voltage < 875) return Buttons::SELECT;
+
10
+
11 return Buttons::NONE;
+
12}
+
+
Buttons
Possible button values.
Definition Buttons.h:5
+ + + + + + + +
Buttons voltageToButton(uint16_t voltage) const
+
+
+ + + + diff --git a/Ks0466VoltLadder_8h.html b/Ks0466VoltLadder_8h.html new file mode 100644 index 0000000..941cc0b --- /dev/null +++ b/Ks0466VoltLadder_8h.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/input/Ks0466VoltLadder.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Ks0466VoltLadder.h File Reference
+
+
+
#include <stdint.h>
+#include "Buttons.h"
+
+Include dependency graph for Ks0466VoltLadder.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  Ks0466VoltLadder
 Implementation of the VoltLadder interface for the Keyestudio Ks0466 keypad. More...
 
+
+
+ + + + diff --git a/Ks0466VoltLadder_8h.js b/Ks0466VoltLadder_8h.js new file mode 100644 index 0000000..7ba9f50 --- /dev/null +++ b/Ks0466VoltLadder_8h.js @@ -0,0 +1,4 @@ +var Ks0466VoltLadder_8h = +[ + [ "Ks0466VoltLadder", "classKs0466VoltLadder.html", "classKs0466VoltLadder" ] +]; \ No newline at end of file diff --git a/Ks0466VoltLadder_8h__dep__incl.map b/Ks0466VoltLadder_8h__dep__incl.map new file mode 100644 index 0000000..d2ec6e3 --- /dev/null +++ b/Ks0466VoltLadder_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/Ks0466VoltLadder_8h__dep__incl.md5 b/Ks0466VoltLadder_8h__dep__incl.md5 new file mode 100644 index 0000000..fb31c39 --- /dev/null +++ b/Ks0466VoltLadder_8h__dep__incl.md5 @@ -0,0 +1 @@ +6fee99ba195cd75d6976429b896a3037 \ No newline at end of file diff --git a/Ks0466VoltLadder_8h__dep__incl.svg b/Ks0466VoltLadder_8h__dep__incl.svg new file mode 100644 index 0000000..d3de01f --- /dev/null +++ b/Ks0466VoltLadder_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/input/Ks0466VoltLadder.h + + +Node1 + + +src/input/Ks0466VoltLadder.h + + + + + +Node2 + + +src/input/Ks0466VoltLadder.cpp + + + + + +Node1->Node2 + + + + + + + + diff --git a/Ks0466VoltLadder_8h__incl.map b/Ks0466VoltLadder_8h__incl.map new file mode 100644 index 0000000..7a3171a --- /dev/null +++ b/Ks0466VoltLadder_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Ks0466VoltLadder_8h__incl.md5 b/Ks0466VoltLadder_8h__incl.md5 new file mode 100644 index 0000000..e7a1031 --- /dev/null +++ b/Ks0466VoltLadder_8h__incl.md5 @@ -0,0 +1 @@ +6ef31cb02d579e1bb73e1936564e9730 \ No newline at end of file diff --git a/Ks0466VoltLadder_8h__incl.svg b/Ks0466VoltLadder_8h__incl.svg new file mode 100644 index 0000000..63c963d --- /dev/null +++ b/Ks0466VoltLadder_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/input/Ks0466VoltLadder.h + + +Node1 + + +src/input/Ks0466VoltLadder.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Buttons.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/Ks0466VoltLadder_8h_source.html b/Ks0466VoltLadder_8h_source.html new file mode 100644 index 0000000..91feeee --- /dev/null +++ b/Ks0466VoltLadder_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + +Humidistat: src/input/Ks0466VoltLadder.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0466VoltLadder.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_KS0466VOLTLADDER_H
+
2#define HUMIDISTAT_KS0466VOLTLADDER_H
+
3
+
4#include <stdint.h>
+
5
+
6#include "Buttons.h"
+
7
+
+ +
10public:
+
11 Buttons voltageToButton(uint16_t voltage) const;
+
12};
+
+
13
+
14
+
15#endif //HUMIDISTAT_KS0466VOLTLADDER_H
+ +
Buttons
Possible button values.
Definition Buttons.h:5
+
Implementation of the VoltLadder interface for the Keyestudio Ks0466 keypad.
+
Buttons voltageToButton(uint16_t voltage) const
+
+
+ + + + diff --git a/PID_8cpp.html b/PID_8cpp.html new file mode 100644 index 0000000..f57605c --- /dev/null +++ b/PID_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/control/PID.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
PID.cpp File Reference
+
+
+
#include "PID.h"
+
+Include dependency graph for PID.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/PID_8cpp__incl.map b/PID_8cpp__incl.map new file mode 100644 index 0000000..53d4c34 --- /dev/null +++ b/PID_8cpp__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/PID_8cpp__incl.md5 b/PID_8cpp__incl.md5 new file mode 100644 index 0000000..b0a9dc9 --- /dev/null +++ b/PID_8cpp__incl.md5 @@ -0,0 +1 @@ +e296b02133a303963a6d96355f29fae7 \ No newline at end of file diff --git a/PID_8cpp__incl.svg b/PID_8cpp__incl.svg new file mode 100644 index 0000000..9ab6520 --- /dev/null +++ b/PID_8cpp__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/control/PID.cpp + + +Node1 + + +src/control/PID.cpp + + + + + +Node2 + + +PID.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdint.h + + + + + +Node2->Node3 + + + + + + + + diff --git a/PID_8cpp_source.html b/PID_8cpp_source.html new file mode 100644 index 0000000..e1f86ea --- /dev/null +++ b/PID_8cpp_source.html @@ -0,0 +1,224 @@ + + + + + + + +Humidistat: src/control/PID.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
PID.cpp
+
+
+Go to the documentation of this file.
1#include "PID.h"
+
2
+
+
3PID::PID(const double *pv, double *cv, const double *sp, double Kp, double Ki, double Kd, double Kf, uint16_t dt,
+
4 double cvMin, double cvMax, double a)
+
5 : pv(*pv), cv(*cv), sp(*sp), a(a), cvMin(cvMin), cvMax(cvMax) {
+
6 setGains(Kp, Ki, Kd, Kf, dt);
+
7}
+
+
8
+
+
9void PID::init() {
+
10 if(Ki != 0) {
+
11 integral = (cv - Kf * sp) / Ki;
+
12 }
+
13 lastPv = pv;
+
14 lastE = sp - pv;
+
15}
+
+
16
+
+ +
18 // Terminate if not in auto
+
19 if (!inAuto)
+
20 return false;
+
21
+
22 // Proportional error
+
23 double e = sp - pv;
+
24 // Derivative (Derivative on Measurement)
+
25 double dPv = (1-a) * lastDPV + a * (pv - lastPv); // Backwards difference, EWA smoothed
+
26 // Integral error
+
27 double delta = (lastE + e) / 2; // Trapezoidal integration
+
28 if ((cv < cvMax || delta < 0) && (cv > cvMin || delta > 0)) // Anti-windup through conditional integration
+
29 integral += delta;
+
30
+
31 pTerm = Kp * e;
+
32 iTerm = Ki * integral;
+
33 dTerm = -Kd * dPv;
+
34 fTerm = Kf * sp;
+
35
+
36 cv = clip(pTerm + iTerm + dTerm + fTerm);
+
37
+
38 lastPv = pv;
+
39 lastE = e;
+
40 lastDPV = dPv;
+
41 return true;
+
42}
+
+
43
+
+
44double PID::clip(double value) const {
+
45 if (value > cvMax)
+
46 return cvMax;
+
47 if (value < cvMin)
+
48 return cvMin;
+
49 return value;
+
50}
+
+
51
+
+
52void PID::setAuto(bool inAuto) {
+
53 // When going from manual to auto, run init() for bumpless transfer
+
54 if (inAuto && !this->inAuto)
+
55 init();
+
56 this->inAuto = inAuto;
+
57}
+
+
58
+
+
59void PID::setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt) {
+
60 this->dt = dt;
+
61 this->Kp = Kp;
+
62
+
63 // The timestep is constant, so we include it in Ki and Kd for convenience
+
64 this->Ki = Ki * dt / 1000;
+
65 this->Kd = Kd / (static_cast<double>(dt) / 1000);
+
66
+
67 this->Kf = Kf;
+
68
+
69 init();
+
70}
+
+ +
double & cv
Control variable.
Definition PID.h:11
+
void setAuto(bool inAuto)
Set the mode of the controller.
Definition PID.cpp:52
+
void init()
Method to be called when the controller goes from manual to auto mode for proper bumpless transfer.
Definition PID.cpp:9
+
double clip(double value) const
Clip value to [cvMin, cvMax].
Definition PID.cpp:44
+
double Kf
Gains.
Definition PID.h:14
+
const double & sp
Setpoint.
Definition PID.h:12
+
double a
Smoothing factor for EWA filter for derivative.
Definition PID.h:15
+
double Kp
Definition PID.h:14
+
double lastE
Last value of error.
Definition PID.h:20
+
PID(const double *pv, double *cv, const double *sp, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double a)
Constructor.
Definition PID.cpp:3
+
double iTerm
Definition PID.h:33
+
bool compute()
Run a cycle of the PID loop.
Definition PID.cpp:17
+
double integral
Integral of pv.
Definition PID.h:22
+
double Ki
Definition PID.h:14
+
double dTerm
Definition PID.h:33
+
double lastPv
Last value of pv.
Definition PID.h:19
+
double lastDPV
Last value of derivative term.
Definition PID.h:21
+
double cvMax
Lower/upper limits for cv.
Definition PID.h:34
+
uint16_t dt
Timestep.
Definition PID.h:16
+
bool inAuto
Mode.
Definition PID.h:18
+
double cvMin
Definition PID.h:34
+
const double & pv
Process variable.
Definition PID.h:10
+
void setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt)
Set the gains and timestep.
Definition PID.cpp:59
+
double Kd
Definition PID.h:14
+
double fTerm
PID terms.
Definition PID.h:33
+
double pTerm
Definition PID.h:33
+
+
+ + + + diff --git a/PID_8h.html b/PID_8h.html new file mode 100644 index 0000000..7c8fe18 --- /dev/null +++ b/PID_8h.html @@ -0,0 +1,137 @@ + + + + + + + +Humidistat: src/control/PID.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
PID.h File Reference
+
+
+
#include <stdint.h>
+
+Include dependency graph for PID.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  PID
 PID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Measurement, anti-windup through conditional integration, bumpless transfer, and feed-forward. More...
 
+
+
+ + + + diff --git a/PID_8h.js b/PID_8h.js new file mode 100644 index 0000000..35654ef --- /dev/null +++ b/PID_8h.js @@ -0,0 +1,4 @@ +var PID_8h = +[ + [ "PID", "classPID.html", "classPID" ] +]; \ No newline at end of file diff --git a/PID_8h__dep__incl.map b/PID_8h__dep__incl.map new file mode 100644 index 0000000..453f1b8 --- /dev/null +++ b/PID_8h__dep__incl.map @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PID_8h__dep__incl.md5 b/PID_8h__dep__incl.md5 new file mode 100644 index 0000000..3547c5f --- /dev/null +++ b/PID_8h__dep__incl.md5 @@ -0,0 +1 @@ +b9f5c304d07ec417025c150dcb404ca7 \ No newline at end of file diff --git a/PID_8h__dep__incl.svg b/PID_8h__dep__incl.svg new file mode 100644 index 0000000..ea305be --- /dev/null +++ b/PID_8h__dep__incl.svg @@ -0,0 +1,408 @@ + + + + + + +src/control/PID.h + + +Node1 + + +src/control/PID.h + + + + + +Node2 + + +src/control/Controller.h + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +src/control/FlowController.h + + + + + +Node1->Node5 + + + + + + + + +Node19 + + +src/control/PID.cpp + + + + + +Node1->Node19 + + + + + + + + +Node3 + + +src/control/Controller.cpp + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +src/control/FlowController.cpp + + + + + +Node2->Node4 + + + + + + + + +Node2->Node5 + + + + + + + + +Node11 + + +src/control/Humidistat.h + + + + + +Node2->Node11 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6 + + +src/control/CascadeHumidistat.h + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +src/SerialLogger.h + + + + + +Node6->Node7 + + + + + + + + +Node9 + + +src/control/CascadeHumidistat.cpp + + + + + +Node6->Node9 + + + + + + + + +Node10 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node6->Node10 + + + + + + + + +Node8 + + +src/main.cpp + + + + + +Node7->Node8 + + + + + + + + +Node11->Node6 + + + + + + + + +Node12 + + +src/SetpointProfileRunner.h + + + + + +Node11->Node12 + + + + + + + + +Node14 + + +src/control/Humidistat.cpp + + + + + +Node11->Node14 + + + + + + + + +Node15 + + +src/control/SingleHumidistat.h + + + + + +Node11->Node15 + + + + + + + + +Node12->Node8 + + + + + + + + +Node12->Node10 + + + + + + + + +Node13 + + +src/SetpointProfileRunner.cpp + + + + + +Node12->Node13 + + + + + + + + +Node15->Node7 + + + + + + + + +Node15->Node10 + + + + + + + + +Node16 + + +src/control/SingleHumidistat.cpp + + + + + +Node15->Node16 + + + + + + + + +Node17 + + +src/ui/CharDisplayUI.h + + + + + +Node15->Node17 + + + + + + + + +Node18 + + +src/ui/CharDisplayUI.cpp + + + + + +Node17->Node18 + + + + + + + + diff --git a/PID_8h__incl.map b/PID_8h__incl.map new file mode 100644 index 0000000..b78815c --- /dev/null +++ b/PID_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/PID_8h__incl.md5 b/PID_8h__incl.md5 new file mode 100644 index 0000000..7ff050f --- /dev/null +++ b/PID_8h__incl.md5 @@ -0,0 +1 @@ +d9d3f40f22e25d80bf8a51dfdc48cd4b \ No newline at end of file diff --git a/PID_8h__incl.svg b/PID_8h__incl.svg new file mode 100644 index 0000000..08a3854 --- /dev/null +++ b/PID_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/control/PID.h + + +Node1 + + +src/control/PID.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/PID_8h_source.html b/PID_8h_source.html new file mode 100644 index 0000000..9df8351 --- /dev/null +++ b/PID_8h_source.html @@ -0,0 +1,184 @@ + + + + + + + +Humidistat: src/control/PID.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
PID.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_PID_H
+
2#define HUMIDISTAT_PID_H
+
3
+
4#include <stdint.h>
+
5
+
+
8class PID {
+
9private:
+
10 const double &pv;
+
11 double &cv;
+
12 const double &sp;
+
13
+
14 double Kp, Ki, Kd, Kf;
+
15 double a;
+
16 uint16_t dt;
+
17
+
18 bool inAuto = false;
+
19 double lastPv;
+
20 double lastE;
+
21 double lastDPV;
+
22 double integral;
+
23
+
25 void init();
+
26
+
30 double clip(double value) const;
+
31
+
32public:
+
33 double pTerm = 0, iTerm = 0, dTerm = 0, fTerm = 0;
+
34 double cvMin, cvMax;
+
35
+
48 PID(const double *pv, double *cv, const double *sp, double Kp, double Ki, double Kd, double Kf, uint16_t dt,
+
49 double cvMin, double cvMax, double a);
+
50
+
53 bool compute();
+
54
+
57 void setAuto(bool inAuto);
+
58
+
65 void setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt);
+
66};
+
+
67
+
68#endif //HUMIDISTAT_PID_H
+
PID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Meas...
Definition PID.h:8
+
double & cv
Control variable.
Definition PID.h:11
+
void setAuto(bool inAuto)
Set the mode of the controller.
Definition PID.cpp:52
+
void init()
Method to be called when the controller goes from manual to auto mode for proper bumpless transfer.
Definition PID.cpp:9
+
double clip(double value) const
Clip value to [cvMin, cvMax].
Definition PID.cpp:44
+
double Kf
Gains.
Definition PID.h:14
+
const double & sp
Setpoint.
Definition PID.h:12
+
double a
Smoothing factor for EWA filter for derivative.
Definition PID.h:15
+
double Kp
Definition PID.h:14
+
double lastE
Last value of error.
Definition PID.h:20
+
PID(const double *pv, double *cv, const double *sp, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double a)
Constructor.
Definition PID.cpp:3
+
double iTerm
Definition PID.h:33
+
bool compute()
Run a cycle of the PID loop.
Definition PID.cpp:17
+
double integral
Integral of pv.
Definition PID.h:22
+
double Ki
Definition PID.h:14
+
double dTerm
Definition PID.h:33
+
double lastPv
Last value of pv.
Definition PID.h:19
+
double lastDPV
Last value of derivative term.
Definition PID.h:21
+
double cvMax
Lower/upper limits for cv.
Definition PID.h:34
+
uint16_t dt
Timestep.
Definition PID.h:16
+
bool inAuto
Mode.
Definition PID.h:18
+
double cvMin
Definition PID.h:34
+
const double & pv
Process variable.
Definition PID.h:10
+
void setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt)
Set the gains and timestep.
Definition PID.cpp:59
+
double Kd
Definition PID.h:14
+
double fTerm
PID terms.
Definition PID.h:33
+
double pTerm
Definition PID.h:33
+
+
+ + + + diff --git a/Point_8h.html b/Point_8h.html new file mode 100644 index 0000000..dcf7121 --- /dev/null +++ b/Point_8h.html @@ -0,0 +1,141 @@ + + + + + + + +Humidistat: src/Point.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Point.h File Reference
+
+
+
#include <stdint.h>
+#include <etl/span.h>
+
+Include dependency graph for Point.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + +

+Classes

struct  Point
 Point: a vector of a time and setpoint value. More...
 
struct  SPProfile
 Setpoint profile: a label and a span over Points. More...
 
+
+
+ + + + diff --git a/Point_8h.js b/Point_8h.js new file mode 100644 index 0000000..411f121 --- /dev/null +++ b/Point_8h.js @@ -0,0 +1,5 @@ +var Point_8h = +[ + [ "Point", "structPoint.html", "structPoint" ], + [ "SPProfile", "structSPProfile.html", "structSPProfile" ] +]; \ No newline at end of file diff --git a/Point_8h__dep__incl.map b/Point_8h__dep__incl.map new file mode 100644 index 0000000..26339d2 --- /dev/null +++ b/Point_8h__dep__incl.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/Point_8h__dep__incl.md5 b/Point_8h__dep__incl.md5 new file mode 100644 index 0000000..74919dd --- /dev/null +++ b/Point_8h__dep__incl.md5 @@ -0,0 +1 @@ +40c640c36a78b76bac955f3436df9959 \ No newline at end of file diff --git a/Point_8h__dep__incl.svg b/Point_8h__dep__incl.svg new file mode 100644 index 0000000..0e6dd45 --- /dev/null +++ b/Point_8h__dep__incl.svg @@ -0,0 +1,111 @@ + + + + + + +src/Point.h + + +Node1 + + +src/Point.h + + + + + +Node2 + + +src/SetpointProfileRunner.h + + + + + +Node1->Node2 + + + + + + + + +Node6 + + +src/config.h + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +src/SetpointProfileRunner.cpp + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +src/main.cpp + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node2->Node5 + + + + + + + + diff --git a/Point_8h__incl.map b/Point_8h__incl.map new file mode 100644 index 0000000..ddaa131 --- /dev/null +++ b/Point_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Point_8h__incl.md5 b/Point_8h__incl.md5 new file mode 100644 index 0000000..dbae93d --- /dev/null +++ b/Point_8h__incl.md5 @@ -0,0 +1 @@ +0980cb5f1e391638acf8e55786bb7eac \ No newline at end of file diff --git a/Point_8h__incl.svg b/Point_8h__incl.svg new file mode 100644 index 0000000..408aedd --- /dev/null +++ b/Point_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/Point.h + + +Node1 + + +src/Point.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/Point_8h_source.html b/Point_8h_source.html new file mode 100644 index 0000000..b56d40f --- /dev/null +++ b/Point_8h_source.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/Point.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Point.h
+
+
+Go to the documentation of this file.
1#ifndef FIRMWARE_POINT_H
+
2#define FIRMWARE_POINT_H
+
3
+
4#include <stdint.h>
+
5#include <etl/span.h>
+
6
+
+
8struct Point {
+
9 const uint16_t time;
+
10 const uint8_t sp;
+
11};
+
+
12
+
+
14struct SPProfile {
+
15 const char label[12];
+
16 const etl::span<const Point> profile;
+
17};
+
+
18
+
19#endif //FIRMWARE_POINT_H
+
Point: a vector of a time and setpoint value.
Definition Point.h:8
+
const uint16_t time
Time in seconds.
Definition Point.h:9
+
const uint8_t sp
Definition Point.h:10
+
Setpoint profile: a label and a span over Points.
Definition Point.h:14
+
const char label[12]
Definition Point.h:15
+
const etl::span< const Point > profile
Definition Point.h:16
+
+
+ + + + diff --git a/SHTHumiditySensor_8cpp.html b/SHTHumiditySensor_8cpp.html new file mode 100644 index 0000000..a81c6a9 --- /dev/null +++ b/SHTHumiditySensor_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/sensor/SHTHumiditySensor.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SHTHumiditySensor.cpp File Reference
+
+
+
#include "SHTHumiditySensor.h"
+
+Include dependency graph for SHTHumiditySensor.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/SHTHumiditySensor_8cpp__incl.map b/SHTHumiditySensor_8cpp__incl.map new file mode 100644 index 0000000..e523255 --- /dev/null +++ b/SHTHumiditySensor_8cpp__incl.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/SHTHumiditySensor_8cpp__incl.md5 b/SHTHumiditySensor_8cpp__incl.md5 new file mode 100644 index 0000000..c1fdec7 --- /dev/null +++ b/SHTHumiditySensor_8cpp__incl.md5 @@ -0,0 +1 @@ +4fe583f054e903ab77d446dd26c135f0 \ No newline at end of file diff --git a/SHTHumiditySensor_8cpp__incl.svg b/SHTHumiditySensor_8cpp__incl.svg new file mode 100644 index 0000000..0d46d7e --- /dev/null +++ b/SHTHumiditySensor_8cpp__incl.svg @@ -0,0 +1,93 @@ + + + + + + +src/sensor/SHTHumiditySensor.cpp + + +Node1 + + +src/sensor/SHTHumiditySensor.cpp + + + + + +Node2 + + +SHTHumiditySensor.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +math.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +Wire.h + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +SHTSensor.h + + + + + +Node2->Node5 + + + + + + + + diff --git a/SHTHumiditySensor_8cpp_source.html b/SHTHumiditySensor_8cpp_source.html new file mode 100644 index 0000000..cb179d6 --- /dev/null +++ b/SHTHumiditySensor_8cpp_source.html @@ -0,0 +1,154 @@ + + + + + + + +Humidistat: src/sensor/SHTHumiditySensor.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SHTHumiditySensor.cpp
+
+
+Go to the documentation of this file.
1#include "SHTHumiditySensor.h"
+
2
+
3SHTHumiditySensor::SHTHumiditySensor(SHTSensor *sht) : sht(*sht) {}
+
4
+
+ +
6 return h;
+
7}
+
+
8
+
+ +
10 return t;
+
11}
+
+
12
+
+ +
14 Wire.begin();
+
15 sht.init();
+
16}
+
+
17
+
+ +
19 sht.readSample();
+
20 t = sht.getTemperature();
+
21 h = sht.getHumidity();
+
22}
+
+ +
SHTHumiditySensor(SHTSensor *sht)
+ + +
double getTemperature() const
+
double getHumidity() const
+ + + +
+
+ + + + diff --git a/SHTHumiditySensor_8h.html b/SHTHumiditySensor_8h.html new file mode 100644 index 0000000..03aea33 --- /dev/null +++ b/SHTHumiditySensor_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: src/sensor/SHTHumiditySensor.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SHTHumiditySensor.h File Reference
+
+
+
#include <math.h>
+#include <Wire.h>
+#include <SHTSensor.h>
+
+Include dependency graph for SHTHumiditySensor.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SHTHumiditySensor
 Implementation of the HumiditySensor interface for the Sensirion SHT85 sensor. More...
 
+
+
+ + + + diff --git a/SHTHumiditySensor_8h.js b/SHTHumiditySensor_8h.js new file mode 100644 index 0000000..ebf9824 --- /dev/null +++ b/SHTHumiditySensor_8h.js @@ -0,0 +1,4 @@ +var SHTHumiditySensor_8h = +[ + [ "SHTHumiditySensor", "classSHTHumiditySensor.html", "classSHTHumiditySensor" ] +]; \ No newline at end of file diff --git a/SHTHumiditySensor_8h__dep__incl.map b/SHTHumiditySensor_8h__dep__incl.map new file mode 100644 index 0000000..51e6afd --- /dev/null +++ b/SHTHumiditySensor_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/SHTHumiditySensor_8h__dep__incl.md5 b/SHTHumiditySensor_8h__dep__incl.md5 new file mode 100644 index 0000000..2b15d1c --- /dev/null +++ b/SHTHumiditySensor_8h__dep__incl.md5 @@ -0,0 +1 @@ +21c3bb27455dd25802a7b5f522c7ae15 \ No newline at end of file diff --git a/SHTHumiditySensor_8h__dep__incl.svg b/SHTHumiditySensor_8h__dep__incl.svg new file mode 100644 index 0000000..e798853 --- /dev/null +++ b/SHTHumiditySensor_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/sensor/SHTHumiditySensor.h + + +Node1 + + +src/sensor/SHTHumiditySensor.h + + + + + +Node2 + + +src/sensor/SHTHumiditySensor.cpp + + + + + +Node1->Node2 + + + + + + + + diff --git a/SHTHumiditySensor_8h__incl.map b/SHTHumiditySensor_8h__incl.map new file mode 100644 index 0000000..9a07bf9 --- /dev/null +++ b/SHTHumiditySensor_8h__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/SHTHumiditySensor_8h__incl.md5 b/SHTHumiditySensor_8h__incl.md5 new file mode 100644 index 0000000..aecafeb --- /dev/null +++ b/SHTHumiditySensor_8h__incl.md5 @@ -0,0 +1 @@ +e45fb55e076f4212776cca0fd4c88b99 \ No newline at end of file diff --git a/SHTHumiditySensor_8h__incl.svg b/SHTHumiditySensor_8h__incl.svg new file mode 100644 index 0000000..22787fc --- /dev/null +++ b/SHTHumiditySensor_8h__incl.svg @@ -0,0 +1,75 @@ + + + + + + +src/sensor/SHTHumiditySensor.h + + +Node1 + + +src/sensor/SHTHumiditySensor.h + + + + + +Node2 + + +math.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Wire.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +SHTSensor.h + + + + + +Node1->Node4 + + + + + + + + diff --git a/SHTHumiditySensor_8h_source.html b/SHTHumiditySensor_8h_source.html new file mode 100644 index 0000000..adefafa --- /dev/null +++ b/SHTHumiditySensor_8h_source.html @@ -0,0 +1,148 @@ + + + + + + + +Humidistat: src/sensor/SHTHumiditySensor.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SHTHumiditySensor.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_SHTHUMIDITYSENSOR_H
+
2#define HUMIDISTAT_SHTHUMIDITYSENSOR_H
+
3
+
4#include <math.h>
+
5#include <Wire.h>
+
6#include <SHTSensor.h>
+
7
+
+ +
10private:
+
11 SHTSensor &sht;
+
12
+
13 double t = NAN, h = NAN;
+
14public:
+
15 explicit SHTHumiditySensor(SHTSensor *sht);
+
16 double getHumidity() const;
+
17 double getTemperature() const;
+
18 void begin();
+
19 void readSample();
+
20};
+
+
21
+
22
+
23#endif //HUMIDISTAT_SHTHUMIDITYSENSOR_H
+
Implementation of the HumiditySensor interface for the Sensirion SHT85 sensor.
+
SHTHumiditySensor(SHTSensor *sht)
+ + +
double getTemperature() const
+
double getHumidity() const
+ + + +
+
+ + + + diff --git a/SerialLogger_8h.html b/SerialLogger_8h.html new file mode 100644 index 0000000..c0be614 --- /dev/null +++ b/SerialLogger_8h.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/SerialLogger.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SerialLogger.h File Reference
+
+
+
#include <stdint.h>
+#include <etl/span.h>
+#include "asprintf.h"
+#include "control/SingleHumidistat.h"
+#include "control/CascadeHumidistat.h"
+#include "sensor/ThermistorReader.h"
+
+Include dependency graph for SerialLogger.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SerialLogger< Humidistat_t >
 Logs humidistat data over serial. More...
 
+
+
+ + + + diff --git a/SerialLogger_8h.js b/SerialLogger_8h.js new file mode 100644 index 0000000..6f1cacf --- /dev/null +++ b/SerialLogger_8h.js @@ -0,0 +1,4 @@ +var SerialLogger_8h = +[ + [ "SerialLogger< Humidistat_t >", "classSerialLogger.html", "classSerialLogger" ] +]; \ No newline at end of file diff --git a/SerialLogger_8h__dep__incl.map b/SerialLogger_8h__dep__incl.map new file mode 100644 index 0000000..525d10e --- /dev/null +++ b/SerialLogger_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/SerialLogger_8h__dep__incl.md5 b/SerialLogger_8h__dep__incl.md5 new file mode 100644 index 0000000..0851ffa --- /dev/null +++ b/SerialLogger_8h__dep__incl.md5 @@ -0,0 +1 @@ +bd8f9c10b1eee3883ad36eb65f58ea56 \ No newline at end of file diff --git a/SerialLogger_8h__dep__incl.svg b/SerialLogger_8h__dep__incl.svg new file mode 100644 index 0000000..61d84a1 --- /dev/null +++ b/SerialLogger_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/SerialLogger.h + + +Node1 + + +src/SerialLogger.h + + + + + +Node2 + + +src/main.cpp + + + + + +Node1->Node2 + + + + + + + + diff --git a/SerialLogger_8h__incl.map b/SerialLogger_8h__incl.map new file mode 100644 index 0000000..8a2851d --- /dev/null +++ b/SerialLogger_8h__incl.map @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SerialLogger_8h__incl.md5 b/SerialLogger_8h__incl.md5 new file mode 100644 index 0000000..6991442 --- /dev/null +++ b/SerialLogger_8h__incl.md5 @@ -0,0 +1 @@ +b47ee5bf55bbd59d1715d0482492bd68 \ No newline at end of file diff --git a/SerialLogger_8h__incl.svg b/SerialLogger_8h__incl.svg new file mode 100644 index 0000000..01a00a1 --- /dev/null +++ b/SerialLogger_8h__incl.svg @@ -0,0 +1,471 @@ + + + + + + +src/SerialLogger.h + + +Node1 + + +src/SerialLogger.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +asprintf.h + + + + + +Node1->Node4 + + + + + + + + +Node7 + + +control/SingleHumidistat.h + + + + + +Node1->Node7 + + + + + + + + +Node14 + + +control/CascadeHumidistat.h + + + + + +Node1->Node14 + + + + + + + + +Node18 + + +sensor/ThermistorReader.h + + + + + +Node1->Node18 + + + + + + + + +Node5 + + +stdlib.h + + + + + +Node4->Node5 + + + + + + + + +Node6 + + +stdio.h + + + + + +Node4->Node6 + + + + + + + + +Node7->Node2 + + + + + + + + +Node8 + + +etl/array.h + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +aliases.h + + + + + +Node7->Node9 + + + + + + + + +Node10 + + +Humidistat.h + + + + + +Node7->Node10 + + + + + + + + +Node13 + + +../EEPROMConfig.h + + + + + +Node7->Node13 + + + + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Controller.h + + + + + +Node10->Node11 + + + + + + + + +Node10->Node13 + + + + + + + + +Node11->Node2 + + + + + + + + +Node12 + + +PID.h + + + + + +Node11->Node12 + + + + + + + + +Node11->Node13 + + + + + + + + +Node12->Node2 + + + + + + + + +Node14->Node3 + + + + + + + + +Node14->Node8 + + + + + + + + +Node14->Node9 + + + + + + + + +Node14->Node10 + + + + + + + + +Node15 + + +../sensor/FlowSensor.h + + + + + +Node14->Node15 + + + + + + + + +Node17 + + +FlowController.h + + + + + +Node14->Node17 + + + + + + + + +Node15->Node2 + + + + + + + + +Node16 + + +imath.h + + + + + +Node15->Node16 + + + + + + + + +Node17->Node11 + + + + + + + + +Node17->Node12 + + + + + + + + +Node17->Node13 + + + + + + + + +Node17->Node15 + + + + + + + + +Node18->Node2 + + + + + + + + diff --git a/SerialLogger_8h_source.html b/SerialLogger_8h_source.html new file mode 100644 index 0000000..c843f85 --- /dev/null +++ b/SerialLogger_8h_source.html @@ -0,0 +1,275 @@ + + + + + + + +Humidistat: src/SerialLogger.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SerialLogger.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_SERIALLOGGER_H
+
2#define HUMIDISTAT_SERIALLOGGER_H
+
3
+
4#include <stdint.h>
+
5#include <etl/span.h>
+
6
+
7#include "asprintf.h"
+ + + +
11
+
14template<class Humidistat_t>
+
+ +
16private:
+
17 const Humidistat_t &humidistat;
+
18 const etl::span<const ThermistorReader, 4> trs;
+
19
+
20 // Can't specialize constexpr...
+
21 static const char header[];
+
22
+
23 const uint16_t interval;
+
24 unsigned long lastTime = 0;
+
25 bool ready = false;
+
26
+
28 void log();
+
29
+
30public:
+
+
35 explicit SerialLogger(const Humidistat_t *humidistat, etl::span<const ThermistorReader, 4> trs, uint16_t interval)
+ +
+
37
+
+
39 static void begin(uint32_t baud) {
+
40 Serial.begin(baud);
+
41 // Indicate that we're ready
+
42 Serial.println("RDY");
+
43 }
+
+
44
+
+
46 void update() {
+
47 // Listen for RDY signal
+
48 if (Serial.available()) {
+
49 char buf[8];
+
50 size_t numRead = Serial.readBytesUntil('\r', buf, 7);
+
51 buf[numRead] = '\0';
+
52
+
53 if (strcmp(buf, "RDY") == 0) {
+
54 // Print header and set ready state
+
55 Serial.println(header);
+
56 ready = true;
+
57 }
+
58 }
+
59
+
60 if (ready) {
+
61 if (millis() - lastTime >= interval) {
+
62 lastTime = millis();
+
63 log();
+
64 }
+
65 }
+
66 }
+
+
67};
+
+
68
+
69template<>
+
70const char SerialLogger<SingleHumidistat>::header[] = "Time Humidity Setpoint Temperature ControlValue T0 T1 T2 T3 "
+
71 "pTerm iTerm dTerm";
+
72
+
73template<>
+
74const char SerialLogger<CascadeHumidistat>::header[] = "Time PV SP T CV inner0PV inner0SP inner0CV inner1PV inner1SP "
+
75 "inner1CV pTerm iTerm dTerm inner0pTerm inner0iTerm inner0dTerm "
+
76 "inner1pTerm inner1iTerm inner1dTerm";
+
77
+
78template<>
+
+ +
80 double pTerm, iTerm, dTerm;
+
81 humidistat.getTerms(pTerm, iTerm, dTerm);
+
82
+
83 char *buf = asprintf("%lu %.2f %.2f %.2f %.4f %.2f %.2f %.2f %.2f %.4f %.4f %.4f",
+
84 lastTime,
+
85 humidistat.getHumidity(),
+
86 humidistat.sp,
+
87 humidistat.getTemperature(),
+
88 humidistat.cv,
+
89 trs[0].readTemp(),
+
90 trs[1].readTemp(),
+
91 trs[2].readTemp(),
+
92 trs[3].readTemp(),
+
93 pTerm,
+
94 iTerm,
+
95 dTerm
+
96 );
+
97
+
98 Serial.println(buf);
+
99 delete buf;
+
100}
+
+
101
+
102template<>
+
+ +
104 double outerPTerm, outerITerm, outerDTerm;
+
105 humidistat.getTerms(outerPTerm, outerITerm, outerDTerm);
+
106
+
107 double innerPTerms[2], innerITerms[2], innerDTerms[2];
+
108 humidistat.getInner(0)->getTerms(innerPTerms[0], innerITerms[0], innerDTerms[0]);
+
109 humidistat.getInner(1)->getTerms(innerPTerms[1], innerITerms[1], innerDTerms[1]);
+
110
+
111 char *buf = asprintf("%lu %.2f %.2f %.2f %.4f %.3f %.4f %.3f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f",
+
112 lastTime,
+
113 humidistat.getHumidity(),
+
114 humidistat.sp,
+
115 humidistat.getTemperature(),
+
116 humidistat.cv,
+
117 humidistat.getInner(0)->pv,
+
118 humidistat.getInner(0)->sp,
+
119 humidistat.getInner(0)->cv,
+
120 humidistat.getInner(1)->pv,
+
121 humidistat.getInner(1)->sp,
+
122 humidistat.getInner(1)->cv,
+
123 outerPTerm,
+
124 outerITerm,
+
125 outerDTerm,
+
126 innerPTerms[0],
+
127 innerITerms[0],
+
128 innerDTerms[0],
+
129 innerPTerms[1],
+
130 innerITerms[1],
+
131 innerDTerms[1]
+
132 );
+
133
+
134 Serial.println(buf);
+
135 delete buf;
+
136}
+
+
137
+
138#endif //HUMIDISTAT_SERIALLOGGER_H
+ + + + +
char * asprintf(const char *fmt, T... args)
Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition asprintf.h:13
+
Logs humidistat data over serial.
+
void log()
Write a line to serial.
+
void update()
Log a line every interval, once data has been received.
+ +
SerialLogger(const Humidistat_t *humidistat, etl::span< const ThermistorReader, 4 > trs, uint16_t interval)
Constructor.
+
static const char header[]
+
static void begin(uint32_t baud)
Setup the serial interface.
+
const Humidistat_t & humidistat
+
const etl::span< const ThermistorReader, 4 > trs
+
unsigned long lastTime
Last time line was written (in millis)
+
const uint16_t interval
Logging interval (in millis)
+
double readTemp() const
Get the temperature of the thermistor.
+
SerialLogger< cHumidistat > serialLogger & humidistat
Definition main.cpp:84
+
ThermistorReader trs[]
Definition main.cpp:25
+
+
+ + + + diff --git a/SetpointProfileRunner_8cpp.html b/SetpointProfileRunner_8cpp.html new file mode 100644 index 0000000..92e04de --- /dev/null +++ b/SetpointProfileRunner_8cpp.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: src/SetpointProfileRunner.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SetpointProfileRunner.cpp File Reference
+
+
+
+Include dependency graph for SetpointProfileRunner.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/SetpointProfileRunner_8cpp__incl.map b/SetpointProfileRunner_8cpp__incl.map new file mode 100644 index 0000000..c71198a --- /dev/null +++ b/SetpointProfileRunner_8cpp__incl.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SetpointProfileRunner_8cpp__incl.md5 b/SetpointProfileRunner_8cpp__incl.md5 new file mode 100644 index 0000000..74629de --- /dev/null +++ b/SetpointProfileRunner_8cpp__incl.md5 @@ -0,0 +1 @@ +8db07fc335bec531882b1b7be3aeb774 \ No newline at end of file diff --git a/SetpointProfileRunner_8cpp__incl.svg b/SetpointProfileRunner_8cpp__incl.svg new file mode 100644 index 0000000..ab81ea7 --- /dev/null +++ b/SetpointProfileRunner_8cpp__incl.svg @@ -0,0 +1,219 @@ + + + + + + +src/SetpointProfileRunner.cpp + + +Node1 + + +src/SetpointProfileRunner.cpp + + + + + +Node2 + + +SetpointProfileRunner.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +Point.h + + + + + +Node2->Node4 + + + + + + + + +Node6 + + +control/Humidistat.h + + + + + +Node2->Node6 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +aliases.h + + + + + +Node6->Node7 + + + + + + + + +Node8 + + +Controller.h + + + + + +Node6->Node8 + + + + + + + + +Node10 + + +../EEPROMConfig.h + + + + + +Node6->Node10 + + + + + + + + +Node8->Node5 + + + + + + + + +Node9 + + +PID.h + + + + + +Node8->Node9 + + + + + + + + +Node8->Node10 + + + + + + + + +Node9->Node5 + + + + + + + + diff --git a/SetpointProfileRunner_8cpp_source.html b/SetpointProfileRunner_8cpp_source.html new file mode 100644 index 0000000..0adddef --- /dev/null +++ b/SetpointProfileRunner_8cpp_source.html @@ -0,0 +1,180 @@ + + + + + + + +Humidistat: src/SetpointProfileRunner.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SetpointProfileRunner.cpp
+
+
+Go to the documentation of this file.
+
2
+ +
5
+
+ +
7 if(!running) {
+
8 return;
+
9 }
+
10
+ +
12
+
13 if(millis() - timeStart > profile.back().time*1000) {
+
14 // Reached end of profile
+
15 running = false;
+
16 }
+
17}
+
+
18
+
+ +
20 timeStart = millis();
+ +
22}
+
+
23
+
+
24void SetpointProfileRunner::setProfile(const etl::span<const Point> &profile) {
+
25 this->profile = profile;
+
26}
+
+
27
+
+ +
29 return running;
+
30}
+
+
31
+
+ +
33 // Loop backwards over profile, returning the first (largest) index of the point whose time is less than runtime
+
34 for (size_t i = profile.size() - 1; i >= 0; i--) {
+
35 if(millis() - timeStart > profile[i].time*1000) {
+
36 return i;
+
37 }
+
38 }
+
39}
+
+ +
double sp
Setpoint.
Definition Controller.h:22
+
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
void update()
Run the profile (if running). Call this periodically.
+
void setProfile(const etl::span< const Point > &profile)
Set the profile.
+ + +
bool isRunning() const
Get the run state.
+ +
size_t getCurrentPoint() const
Get the index of the current Point in the profile.
+
void toggle()
Toggle the run state.
+
SetpointProfileRunner(Humidistat *humidistat)
Constructor.
+
etl::span< const Point > profile
+
SerialLogger< cHumidistat > serialLogger & humidistat
Definition main.cpp:84
+
+
+ + + + diff --git a/SetpointProfileRunner_8h.html b/SetpointProfileRunner_8h.html new file mode 100644 index 0000000..196a64a --- /dev/null +++ b/SetpointProfileRunner_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: src/SetpointProfileRunner.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SetpointProfileRunner.h File Reference
+
+
+
#include <etl/span.h>
+#include "Point.h"
+#include "control/Humidistat.h"
+
+Include dependency graph for SetpointProfileRunner.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SetpointProfileRunner
 'Runs' a setpoint profile. More...
 
+
+
+ + + + diff --git a/SetpointProfileRunner_8h.js b/SetpointProfileRunner_8h.js new file mode 100644 index 0000000..39bef56 --- /dev/null +++ b/SetpointProfileRunner_8h.js @@ -0,0 +1,4 @@ +var SetpointProfileRunner_8h = +[ + [ "SetpointProfileRunner", "classSetpointProfileRunner.html", "classSetpointProfileRunner" ] +]; \ No newline at end of file diff --git a/SetpointProfileRunner_8h__dep__incl.map b/SetpointProfileRunner_8h__dep__incl.map new file mode 100644 index 0000000..785f7ef --- /dev/null +++ b/SetpointProfileRunner_8h__dep__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/SetpointProfileRunner_8h__dep__incl.md5 b/SetpointProfileRunner_8h__dep__incl.md5 new file mode 100644 index 0000000..ec15f9f --- /dev/null +++ b/SetpointProfileRunner_8h__dep__incl.md5 @@ -0,0 +1 @@ +9471dbacafe5defd51403c029e01187d \ No newline at end of file diff --git a/SetpointProfileRunner_8h__dep__incl.svg b/SetpointProfileRunner_8h__dep__incl.svg new file mode 100644 index 0000000..d37d2b8 --- /dev/null +++ b/SetpointProfileRunner_8h__dep__incl.svg @@ -0,0 +1,75 @@ + + + + + + +src/SetpointProfileRunner.h + + +Node1 + + +src/SetpointProfileRunner.h + + + + + +Node2 + + +src/SetpointProfileRunner.cpp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/main.cpp + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node4 + + + + + + + + diff --git a/SetpointProfileRunner_8h__incl.map b/SetpointProfileRunner_8h__incl.map new file mode 100644 index 0000000..1c4fd2a --- /dev/null +++ b/SetpointProfileRunner_8h__incl.map @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SetpointProfileRunner_8h__incl.md5 b/SetpointProfileRunner_8h__incl.md5 new file mode 100644 index 0000000..766eb2b --- /dev/null +++ b/SetpointProfileRunner_8h__incl.md5 @@ -0,0 +1 @@ +586a53050003883218f099d70ce94539 \ No newline at end of file diff --git a/SetpointProfileRunner_8h__incl.svg b/SetpointProfileRunner_8h__incl.svg new file mode 100644 index 0000000..78df942 --- /dev/null +++ b/SetpointProfileRunner_8h__incl.svg @@ -0,0 +1,201 @@ + + + + + + +src/SetpointProfileRunner.h + + +Node1 + + +src/SetpointProfileRunner.h + + + + + +Node2 + + +etl/span.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Point.h + + + + + +Node1->Node3 + + + + + + + + +Node5 + + +control/Humidistat.h + + + + + +Node1->Node5 + + + + + + + + +Node3->Node2 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +aliases.h + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +Controller.h + + + + + +Node5->Node7 + + + + + + + + +Node9 + + +../EEPROMConfig.h + + + + + +Node5->Node9 + + + + + + + + +Node7->Node4 + + + + + + + + +Node8 + + +PID.h + + + + + +Node7->Node8 + + + + + + + + +Node7->Node9 + + + + + + + + +Node8->Node4 + + + + + + + + diff --git a/SetpointProfileRunner_8h_source.html b/SetpointProfileRunner_8h_source.html new file mode 100644 index 0000000..c3ce171 --- /dev/null +++ b/SetpointProfileRunner_8h_source.html @@ -0,0 +1,161 @@ + + + + + + + +Humidistat: src/SetpointProfileRunner.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SetpointProfileRunner.h
+
+
+Go to the documentation of this file.
1#ifndef FIRMWARE_SETPOINTPROFILERUNNER_H
+
2#define FIRMWARE_SETPOINTPROFILERUNNER_H
+
3
+
4#include <etl/span.h>
+
5
+
6#include "Point.h"
+ +
8
+
+ +
11private:
+ +
13 etl::span<const Point> profile;
+
14 uint32_t timeStart;
+
15 bool running = false;
+
16public:
+ +
20
+
22 void toggle();
+
23
+
26 void setProfile(const etl::span<const Point>& profile);
+
27
+
30 void update();
+
31
+
34 [[nodiscard]] bool isRunning() const;
+
35
+
38 [[nodiscard]] size_t getCurrentPoint() const;
+
39};
+
+
40
+
41
+
42#endif //FIRMWARE_SETPOINTPROFILERUNNER_H
+ + +
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
'Runs' a setpoint profile.
+
void update()
Run the profile (if running). Call this periodically.
+
void setProfile(const etl::span< const Point > &profile)
Set the profile.
+ + +
bool isRunning() const
Get the run state.
+ +
size_t getCurrentPoint() const
Get the index of the current Point in the profile.
+
void toggle()
Toggle the run state.
+
SetpointProfileRunner(Humidistat *humidistat)
Constructor.
+
etl::span< const Point > profile
+
+
+ + + + diff --git a/SingleHumidistat_8cpp.html b/SingleHumidistat_8cpp.html new file mode 100644 index 0000000..50371aa --- /dev/null +++ b/SingleHumidistat_8cpp.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: src/control/SingleHumidistat.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SingleHumidistat.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "SingleHumidistat.h"
+#include "imath.h"
+
+Include dependency graph for SingleHumidistat.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/SingleHumidistat_8cpp__incl.map b/SingleHumidistat_8cpp__incl.map new file mode 100644 index 0000000..7aba5d6 --- /dev/null +++ b/SingleHumidistat_8cpp__incl.map @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SingleHumidistat_8cpp__incl.md5 b/SingleHumidistat_8cpp__incl.md5 new file mode 100644 index 0000000..7d20d30 --- /dev/null +++ b/SingleHumidistat_8cpp__incl.md5 @@ -0,0 +1 @@ +8436ae30d77f85d43f148cff159afe3e \ No newline at end of file diff --git a/SingleHumidistat_8cpp__incl.svg b/SingleHumidistat_8cpp__incl.svg new file mode 100644 index 0000000..bf29a30 --- /dev/null +++ b/SingleHumidistat_8cpp__incl.svg @@ -0,0 +1,246 @@ + + + + + + +src/control/SingleHumidistat.cpp + + +Node1 + + +src/control/SingleHumidistat.cpp + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +SingleHumidistat.h + + + + + +Node1->Node3 + + + + + + + + +Node11 + + +imath.h + + + + + +Node1->Node11 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +etl/array.h + + + + + +Node3->Node5 + + + + + + + + +Node6 + + +aliases.h + + + + + +Node3->Node6 + + + + + + + + +Node7 + + +Humidistat.h + + + + + +Node3->Node7 + + + + + + + + +Node10 + + +../EEPROMConfig.h + + + + + +Node3->Node10 + + + + + + + + +Node7->Node6 + + + + + + + + +Node8 + + +Controller.h + + + + + +Node7->Node8 + + + + + + + + +Node7->Node10 + + + + + + + + +Node8->Node4 + + + + + + + + +Node9 + + +PID.h + + + + + +Node8->Node9 + + + + + + + + +Node8->Node10 + + + + + + + + +Node9->Node4 + + + + + + + + diff --git a/SingleHumidistat_8cpp_source.html b/SingleHumidistat_8cpp_source.html new file mode 100644 index 0000000..b69ceb4 --- /dev/null +++ b/SingleHumidistat_8cpp_source.html @@ -0,0 +1,166 @@ + + + + + + + +Humidistat: src/control/SingleHumidistat.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SingleHumidistat.cpp
+
+
+Go to the documentation of this file.
1#include <Arduino.h>
+
2
+
3#include "SingleHumidistat.h"
+
4#include "imath.h"
+
5
+
+
6SingleHumidistat::SingleHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::array<uint8_t, 2> pins_solenoid,
+
7 uint8_t pwmRes)
+
8 : Humidistat(cs, hs, cs->HC_Kp, cs->HC_Ki, cs->HC_Kd, cs->HC_Kf, cs->dt, cs->S_lowValue, 1),
+
9 pins_solenoid{pins_solenoid[0], pins_solenoid[1]}, pwmRes(pwmRes) {}
+
+
10
+
+ +
12 runCycle();
+
13
+
14 // Actuate solenoids (convert normalised double CV to integer PWM value)
+
15 analogWrite(pins_solenoid[0], static_cast<int>(cv * ipow(2, pwmRes)));
+
16 analogWrite(pins_solenoid[1], static_cast<int>((pid.cvMin + 1 - cv) * ipow(2, pwmRes)));
+
17}
+
+
18
+ + + +
const ConfigStore & cs
Definition Controller.h:14
+
double cv
Control variable.
Definition Controller.h:23
+
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
void runCycle()
Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
+
double cvMin
Definition PID.h:34
+
void setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt)
Set the gains and timestep.
Definition PID.cpp:59
+
SingleHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)
Constructor.
+
const uint8_t pwmRes
+ +
const uint8_t pins_solenoid[2]
+ + +
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
const uint8_t pwmRes
Definition main.cpp:44
+
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+ + +
double HC_Kp
Humidity controller PID parameters.
+ +
double S_lowValue
Minimum solenoid duty cycle (deadband)
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+
+
+ + + + diff --git a/SingleHumidistat_8h.html b/SingleHumidistat_8h.html new file mode 100644 index 0000000..b2900e0 --- /dev/null +++ b/SingleHumidistat_8h.html @@ -0,0 +1,141 @@ + + + + + + + +Humidistat: src/control/SingleHumidistat.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SingleHumidistat.h File Reference
+
+
+
#include <stdint.h>
+#include <etl/array.h>
+#include "aliases.h"
+#include "Humidistat.h"
+#include "EEPROMConfig.h"
+
+Include dependency graph for SingleHumidistat.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  SingleHumidistat
 Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and call update(). More...
 
+
+
+ + + + diff --git a/SingleHumidistat_8h.js b/SingleHumidistat_8h.js new file mode 100644 index 0000000..a6643bc --- /dev/null +++ b/SingleHumidistat_8h.js @@ -0,0 +1,4 @@ +var SingleHumidistat_8h = +[ + [ "SingleHumidistat", "classSingleHumidistat.html", "classSingleHumidistat" ] +]; \ No newline at end of file diff --git a/SingleHumidistat_8h__dep__incl.map b/SingleHumidistat_8h__dep__incl.map new file mode 100644 index 0000000..c21a86e --- /dev/null +++ b/SingleHumidistat_8h__dep__incl.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/SingleHumidistat_8h__dep__incl.md5 b/SingleHumidistat_8h__dep__incl.md5 new file mode 100644 index 0000000..2e80c8b --- /dev/null +++ b/SingleHumidistat_8h__dep__incl.md5 @@ -0,0 +1 @@ +a941375ceb3a8008d2a7bab45da77105 \ No newline at end of file diff --git a/SingleHumidistat_8h__dep__incl.svg b/SingleHumidistat_8h__dep__incl.svg new file mode 100644 index 0000000..bbea802 --- /dev/null +++ b/SingleHumidistat_8h__dep__incl.svg @@ -0,0 +1,129 @@ + + + + + + +src/control/SingleHumidistat.h + + +Node1 + + +src/control/SingleHumidistat.h + + + + + +Node2 + + +src/SerialLogger.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +src/control/SingleHumidistat.cpp + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/ui/CharDisplayUI.h + + + + + +Node1->Node5 + + + + + + + + +Node7 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node7 + + + + + + + + +Node3 + + +src/main.cpp + + + + + +Node2->Node3 + + + + + + + + +Node6 + + +src/ui/CharDisplayUI.cpp + + + + + +Node5->Node6 + + + + + + + + diff --git a/SingleHumidistat_8h__incl.map b/SingleHumidistat_8h__incl.map new file mode 100644 index 0000000..1c3095e --- /dev/null +++ b/SingleHumidistat_8h__incl.map @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/SingleHumidistat_8h__incl.md5 b/SingleHumidistat_8h__incl.md5 new file mode 100644 index 0000000..1b440ba --- /dev/null +++ b/SingleHumidistat_8h__incl.md5 @@ -0,0 +1 @@ +057782f03925d4914d9decf629fac80a \ No newline at end of file diff --git a/SingleHumidistat_8h__incl.svg b/SingleHumidistat_8h__incl.svg new file mode 100644 index 0000000..5569e8d --- /dev/null +++ b/SingleHumidistat_8h__incl.svg @@ -0,0 +1,192 @@ + + + + + + +src/control/SingleHumidistat.h + + +Node1 + + +src/control/SingleHumidistat.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/array.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +aliases.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +Humidistat.h + + + + + +Node1->Node5 + + + + + + + + +Node8 + + +../EEPROMConfig.h + + + + + +Node1->Node8 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6 + + +Controller.h + + + + + +Node5->Node6 + + + + + + + + +Node5->Node8 + + + + + + + + +Node6->Node2 + + + + + + + + +Node7 + + +PID.h + + + + + +Node6->Node7 + + + + + + + + +Node6->Node8 + + + + + + + + +Node7->Node2 + + + + + + + + diff --git a/SingleHumidistat_8h_source.html b/SingleHumidistat_8h_source.html new file mode 100644 index 0000000..13282cd --- /dev/null +++ b/SingleHumidistat_8h_source.html @@ -0,0 +1,154 @@ + + + + + + + +Humidistat: src/control/SingleHumidistat.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SingleHumidistat.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_SINGLEHUMIDISTAT_H
+
2#define HUMIDISTAT_SINGLEHUMIDISTAT_H
+
3
+
4#include <stdint.h>
+
5#include <etl/array.h>
+
6
+
7#include "aliases.h"
+
8#include "Humidistat.h"
+
9#include "EEPROMConfig.h"
+
10
+
+ +
14private:
+
15 const uint8_t pins_solenoid[2];
+
16 const uint8_t pwmRes;
+
17
+
18public:
+
24 SingleHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::array<uint8_t, 2> pins_solenoid, uint8_t pwmRes);
+
25
+
26 // Overridden from Controller
+
27 void update();
+ +
29};
+
+
30
+
31#endif //HUMIDISTAT_SINGLEHUMIDISTAT_H
+ + + +
const ConfigStore & cs
Definition Controller.h:14
+
Base class for a humidistat. Holds a reference to a HumiditySensor instance.
Definition Humidistat.h:10
+
HumiditySensor & hs
Definition Humidistat.h:12
+
Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and ca...
+
SingleHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)
Constructor.
+
const uint8_t pwmRes
+ +
const uint8_t pins_solenoid[2]
+ +
Config store containing variables, which can be stored in EEPROM.
Definition EEPROMConfig.h:7
+
+
+ + + + diff --git a/ThermistorReader_8cpp.html b/ThermistorReader_8cpp.html new file mode 100644 index 0000000..8319297 --- /dev/null +++ b/ThermistorReader_8cpp.html @@ -0,0 +1,124 @@ + + + + + + + +Humidistat: src/sensor/ThermistorReader.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ThermistorReader.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "ThermistorReader.h"
+
+Include dependency graph for ThermistorReader.cpp:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/ThermistorReader_8cpp__incl.map b/ThermistorReader_8cpp__incl.map new file mode 100644 index 0000000..a6c621c --- /dev/null +++ b/ThermistorReader_8cpp__incl.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/ThermistorReader_8cpp__incl.md5 b/ThermistorReader_8cpp__incl.md5 new file mode 100644 index 0000000..e7fee39 --- /dev/null +++ b/ThermistorReader_8cpp__incl.md5 @@ -0,0 +1 @@ +61abf8beaa4e6407022149c5a8b90796 \ No newline at end of file diff --git a/ThermistorReader_8cpp__incl.svg b/ThermistorReader_8cpp__incl.svg new file mode 100644 index 0000000..48cbf53 --- /dev/null +++ b/ThermistorReader_8cpp__incl.svg @@ -0,0 +1,75 @@ + + + + + + +src/sensor/ThermistorReader.cpp + + +Node1 + + +src/sensor/ThermistorReader.cpp + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ThermistorReader.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +stdint.h + + + + + +Node3->Node4 + + + + + + + + diff --git a/ThermistorReader_8cpp_source.html b/ThermistorReader_8cpp_source.html new file mode 100644 index 0000000..f85de2e --- /dev/null +++ b/ThermistorReader_8cpp_source.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: src/sensor/ThermistorReader.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ThermistorReader.cpp
+
+
+Go to the documentation of this file.
1#include <Arduino.h>
+
2#include "ThermistorReader.h"
+
3
+
4ThermistorReader::ThermistorReader(uint8_t pin) : pin(pin) {}
+
5
+
+ +
7 // Read temperature using reference 3.3V on A5 pin
+
8 double V_NTC = analogRead(pin) / static_cast<double>(analogRead(ref_pin));
+
9 return R_series * (1 / V_NTC - 1);
+
10}
+
+
11
+
+ +
13 return B / log(getThermistorResistance() / r_inf) - 273;
+
14}
+
+ +
const double r_inf
Thermistor's value of R_inf in the thermistor equation (Ohm)
+
double getThermistorResistance() const
Calculate the resistance of the thermistor in the voltage divider.
+
const double B
Thermistor's value of B in the thermistor equation (K)
+
double readTemp() const
Get the temperature of the thermistor.
+
const uint8_t pin
NTC pin number.
+
const double R_series
Resistance of R2 in voltage divider (Ohm)
+
const uint8_t ref_pin
Reference (high) voltage pin number.
+
ThermistorReader(uint8_t pin)
Constructor.
+
+
+ + + + diff --git a/ThermistorReader_8h.html b/ThermistorReader_8h.html new file mode 100644 index 0000000..146b689 --- /dev/null +++ b/ThermistorReader_8h.html @@ -0,0 +1,137 @@ + + + + + + + +Humidistat: src/sensor/ThermistorReader.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ThermistorReader.h File Reference
+
+
+
#include <stdint.h>
+
+Include dependency graph for ThermistorReader.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  ThermistorReader
 Driver for thermistor thermometers. More...
 
+
+
+ + + + diff --git a/ThermistorReader_8h.js b/ThermistorReader_8h.js new file mode 100644 index 0000000..6be01fa --- /dev/null +++ b/ThermistorReader_8h.js @@ -0,0 +1,4 @@ +var ThermistorReader_8h = +[ + [ "ThermistorReader", "classThermistorReader.html", "classThermistorReader" ] +]; \ No newline at end of file diff --git a/ThermistorReader_8h__dep__incl.map b/ThermistorReader_8h__dep__incl.map new file mode 100644 index 0000000..d484626 --- /dev/null +++ b/ThermistorReader_8h__dep__incl.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/ThermistorReader_8h__dep__incl.md5 b/ThermistorReader_8h__dep__incl.md5 new file mode 100644 index 0000000..cb9ccaa --- /dev/null +++ b/ThermistorReader_8h__dep__incl.md5 @@ -0,0 +1 @@ +aaa02a678f8d670f930a02f62a5a1e9a \ No newline at end of file diff --git a/ThermistorReader_8h__dep__incl.svg b/ThermistorReader_8h__dep__incl.svg new file mode 100644 index 0000000..92adc24 --- /dev/null +++ b/ThermistorReader_8h__dep__incl.svg @@ -0,0 +1,174 @@ + + + + + + +src/sensor/ThermistorReader.h + + +Node1 + + +src/sensor/ThermistorReader.h + + + + + +Node2 + + +src/SerialLogger.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/main.cpp + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +src/sensor/ThermistorReader.cpp + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/ui/ControllerUI.h + + + + + +Node1->Node5 + + + + + + + + +Node2->Node3 + + + + + + + + +Node6 + + +src/ui/CharDisplayUI.h + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +src/ui/ControllerUI.cpp + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +src/ui/CharDisplayUI.cpp + + + + + +Node6->Node7 + + + + + + + + diff --git a/ThermistorReader_8h__incl.map b/ThermistorReader_8h__incl.map new file mode 100644 index 0000000..e9a9c84 --- /dev/null +++ b/ThermistorReader_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/ThermistorReader_8h__incl.md5 b/ThermistorReader_8h__incl.md5 new file mode 100644 index 0000000..b78f915 --- /dev/null +++ b/ThermistorReader_8h__incl.md5 @@ -0,0 +1 @@ +04a7e8d63622b4693b78fbca4ad5b7d1 \ No newline at end of file diff --git a/ThermistorReader_8h__incl.svg b/ThermistorReader_8h__incl.svg new file mode 100644 index 0000000..5271f9c --- /dev/null +++ b/ThermistorReader_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/sensor/ThermistorReader.h + + +Node1 + + +src/sensor/ThermistorReader.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/ThermistorReader_8h_source.html b/ThermistorReader_8h_source.html new file mode 100644 index 0000000..4a2c0d7 --- /dev/null +++ b/ThermistorReader_8h_source.html @@ -0,0 +1,148 @@ + + + + + + + +Humidistat: src/sensor/ThermistorReader.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ThermistorReader.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_THERMISTORREADER_H
+
2#define HUMIDISTAT_THERMISTORREADER_H
+
3
+
4#include <stdint.h>
+
5
+
+ +
8private:
+
9 const uint8_t ref_pin = 5;
+
10 const uint8_t pin;
+
11 const double R_series = 10000;
+
12 const double B = 3950;
+
13 const double r_inf = 0.01752;
+
14
+
17 double getThermistorResistance() const;
+
18public:
+
21 explicit ThermistorReader(uint8_t pin);
+
22
+
25 double readTemp() const;
+
26};
+
+
27
+
28
+
29#endif //HUMIDISTAT_THERMISTORREADER_H
+
Driver for thermistor thermometers.
+
const double r_inf
Thermistor's value of R_inf in the thermistor equation (Ohm)
+
double getThermistorResistance() const
Calculate the resistance of the thermistor in the voltage divider.
+
const double B
Thermistor's value of B in the thermistor equation (K)
+
double readTemp() const
Get the temperature of the thermistor.
+
const uint8_t pin
NTC pin number.
+
const double R_series
Resistance of R2 in voltage divider (Ohm)
+
const uint8_t ref_pin
Reference (high) voltage pin number.
+
ThermistorReader(uint8_t pin)
Constructor.
+
+
+ + + + diff --git a/advanceEnum_8h.html b/advanceEnum_8h.html new file mode 100644 index 0000000..a6eb477 --- /dev/null +++ b/advanceEnum_8h.html @@ -0,0 +1,184 @@ + + + + + + + +Humidistat: src/advanceEnum.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
advanceEnum.h File Reference
+
+
+
#include <stdint.h>
+
+Include dependency graph for advanceEnum.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + +

+Functions

template<typename T >
void advanceEnum (T &e, int8_t n=1)
 Cycle through (advance) an enum.
 
+

Function Documentation

+ +

◆ advanceEnum()

+ +
+
+
+template<typename T >
+ + + + + + + + + + + +
void advanceEnum (T & e,
int8_t n = 1 )
+
+ +

Cycle through (advance) an enum.

+
Template Parameters
+ + +
TEnum type (should have _last as final element, equaling the last valid element)
+
+
+
Parameters
+ + + +
eEnum instance
nStep (can be negative)
+
+
+ +

Definition at line 11 of file advanceEnum.h.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ + + + diff --git a/advanceEnum_8h.js b/advanceEnum_8h.js new file mode 100644 index 0000000..72cd748 --- /dev/null +++ b/advanceEnum_8h.js @@ -0,0 +1,4 @@ +var advanceEnum_8h = +[ + [ "advanceEnum", "advanceEnum_8h.html#a4c6cbb4b80fa575a2819ca1d5e7cc1a2", null ] +]; \ No newline at end of file diff --git a/advanceEnum_8h__dep__incl.map b/advanceEnum_8h__dep__incl.map new file mode 100644 index 0000000..45b2c0c --- /dev/null +++ b/advanceEnum_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/advanceEnum_8h__dep__incl.md5 b/advanceEnum_8h__dep__incl.md5 new file mode 100644 index 0000000..784b83c --- /dev/null +++ b/advanceEnum_8h__dep__incl.md5 @@ -0,0 +1 @@ +886e52fd5a3ebfd8bd96f88702b1ea92 \ No newline at end of file diff --git a/advanceEnum_8h__dep__incl.svg b/advanceEnum_8h__dep__incl.svg new file mode 100644 index 0000000..6b19fda --- /dev/null +++ b/advanceEnum_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/advanceEnum.h + + +Node1 + + +src/advanceEnum.h + + + + + +Node2 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/advanceEnum_8h__incl.map b/advanceEnum_8h__incl.map new file mode 100644 index 0000000..567c319 --- /dev/null +++ b/advanceEnum_8h__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/advanceEnum_8h__incl.md5 b/advanceEnum_8h__incl.md5 new file mode 100644 index 0000000..ad4266f --- /dev/null +++ b/advanceEnum_8h__incl.md5 @@ -0,0 +1 @@ +e2dbe187cdb98984ea1c89f1e9428dd2 \ No newline at end of file diff --git a/advanceEnum_8h__incl.svg b/advanceEnum_8h__incl.svg new file mode 100644 index 0000000..d641278 --- /dev/null +++ b/advanceEnum_8h__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/advanceEnum.h + + +Node1 + + +src/advanceEnum.h + + + + + +Node2 + + +stdint.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.map b/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.map new file mode 100644 index 0000000..9cfd199 --- /dev/null +++ b/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.md5 b/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.md5 new file mode 100644 index 0000000..1f2a145 --- /dev/null +++ b/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.md5 @@ -0,0 +1 @@ +9dd15e38fe245c66e4fc91e3774df273 \ No newline at end of file diff --git a/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.svg b/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.svg new file mode 100644 index 0000000..18539ce --- /dev/null +++ b/advanceEnum_8h_a4c6cbb4b80fa575a2819ca1d5e7cc1a2_icgraph.svg @@ -0,0 +1,115 @@ + + + + + + +advanceEnum + + +Node1 + + +advanceEnum + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::handleInputInfo + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2->Node3 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5->Node3 + + + + + + + + diff --git a/advanceEnum_8h_source.html b/advanceEnum_8h_source.html new file mode 100644 index 0000000..47c0476 --- /dev/null +++ b/advanceEnum_8h_source.html @@ -0,0 +1,129 @@ + + + + + + + +Humidistat: src/advanceEnum.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
advanceEnum.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_ADVANCEENUM_H
+
2#define HUMIDISTAT_ADVANCEENUM_H
+
3
+
4#include <stdint.h>
+
5
+
10template <typename T>
+
+
11void advanceEnum(T &e, int8_t n = 1) {
+
12 e = static_cast<T>((static_cast<typename std::underlying_type<T>::type>(e) + n) % (static_cast<typename std::underlying_type<T>::type>(T::_last) + 1));
+
13}
+
+
14
+
15#endif //HUMIDISTAT_ADVANCEENUM_H
+
void advanceEnum(T &e, int8_t n=1)
Cycle through (advance) an enum.
Definition advanceEnum.h:11
+
+
+ + + + diff --git a/aliases_8h.html b/aliases_8h.html new file mode 100644 index 0000000..1017899 --- /dev/null +++ b/aliases_8h.html @@ -0,0 +1,122 @@ + + + + + + + +Humidistat: src/aliases.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
aliases.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/aliases_8h__dep__incl.map b/aliases_8h__dep__incl.map new file mode 100644 index 0000000..ba06848 --- /dev/null +++ b/aliases_8h__dep__incl.map @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aliases_8h__dep__incl.md5 b/aliases_8h__dep__incl.md5 new file mode 100644 index 0000000..2b40b80 --- /dev/null +++ b/aliases_8h__dep__incl.md5 @@ -0,0 +1 @@ +8ace073ecd73bec1ce3f3f5becea96df \ No newline at end of file diff --git a/aliases_8h__dep__incl.svg b/aliases_8h__dep__incl.svg new file mode 100644 index 0000000..040124d --- /dev/null +++ b/aliases_8h__dep__incl.svg @@ -0,0 +1,417 @@ + + + + + + +src/aliases.h + + +Node1 + + +src/aliases.h + + + + + +Node2 + + +src/control/CascadeHumidistat.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +src/main.cpp + + + + + +Node1->Node4 + + + + + + + + +Node7 + + +src/control/Humidistat.h + + + + + +Node1->Node7 + + + + + + + + +Node11 + + +src/control/SingleHumidistat.h + + + + + +Node1->Node11 + + + + + + + + +Node15 + + +src/input/ButtonReader.h + + + + + +Node1->Node15 + + + + + + + + +Node3 + + +src/SerialLogger.h + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +src/control/CascadeHumidistat.cpp + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node2->Node6 + + + + + + + + +Node3->Node4 + + + + + + + + +Node7->Node2 + + + + + + + + +Node8 + + +src/SetpointProfileRunner.h + + + + + +Node7->Node8 + + + + + + + + +Node10 + + +src/control/Humidistat.cpp + + + + + +Node7->Node10 + + + + + + + + +Node7->Node11 + + + + + + + + +Node8->Node4 + + + + + + + + +Node8->Node6 + + + + + + + + +Node9 + + +src/SetpointProfileRunner.cpp + + + + + +Node8->Node9 + + + + + + + + +Node11->Node3 + + + + + + + + +Node11->Node6 + + + + + + + + +Node12 + + +src/control/SingleHumidistat.cpp + + + + + +Node11->Node12 + + + + + + + + +Node13 + + +src/ui/CharDisplayUI.h + + + + + +Node11->Node13 + + + + + + + + +Node14 + + +src/ui/CharDisplayUI.cpp + + + + + +Node13->Node14 + + + + + + + + +Node15->Node4 + + + + + + + + +Node16 + + +src/input/ButtonReader.cpp + + + + + +Node15->Node16 + + + + + + + + +Node17 + + +src/ui/ControllerUI.h + + + + + +Node15->Node17 + + + + + + + + +Node17->Node6 + + + + + + + + +Node17->Node13 + + + + + + + + +Node18 + + +src/ui/ControllerUI.cpp + + + + + +Node17->Node18 + + + + + + + + diff --git a/aliases_8h_source.html b/aliases_8h_source.html new file mode 100644 index 0000000..c6e0768 --- /dev/null +++ b/aliases_8h_source.html @@ -0,0 +1,150 @@ + + + + + + + +Humidistat: src/aliases.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
aliases.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_ALIASES_H
+
2#define HUMIDISTAT_ALIASES_H
+
3
+
4#include CONFIG_HEADER
+
5
+
8
+
9// Humidity sensor
+
10#ifdef HUMIDISTAT_DHT
+ +
12using HumiditySensor = DHTHumiditySensor;
+
13#endif
+
14#ifdef HUMIDISTAT_SHT
+ +
16using HumiditySensor = SHTHumiditySensor;
+
17#endif
+
18
+
19// Input
+
20#ifdef HUMIDISTAT_INPUT_KS0256
+ +
22using VoltLadder = Ks0256VoltLadder;
+
23#endif
+
24#ifdef HUMIDISTAT_INPUT_KS0466
+ +
26using VoltLadder = Ks0466VoltLadder;
+
27#endif
+
28
+
29#endif //HUMIDISTAT_ALIASES_H
+ + + + +
Implementation of the HumiditySensor interface for the DHT22/AM2302 sensor.
+
Implementation of the VoltLadder interface for the Keyestudio Ks0256 keypad.
+
Implementation of the VoltLadder interface for the Keyestudio Ks0466 keypad.
+
Implementation of the HumiditySensor interface for the Sensirion SHT85 sensor.
+
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..c4c3ce8 --- /dev/null +++ b/annotated.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: Class List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + +
 CButtonReaderRead button state from a voltage ladder-style keypad
 CCascadeHumidistatControl humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers, which drive a solenoid valve each. Adjust the public setpoint variable and call update()
 CCharDisplayUITUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display. Displays current mode, PV, SP, and CV the first line of the display, and temperatures on the second line. Use keypad to adjust setpoint (UP/DOWN for fine, LEFT/RIGHT for coarse)
 CConfigParA class for storing references to variables of various types (uint8_t, uint16_t, or double)
 CVar
 CConfigStoreConfig store containing variables, which can be stored in EEPROM
 CControllerBase class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance
 CControllerUIUser interface (display and input) for humidistat. Hold references to ButtonReader for keypad input, and Humidistat for updating the humidity setpoint
 CDHTHumiditySensorImplementation of the HumiditySensor interface for the DHT22/AM2302 sensor
 CEEPROMConfigLoad/save an (internal) ConfigStore in EEPROM
 CFlowControllerControls flow. Holds a reference to a FlowSensor instance
 CFlowSensorRead flow rate using a Omron D6F-P0010 MEMS flow sensor
 CGraphicalDisplayUITUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to display, an EEPROMConfig instance to edit the config, and to a Humidistat instance to show/edit its state
 CHumidistatBase class for a humidistat. Holds a reference to a HumiditySensor instance
 CKs0256VoltLadderImplementation of the VoltLadder interface for the Keyestudio Ks0256 keypad
 CKs0466VoltLadderImplementation of the VoltLadder interface for the Keyestudio Ks0466 keypad
 CPIDPID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Measurement, anti-windup through conditional integration, bumpless transfer, and feed-forward
 CPointPoint: a vector of a time and setpoint value
 CSerialLoggerLogs humidistat data over serial
 CSetpointProfileRunner'Runs' a setpoint profile
 CSHTHumiditySensorImplementation of the HumiditySensor interface for the Sensirion SHT85 sensor
 CSingleHumidistatControl humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and call update()
 CSPProfileSetpoint profile: a label and a span over Points
 CThermistorReaderDriver for thermistor thermometers
+
+
+
+ + + + diff --git a/annotated_dup.js b/annotated_dup.js new file mode 100644 index 0000000..c9381bf --- /dev/null +++ b/annotated_dup.js @@ -0,0 +1,26 @@ +var annotated_dup = +[ + [ "ButtonReader", "classButtonReader.html", "classButtonReader" ], + [ "CascadeHumidistat", "classCascadeHumidistat.html", "classCascadeHumidistat" ], + [ "CharDisplayUI", "classCharDisplayUI.html", "classCharDisplayUI" ], + [ "ConfigPar", "classConfigPar.html", "classConfigPar" ], + [ "ConfigStore", "structConfigStore.html", "structConfigStore" ], + [ "Controller", "classController.html", "classController" ], + [ "ControllerUI", "classControllerUI.html", "classControllerUI" ], + [ "DHTHumiditySensor", "classDHTHumiditySensor.html", "classDHTHumiditySensor" ], + [ "EEPROMConfig", "classEEPROMConfig.html", "classEEPROMConfig" ], + [ "FlowController", "classFlowController.html", "classFlowController" ], + [ "FlowSensor", "classFlowSensor.html", "classFlowSensor" ], + [ "GraphicalDisplayUI", "classGraphicalDisplayUI.html", "classGraphicalDisplayUI" ], + [ "Humidistat", "classHumidistat.html", "classHumidistat" ], + [ "Ks0256VoltLadder", "classKs0256VoltLadder.html", "classKs0256VoltLadder" ], + [ "Ks0466VoltLadder", "classKs0466VoltLadder.html", "classKs0466VoltLadder" ], + [ "PID", "classPID.html", "classPID" ], + [ "Point", "structPoint.html", "structPoint" ], + [ "SerialLogger", "classSerialLogger.html", "classSerialLogger" ], + [ "SetpointProfileRunner", "classSetpointProfileRunner.html", "classSetpointProfileRunner" ], + [ "SHTHumiditySensor", "classSHTHumiditySensor.html", "classSHTHumiditySensor" ], + [ "SingleHumidistat", "classSingleHumidistat.html", "classSingleHumidistat" ], + [ "SPProfile", "structSPProfile.html", "structSPProfile" ], + [ "ThermistorReader", "classThermistorReader.html", "classThermistorReader" ] +]; \ No newline at end of file diff --git a/asprintf_8h.html b/asprintf_8h.html new file mode 100644 index 0000000..b8799a2 --- /dev/null +++ b/asprintf_8h.html @@ -0,0 +1,180 @@ + + + + + + + +Humidistat: src/asprintf.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
asprintf.h File Reference
+
+
+
#include <stdlib.h>
+#include <stdio.h>
+
+Include dependency graph for asprintf.h:
+
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + +

+Functions

template<typename... T>
char * asprintf (const char *fmt, T... args)
 Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it immediately afterwards.
 
+

Function Documentation

+ +

◆ asprintf()

+ +
+
+
+template<typename... T>
+ + + + + + + + + + + +
char * asprintf (const char * fmt,
T... args )
+
+ +

Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it immediately afterwards.

+
Parameters
+ + + +
fmtFormat string
argsArguments specifying data to print
+
+
+
Returns
Pointer to char string
+ +

Definition at line 13 of file asprintf.h.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ + + + diff --git a/asprintf_8h.js b/asprintf_8h.js new file mode 100644 index 0000000..ec92fa3 --- /dev/null +++ b/asprintf_8h.js @@ -0,0 +1,4 @@ +var asprintf_8h = +[ + [ "asprintf", "asprintf_8h.html#a8e2a40be4816c793857112b1960e912b", null ] +]; \ No newline at end of file diff --git a/asprintf_8h__dep__incl.map b/asprintf_8h__dep__incl.map new file mode 100644 index 0000000..39d6f99 --- /dev/null +++ b/asprintf_8h__dep__incl.map @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/asprintf_8h__dep__incl.md5 b/asprintf_8h__dep__incl.md5 new file mode 100644 index 0000000..b13fd85 --- /dev/null +++ b/asprintf_8h__dep__incl.md5 @@ -0,0 +1 @@ +ca19101535185c453fbe3488a8cfb3be \ No newline at end of file diff --git a/asprintf_8h__dep__incl.svg b/asprintf_8h__dep__incl.svg new file mode 100644 index 0000000..ff38f7e --- /dev/null +++ b/asprintf_8h__dep__incl.svg @@ -0,0 +1,165 @@ + + + + + + +src/asprintf.h + + +Node1 + + +src/asprintf.h + + + + + +Node2 + + +src/SerialLogger.h + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +src/ui/ConfigPar.cpp + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +src/ui/ControllerUI.h + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +src/main.cpp + + + + + +Node2->Node3 + + + + + + + + +Node6 + + +src/ui/CharDisplayUI.h + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +src/ui/ControllerUI.cpp + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +src/ui/CharDisplayUI.cpp + + + + + +Node6->Node7 + + + + + + + + diff --git a/asprintf_8h__incl.map b/asprintf_8h__incl.map new file mode 100644 index 0000000..cf523e4 --- /dev/null +++ b/asprintf_8h__incl.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/asprintf_8h__incl.md5 b/asprintf_8h__incl.md5 new file mode 100644 index 0000000..82ba93b --- /dev/null +++ b/asprintf_8h__incl.md5 @@ -0,0 +1 @@ +5f3c6bb91526e43182e4a2ad2ea76c2d \ No newline at end of file diff --git a/asprintf_8h__incl.svg b/asprintf_8h__incl.svg new file mode 100644 index 0000000..0c28473 --- /dev/null +++ b/asprintf_8h__incl.svg @@ -0,0 +1,57 @@ + + + + + + +src/asprintf.h + + +Node1 + + +src/asprintf.h + + + + + +Node2 + + +stdlib.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +stdio.h + + + + + +Node1->Node3 + + + + + + + + diff --git a/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.map b/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.map new file mode 100644 index 0000000..f2a1c02 --- /dev/null +++ b/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.md5 b/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.md5 new file mode 100644 index 0000000..6371114 --- /dev/null +++ b/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.md5 @@ -0,0 +1 @@ +28d481a4073285120f5c33c9e7bdf577 \ No newline at end of file diff --git a/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.svg b/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.svg new file mode 100644 index 0000000..d085487 --- /dev/null +++ b/asprintf_8h_a8e2a40be4816c793857112b1960e912b_icgraph.svg @@ -0,0 +1,241 @@ + + + + + + +asprintf + + +Node1 + + +asprintf + + + + + +Node2 + + +ConfigPar::asprint + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +CharDisplayUI::draw + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +SerialLogger::log + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +ControllerUI::printf + + + + + +Node1->Node7 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::draw + + + + + +Node3->Node4 + + + + + + + + +Node7->Node5 + + + + + + + + +Node8 + + +CharDisplayUI::drawInfo + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node7->Node9 + + + + + + + + +Node10 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node7->Node10 + + + + + + + + +Node11 + + +ControllerUI::printNTC + + + + + +Node7->Node11 + + + + + + + + +Node10->Node4 + + + + + + + + +Node11->Node5 + + + + + + + + +Node11->Node10 + + + + + + + + diff --git a/asprintf_8h_source.html b/asprintf_8h_source.html new file mode 100644 index 0000000..e0d3315 --- /dev/null +++ b/asprintf_8h_source.html @@ -0,0 +1,133 @@ + + + + + + + +Humidistat: src/asprintf.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
asprintf.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_ASPRINTF_H
+
2#define HUMIDISTAT_ASPRINTF_H
+
3
+
4#include <stdlib.h>
+
5#include <stdio.h>
+
6
+
12template <typename... T>
+
+
13char * asprintf(const char *fmt, T... args) {
+
14 size_t len = snprintf(nullptr, 0, fmt, args...);
+
15 char *buf = new char [len+1];
+
16 sprintf(buf, fmt, args...);
+
17 return buf;
+
18}
+
+
19
+
20#endif //HUMIDISTAT_ASPRINTF_H
+
char * asprintf(const char *fmt, T... args)
Print formatted data to string. Automatically allocates string on the heap. Make sure to delete it im...
Definition asprintf.h:13
+
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/bc_s.png differ diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 0000000..31ca888 Binary files /dev/null and b/bc_sd.png differ diff --git a/classButtonReader-members.html b/classButtonReader-members.html new file mode 100644 index 0000000..490d796 --- /dev/null +++ b/classButtonReader-members.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ButtonReader Member List
+
+
+ +

This is the complete list of members for ButtonReader, including all inherited members.

+ + + + + + + + + +
ButtonReader(uint8_t pin_btn, const VoltLadder *voltLadder)ButtonReaderexplicit
getPressedFor() constButtonReader
isPressed() constButtonReader
lastStateButtonReaderprivate
pin_btnButtonReaderprivate
pressedSinceButtonReaderprivate
sample()ButtonReader
voltLadderButtonReaderprivate
+
+ + + + diff --git a/classButtonReader.html b/classButtonReader.html new file mode 100644 index 0000000..16cccec --- /dev/null +++ b/classButtonReader.html @@ -0,0 +1,390 @@ + + + + + + + +Humidistat: ButtonReader Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ButtonReader Class Reference
+
+
+ +

Read button state from a voltage ladder-style keypad. + More...

+ +

#include <ButtonReader.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

 ButtonReader (uint8_t pin_btn, const VoltLadder *voltLadder)
 Constructor.
 
void sample ()
 Sample the button signal. Call this in the main loop.
 
Buttons isPressed () const
 Get the button state.
 
uint32_t getPressedFor () const
 Get the duration the key has been pressed. This can be used for debouncing using a stable interval.
 
+ + + + + + + + + + + + + +

+Private Attributes

const VoltLadder & voltLadder
 Reference to a voltLadder instance.
 
uint8_t pin_btn
 Pin corresponding to the keypad.
 
Buttons lastState = Buttons::NONE
 Last sampled state of the keypad.
 
unsigned long pressedSince = 0
 Time of the start of the keypress (in micros)
 
+

Detailed Description

+

Read button state from a voltage ladder-style keypad.

+ +

Definition at line 10 of file ButtonReader.h.

+

Constructor & Destructor Documentation

+ +

◆ ButtonReader()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
ButtonReader::ButtonReader (uint8_t pin_btn,
const VoltLadder * voltLadder )
+
+explicit
+
+ +

Constructor.

+
Parameters
+ + + +
pin_btnPin corresponding to the keypad
voltLadderPointer to VoltLadder instance
+
+
+ +

Definition at line 4 of file ButtonReader.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getPressedFor()

+ +
+
+ + + + + + + +
uint32_t ButtonReader::getPressedFor () const
+
+ +

Get the duration the key has been pressed. This can be used for debouncing using a stable interval.

+
Returns
keypress duration (in micros)
+ +

Definition at line 18 of file ButtonReader.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ isPressed()

+ +
+
+ + + + + + + +
Buttons ButtonReader::isPressed () const
+
+ +

Get the button state.

+
Returns
instance of Buttons corresponding to the currently pressed button
+ +

Definition at line 14 of file ButtonReader.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ sample()

+ +
+
+ + + + + + + +
void ButtonReader::sample ()
+
+ +

Sample the button signal. Call this in the main loop.

+ +

Definition at line 6 of file ButtonReader.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ lastState

+ +
+
+ + + + + +
+ + + + +
Buttons ButtonReader::lastState = Buttons::NONE
+
+private
+
+ +

Last sampled state of the keypad.

+ +

Definition at line 15 of file ButtonReader.h.

+ +
+
+ +

◆ pin_btn

+ +
+
+ + + + + +
+ + + + +
uint8_t ButtonReader::pin_btn
+
+private
+
+ +

Pin corresponding to the keypad.

+ +

Definition at line 13 of file ButtonReader.h.

+ +
+
+ +

◆ pressedSince

+ +
+
+ + + + + +
+ + + + +
unsigned long ButtonReader::pressedSince = 0
+
+private
+
+ +

Time of the start of the keypress (in micros)

+ +

Definition at line 16 of file ButtonReader.h.

+ +
+
+ +

◆ voltLadder

+ +
+
+ + + + + +
+ + + + +
const VoltLadder& ButtonReader::voltLadder
+
+private
+
+ +

Reference to a voltLadder instance.

+ +

Definition at line 12 of file ButtonReader.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classButtonReader.js b/classButtonReader.js new file mode 100644 index 0000000..8ef2e27 --- /dev/null +++ b/classButtonReader.js @@ -0,0 +1,11 @@ +var classButtonReader = +[ + [ "ButtonReader", "classButtonReader.html#a4a760bc3e3910b187da66283e43db72a", null ], + [ "getPressedFor", "classButtonReader.html#a2e169071482d9544ae92156fc5c0d087", null ], + [ "isPressed", "classButtonReader.html#a3ced9ddb05791cb1b9d29175f39d91fd", null ], + [ "sample", "classButtonReader.html#ab1b6d6805373ba677510075fa2aaf013", null ], + [ "lastState", "classButtonReader.html#aed2de00bad4bb57ec073b99532bb660b", null ], + [ "pin_btn", "classButtonReader.html#a25f7ebb6a86ac2fe7036ea41a63fccb9", null ], + [ "pressedSince", "classButtonReader.html#a86de0ab4d47231844c86c7ce38a4bea2", null ], + [ "voltLadder", "classButtonReader.html#add104c458e6b8a49946537ae9f079b08", null ] +]; \ No newline at end of file diff --git a/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.map b/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.map new file mode 100644 index 0000000..ba46709 --- /dev/null +++ b/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.md5 b/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.md5 new file mode 100644 index 0000000..c00a8a1 --- /dev/null +++ b/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.md5 @@ -0,0 +1 @@ +ee03b7cf61be082c35c2955be5b87551 \ No newline at end of file diff --git a/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.svg b/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.svg new file mode 100644 index 0000000..c1e3c79 --- /dev/null +++ b/classButtonReader_a2e169071482d9544ae92156fc5c0d087_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ButtonReader::getPressedFor + + +Node1 + + +ButtonReader::getPressedFor + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.map b/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.map new file mode 100644 index 0000000..7dc70d7 --- /dev/null +++ b/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.md5 b/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.md5 new file mode 100644 index 0000000..6b274f2 --- /dev/null +++ b/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.md5 @@ -0,0 +1 @@ +c3e5352da10b9510c656a0742ef8d901 \ No newline at end of file diff --git a/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.svg b/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.svg new file mode 100644 index 0000000..416cd8e --- /dev/null +++ b/classButtonReader_a3ced9ddb05791cb1b9d29175f39d91fd_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ButtonReader::isPressed + + +Node1 + + +ButtonReader::isPressed + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.map b/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.map new file mode 100644 index 0000000..22f2476 --- /dev/null +++ b/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.md5 b/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.md5 new file mode 100644 index 0000000..6580d71 --- /dev/null +++ b/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.md5 @@ -0,0 +1 @@ +4b7ec1e570b461892d9d8f17eb8dab27 \ No newline at end of file diff --git a/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.svg b/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.svg new file mode 100644 index 0000000..79fa877 --- /dev/null +++ b/classButtonReader_ab1b6d6805373ba677510075fa2aaf013_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ButtonReader::sample + + +Node1 + + +ButtonReader::sample + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + diff --git a/classCascadeHumidistat-members.html b/classCascadeHumidistat-members.html new file mode 100644 index 0000000..dc1170e --- /dev/null +++ b/classCascadeHumidistat-members.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CascadeHumidistat Member List
+
+
+ +

This is the complete list of members for CascadeHumidistat, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
activeController
CascadeHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::span< const FlowSensor, 2 > flowSensors, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)CascadeHumidistat
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)Controller
csControllerprotected
cvController
fcsCascadeHumidistatprivate
getConfigStore()Controller
getCvMax() constHumidistat
getCvMin() constHumidistat
getHumidity() constHumidistat
getInner(uint8_t n) constCascadeHumidistat
getTemperature() constHumidistat
getTerms(double &pTerm, double &iTerm, double &dTerm) constController
hsHumidistatprotected
Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)Humidistat
pidControllerprotected
pvController
runCycle()Humidistatprotected
sensorLastReadControllerprotected
spController
update()CascadeHumidistat
updatePIDParameters()CascadeHumidistat
+
+ + + + diff --git a/classCascadeHumidistat.html b/classCascadeHumidistat.html new file mode 100644 index 0000000..1b51a21 --- /dev/null +++ b/classCascadeHumidistat.html @@ -0,0 +1,381 @@ + + + + + + + +Humidistat: CascadeHumidistat Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
CascadeHumidistat Class Reference
+
+
+ +

Control humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers, which drive a solenoid valve each. Adjust the public setpoint variable and call update(). + More...

+ +

#include <CascadeHumidistat.h>

+
+Inheritance diagram for CascadeHumidistat:
+
+
+
[legend]
+
+Collaboration diagram for CascadeHumidistat:
+
+
+
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 CascadeHumidistat (HumiditySensor *hs, const ConfigStore *cs, etl::span< const FlowSensor, 2 > flowSensors, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)
 Constructor.
 
const FlowControllergetInner (uint8_t n) const
 Get a pointer to a inner FlowController instance.
 
void update ()
 
void updatePIDParameters ()
 
- Public Member Functions inherited from Humidistat
 Humidistat (const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)
 Constructor.
 
double getHumidity () const
 Read the humidity.
 
double getTemperature () const
 Read the temperature.
 
double getCvMin () const
 
double getCvMax () const
 
- Public Member Functions inherited from Controller
 Controller (const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
 Constructor.
 
void getTerms (double &pTerm, double &iTerm, double &dTerm) const
 Get the three PID terms by reference.
 
void update ()
 Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.
 
void updatePIDParameters ()
 Update the PID parameters from the configStore.
 
const ConfigStoregetConfigStore ()
 Get a pointer to the ConfigStore instance.
 
+ + + +

+Private Attributes

FlowController fcs [2]
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from Controller
bool active = false
 
double pv = 0
 Process variable.
 
double sp
 Setpoint.
 
double cv
 Control variable.
 
- Protected Member Functions inherited from Humidistat
void runCycle ()
 Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
 
- Protected Attributes inherited from Humidistat
HumiditySensor & hs
 
- Protected Attributes inherited from Controller
PID pid
 
const ConfigStorecs
 
unsigned long sensorLastRead = 0
 
+

Detailed Description

+

Control humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers, which drive a solenoid valve each. Adjust the public setpoint variable and call update().

+ +

Definition at line 15 of file CascadeHumidistat.h.

+

Constructor & Destructor Documentation

+ +

◆ CascadeHumidistat()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
CascadeHumidistat::CascadeHumidistat (HumiditySensor * hs,
const ConfigStore * cs,
etl::span< const FlowSensor, 2 > flowSensors,
etl::array< uint8_t, 2 > pins_solenoid,
uint8_t pwmRes )
+
+ +

Constructor.

+
Parameters
+ + + + + + +
hsPointer to a HumiditySensor instance
csPointer to a ConfigStore instance
flowSensorsSpan over 2 FlowSensor instances
pins_solenoidArray of 2 integers corresponding to the solenoid pins
pwmResPWM resolution (bits)
+
+
+ +

Definition at line 3 of file CascadeHumidistat.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getInner()

+ +
+
+ + + + + +
+ + + + + + + +
const FlowController * CascadeHumidistat::getInner (uint8_t n) const
+
+nodiscard
+
+ +

Get a pointer to a inner FlowController instance.

+
Parameters
+ + +
nthe index of the FlowController (0 or 1)
+
+
+
Returns
pointer to the FlowController instance.
+ +

Definition at line 24 of file CascadeHumidistat.cpp.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + +
void CascadeHumidistat::update ()
+
+ +

Definition at line 13 of file CascadeHumidistat.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ updatePIDParameters()

+ +
+
+ + + + + + + +
void CascadeHumidistat::updatePIDParameters ()
+
+ +

Definition at line 28 of file CascadeHumidistat.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ fcs

+ +
+
+ + + + + +
+ + + + +
FlowController CascadeHumidistat::fcs[2]
+
+private
+
+ +

Definition at line 17 of file CascadeHumidistat.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classCascadeHumidistat.js b/classCascadeHumidistat.js new file mode 100644 index 0000000..edc6512 --- /dev/null +++ b/classCascadeHumidistat.js @@ -0,0 +1,8 @@ +var classCascadeHumidistat = +[ + [ "CascadeHumidistat", "classCascadeHumidistat.html#aba1e29f588bbd230605a0220df3de162", null ], + [ "getInner", "classCascadeHumidistat.html#a43b2ec8732d8204ea3ac6b41001deaa9", null ], + [ "update", "classCascadeHumidistat.html#a5a4f6ad4f30f5f033462af46d47cf959", null ], + [ "updatePIDParameters", "classCascadeHumidistat.html#ad3b4c342c985955ba465a1ee85249eee", null ], + [ "fcs", "classCascadeHumidistat.html#acf6b5ee72f4a9ed3b14438ba4452c6ca", null ] +]; \ No newline at end of file diff --git a/classCascadeHumidistat__coll__graph.map b/classCascadeHumidistat__coll__graph.map new file mode 100644 index 0000000..7c67e7c --- /dev/null +++ b/classCascadeHumidistat__coll__graph.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/classCascadeHumidistat__coll__graph.md5 b/classCascadeHumidistat__coll__graph.md5 new file mode 100644 index 0000000..172fa81 --- /dev/null +++ b/classCascadeHumidistat__coll__graph.md5 @@ -0,0 +1 @@ +d1a03589d2b749ba02f0e94d65f45399 \ No newline at end of file diff --git a/classCascadeHumidistat__coll__graph.svg b/classCascadeHumidistat__coll__graph.svg new file mode 100644 index 0000000..9225bff --- /dev/null +++ b/classCascadeHumidistat__coll__graph.svg @@ -0,0 +1,142 @@ + + + + + + +CascadeHumidistat + + +Node1 + + +CascadeHumidistat + + + + + +Node2 + + +Humidistat + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +Controller + + + + + +Node3->Node2 + + + + + + + + +Node6 + + +FlowController + + + + + +Node3->Node6 + + + + + + + + +Node4 + + +PID + + + + + +Node4->Node3 + + + + + + pid + + + +Node5 + + +ConfigStore + + + + + +Node5->Node3 + + + + + + cs + + + +Node6->Node1 + + + + + + fcs + + + +Node7 + + +FlowSensor + + + + + +Node7->Node6 + + + + + + fs + + + diff --git a/classCascadeHumidistat__inherit__graph.map b/classCascadeHumidistat__inherit__graph.map new file mode 100644 index 0000000..a6f21e0 --- /dev/null +++ b/classCascadeHumidistat__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classCascadeHumidistat__inherit__graph.md5 b/classCascadeHumidistat__inherit__graph.md5 new file mode 100644 index 0000000..6f2f845 --- /dev/null +++ b/classCascadeHumidistat__inherit__graph.md5 @@ -0,0 +1 @@ +b9fa971d9cc0fb6518b64d18c818db0b \ No newline at end of file diff --git a/classCascadeHumidistat__inherit__graph.svg b/classCascadeHumidistat__inherit__graph.svg new file mode 100644 index 0000000..7738331 --- /dev/null +++ b/classCascadeHumidistat__inherit__graph.svg @@ -0,0 +1,57 @@ + + + + + + +CascadeHumidistat + + +Node1 + + +CascadeHumidistat + + + + + +Node2 + + +Humidistat + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +Controller + + + + + +Node3->Node2 + + + + + + + + diff --git a/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.map b/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.map new file mode 100644 index 0000000..4e26a30 --- /dev/null +++ b/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.map @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.md5 b/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.md5 new file mode 100644 index 0000000..fdf2842 --- /dev/null +++ b/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.md5 @@ -0,0 +1 @@ +8582881338b34b6cace7b0ab7c1d9da8 \ No newline at end of file diff --git a/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.svg b/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.svg new file mode 100644 index 0000000..55be21f --- /dev/null +++ b/classCascadeHumidistat_a5a4f6ad4f30f5f033462af46d47cf959_cgraph.svg @@ -0,0 +1,202 @@ + + + + + + +CascadeHumidistat::update + + +Node1 + + +CascadeHumidistat:: +update + + + + + +Node2 + + +Humidistat::runCycle + + + + + +Node1->Node2 + + + + + + + + +Node7 + + +FlowController::update + + + + + +Node1->Node7 + + + + + + + + +Node3 + + +PID::compute + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +PID::setAuto + + + + + +Node2->Node5 + + + + + + + + +Node4 + + +PID::clip + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +PID::init + + + + + +Node5->Node6 + + + + + + + + +Node7->Node3 + + + + + + + + +Node7->Node5 + + + + + + + + +Node8 + + +ipow + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +FlowSensor::readFlowrate + + + + + +Node7->Node9 + + + + + + + + +Node8->Node8 + + + + + + + + +Node9->Node8 + + + + + + + + diff --git a/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.map b/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.map new file mode 100644 index 0000000..f087c91 --- /dev/null +++ b/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.md5 b/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.md5 new file mode 100644 index 0000000..8aeea4c --- /dev/null +++ b/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.md5 @@ -0,0 +1 @@ +2d85566d64d0caa6a07d2b1fba40ab1e \ No newline at end of file diff --git a/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.svg b/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.svg new file mode 100644 index 0000000..e67bf30 --- /dev/null +++ b/classCascadeHumidistat_ad3b4c342c985955ba465a1ee85249eee_cgraph.svg @@ -0,0 +1,85 @@ + + + + + + +CascadeHumidistat::updatePIDParameters + + +Node1 + + +CascadeHumidistat:: +updatePIDParameters + + + + + +Node2 + + +PID::setGains + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +FlowController::updatePIDParameters + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +PID::init + + + + + +Node2->Node3 + + + + + + + + +Node4->Node2 + + + + + + + + diff --git a/classCharDisplayUI-members.html b/classCharDisplayUI-members.html new file mode 100644 index 0000000..278ed2c --- /dev/null +++ b/classCharDisplayUI-members.html @@ -0,0 +1,149 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
CharDisplayUI Member List
+
+
+ +

This is the complete list of members for CharDisplayUI, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustStepControllerUIprotected
adjustValue(double delta, double &value, uint8_t min, uint8_t max)ControllerUIprotectedstatic
begin() overrideCharDisplayUIvirtual
blink(uint8_t col, uint8_t row, const char *buf)ControllerUIprotected
blinkIntervalControllerUIprivate
buttonDebounceIntervalControllerUIprivate
buttonReaderControllerUIprivate
CharDisplayUI(LiquidCrystal *liquidCrystal, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs)CharDisplayUIexplicit
clear() overrideCharDisplayUIprivatevirtual
ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)ControllerUIexplicitprotected
displayControllerUIprivate
draw() overrideCharDisplayUIprivatevirtual
drawInfo() overrideCharDisplayUIprivatevirtual
drawSplash() overrideCharDisplayUIprivatevirtual
handleInput(Buttons state, uint16_t pressedFor) overrideCharDisplayUIprivatevirtual
humidistatCharDisplayUIprivate
infoDrawnControllerUIprivate
infoDurationControllerUIprivate
inputIntervalControllerUIprivate
lastPressedControllerUIprivate
lastRefreshedControllerUIprotected
liquidCrystalCharDisplayUIprivate
printf(uint8_t col, uint8_t row, const char *fmt, T... args)ControllerUIinlineprotected
printNTC(uint8_t col, uint8_t row, uint8_t i)ControllerUIprotected
refreshIntervalControllerUIprotected
screenClearedControllerUIprivate
setCursor(uint8_t col, uint8_t row) overrideCharDisplayUIprivatevirtual
splashDrawnControllerUIprivate
splashDurationControllerUIprivate
toleranceControllerUIprotected
trsControllerUIprotected
update()ControllerUI
+
+ + + + diff --git a/classCharDisplayUI.html b/classCharDisplayUI.html new file mode 100644 index 0000000..1ed96da --- /dev/null +++ b/classCharDisplayUI.html @@ -0,0 +1,576 @@ + + + + + + + +Humidistat: CharDisplayUI Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
CharDisplayUI Class Reference
+
+
+ +

TUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display. Displays current mode, PV, SP, and CV the first line of the display, and temperatures on the second line. Use keypad to adjust setpoint (UP/DOWN for fine, LEFT/RIGHT for coarse). + More...

+ +

#include <CharDisplayUI.h>

+
+Inheritance diagram for CharDisplayUI:
+
+
+
[legend]
+
+Collaboration diagram for CharDisplayUI:
+
+
+
[legend]
+ + + + + + + + + + + + +

+Public Member Functions

 CharDisplayUI (LiquidCrystal *liquidCrystal, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs)
 Constructor.
 
void begin () override
 Initialize the display.
 
- Public Member Functions inherited from ControllerUI
void update ()
 Update the display and handle input: set Humidistat's setpoint.
 
+ + + + + + + + + + + + + + + + + + + +

+Private Member Functions

void draw () override
 Draw main interface (main loop).
 
void drawSplash () override
 Draw splash screen.
 
void drawInfo () override
 Draw info screen.
 
void clear () override
 Clear screen.
 
void setCursor (uint8_t col, uint8_t row) override
 Set cursor to coordinates.
 
bool handleInput (Buttons state, uint16_t pressedFor) override
 Handle input.
 
+ + + + + +

+Private Attributes

LiquidCrystal & liquidCrystal
 
SingleHumidistathumidistat
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from ControllerUI
 ControllerUI (Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)
 Constructor.
 
void blink (uint8_t col, uint8_t row, const char *buf)
 Print blinking text.
 
void printNTC (uint8_t col, uint8_t row, uint8_t i)
 Print temperature read from thermistors. Handles NaN values as 0.
 
template<typename... T>
void printf (uint8_t col, uint8_t row, const char *fmt, T... args)
 Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer internally.
 
- Static Protected Member Functions inherited from ControllerUI
static void adjustValue (double delta, double &value, uint8_t min, uint8_t max)
 In-/de-crement a variable, while clipping it to [min, max].
 
- Protected Attributes inherited from ControllerUI
etl::span< const ThermistorReader, 4 > trs
 
unsigned long lastRefreshed = 0
 Last time display was updated (in millis)
 
const uint16_t refreshInterval = config::refreshInterval
 
const uint8_t adjustStep = config::adjustStep
 
const double tolerance = config::tolerance
 
+

Detailed Description

+

TUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display. Displays current mode, PV, SP, and CV the first line of the display, and temperatures on the second line. Use keypad to adjust setpoint (UP/DOWN for fine, LEFT/RIGHT for coarse).

+ +

Definition at line 14 of file CharDisplayUI.h.

+

Constructor & Destructor Documentation

+ +

◆ CharDisplayUI()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
CharDisplayUI::CharDisplayUI (LiquidCrystal * liquidCrystal,
const ButtonReader * buttonReader,
SingleHumidistat * humidistat,
etl::span< const ThermistorReader, 4 > trs )
+
+explicit
+
+ +

Constructor.

+
Parameters
+ + + + + +
liquidCrystalPointer to a LiquidCrystal instance
buttonReaderPointer to a ButtonReader instance
humidistatPointer to a SingleHumidistat instance
trsSpan over 4 ThermistorReader instances
+
+
+ +

Definition at line 3 of file CharDisplayUI.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
void CharDisplayUI::begin ()
+
+overridevirtual
+
+ +

Initialize the display.

+ +

Implements ControllerUI.

+ +

Definition at line 67 of file CharDisplayUI.cpp.

+ +
+
+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
void CharDisplayUI::clear ()
+
+overrideprivatevirtual
+
+ +

Clear screen.

+ +

Implements ControllerUI.

+ +

Definition at line 38 of file CharDisplayUI.cpp.

+ +
+
+ +

◆ draw()

+ +
+
+ + + + + +
+ + + + + + + +
void CharDisplayUI::draw ()
+
+overrideprivatevirtual
+
+ +

Draw main interface (main loop).

+ +

Implements ControllerUI.

+ +

Definition at line 7 of file CharDisplayUI.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ drawInfo()

+ +
+
+ + + + + +
+ + + + + + + +
void CharDisplayUI::drawInfo ()
+
+overrideprivatevirtual
+
+ +

Draw info screen.

+ +

Implements ControllerUI.

+ +

Definition at line 54 of file CharDisplayUI.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ drawSplash()

+ +
+
+ + + + + +
+ + + + + + + +
void CharDisplayUI::drawSplash ()
+
+overrideprivatevirtual
+
+ +

Draw splash screen.

+ +

Implements ControllerUI.

+ +

Definition at line 46 of file CharDisplayUI.cpp.

+ +
+
+ +

◆ handleInput()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
bool CharDisplayUI::handleInput (Buttons state,
uint16_t pressedFor )
+
+overrideprivatevirtual
+
+ +

Handle input.

+
Parameters
+ + + +
stateKeypad state
pressedForDuration the key has been pressed (in millis)
+
+
+
Returns
1 if button was pressed, 0 if not
+ +

Implements ControllerUI.

+ +

Definition at line 71 of file CharDisplayUI.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ setCursor()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
void CharDisplayUI::setCursor (uint8_t col,
uint8_t row )
+
+overrideprivatevirtual
+
+ +

Set cursor to coordinates.

+
Parameters
+ + + +
colLCD column
rowLCD row
+
+
+ +

Implements ControllerUI.

+ +

Definition at line 42 of file CharDisplayUI.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ humidistat

+ +
+
+ + + + + +
+ + + + +
SingleHumidistat& CharDisplayUI::humidistat
+
+private
+
+ +

Definition at line 17 of file CharDisplayUI.h.

+ +
+
+ +

◆ liquidCrystal

+ +
+
+ + + + + +
+ + + + +
LiquidCrystal& CharDisplayUI::liquidCrystal
+
+private
+
+ +

Definition at line 16 of file CharDisplayUI.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classCharDisplayUI.js b/classCharDisplayUI.js new file mode 100644 index 0000000..4278ebf --- /dev/null +++ b/classCharDisplayUI.js @@ -0,0 +1,13 @@ +var classCharDisplayUI = +[ + [ "CharDisplayUI", "classCharDisplayUI.html#a88d7e9e270bab8d87e52d9f3e08e17dc", null ], + [ "begin", "classCharDisplayUI.html#afa5c69d65c9bf645c9569112f542e9d6", null ], + [ "clear", "classCharDisplayUI.html#afd179d1f20c0dbab854a2b5e574606d1", null ], + [ "draw", "classCharDisplayUI.html#aef739ad8856b975fdd25ffdf9fa86601", null ], + [ "drawInfo", "classCharDisplayUI.html#ae63b61a0868ed1e42d48567a0621a13a", null ], + [ "drawSplash", "classCharDisplayUI.html#a4e7ae804daf5ee3ee96f61e717dfcd13", null ], + [ "handleInput", "classCharDisplayUI.html#a4fef4976bbeb2197ab3d8bcedc25c2dc", null ], + [ "setCursor", "classCharDisplayUI.html#a64b178a64267a4d9ba59793196c803ad", null ], + [ "humidistat", "classCharDisplayUI.html#afa54a928a5781df3f60a854195a6d7e1", null ], + [ "liquidCrystal", "classCharDisplayUI.html#a18c98eb62bbe05dca9e163a65d75769b", null ] +]; \ No newline at end of file diff --git a/classCharDisplayUI__coll__graph.map b/classCharDisplayUI__coll__graph.map new file mode 100644 index 0000000..1f51058 --- /dev/null +++ b/classCharDisplayUI__coll__graph.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/classCharDisplayUI__coll__graph.md5 b/classCharDisplayUI__coll__graph.md5 new file mode 100644 index 0000000..2dd8e59 --- /dev/null +++ b/classCharDisplayUI__coll__graph.md5 @@ -0,0 +1 @@ +52ac74725fa4e425eb1e66d3af8897b2 \ No newline at end of file diff --git a/classCharDisplayUI__coll__graph.svg b/classCharDisplayUI__coll__graph.svg new file mode 100644 index 0000000..9070676 --- /dev/null +++ b/classCharDisplayUI__coll__graph.svg @@ -0,0 +1,151 @@ + + + + + + +CharDisplayUI + + +Node1 + + +CharDisplayUI + + + + + +Node2 + + +ControllerUI + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +ButtonReader + + + + + +Node3->Node2 + + + + + + buttonReader + + + +Node4 + + +SingleHumidistat + + + + + +Node4->Node1 + + + + + + humidistat + + + +Node5 + + +Humidistat + + + + + +Node5->Node4 + + + + + + + + +Node6 + + +Controller + + + + + +Node6->Node5 + + + + + + + + +Node7 + + +PID + + + + + +Node7->Node6 + + + + + + pid + + + +Node8 + + +ConfigStore + + + + + +Node8->Node6 + + + + + + cs + + + diff --git a/classCharDisplayUI__inherit__graph.map b/classCharDisplayUI__inherit__graph.map new file mode 100644 index 0000000..bee9378 --- /dev/null +++ b/classCharDisplayUI__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classCharDisplayUI__inherit__graph.md5 b/classCharDisplayUI__inherit__graph.md5 new file mode 100644 index 0000000..1515008 --- /dev/null +++ b/classCharDisplayUI__inherit__graph.md5 @@ -0,0 +1 @@ +f57c727484cf0767c037655888ebb6f5 \ No newline at end of file diff --git a/classCharDisplayUI__inherit__graph.svg b/classCharDisplayUI__inherit__graph.svg new file mode 100644 index 0000000..7c61e4e --- /dev/null +++ b/classCharDisplayUI__inherit__graph.svg @@ -0,0 +1,39 @@ + + + + + + +CharDisplayUI + + +Node1 + + +CharDisplayUI + + + + + +Node2 + + +ControllerUI + + + + + +Node2->Node1 + + + + + + + + diff --git a/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.map b/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.map new file mode 100644 index 0000000..474c9ec --- /dev/null +++ b/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.md5 b/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.md5 new file mode 100644 index 0000000..6cbeb3e --- /dev/null +++ b/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.md5 @@ -0,0 +1 @@ +4a13a92ec125a1bc315ba46b24f86363 \ No newline at end of file diff --git a/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.svg b/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.svg new file mode 100644 index 0000000..3e10386 --- /dev/null +++ b/classCharDisplayUI_a4fef4976bbeb2197ab3d8bcedc25c2dc_cgraph.svg @@ -0,0 +1,75 @@ + + + + + + +CharDisplayUI::handleInput + + +Node1 + + +CharDisplayUI::handleInput + + + + + +Node2 + + +ControllerUI::adjustValue + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Humidistat::getCvMax + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +Humidistat::getCvMin + + + + + +Node1->Node4 + + + + + + + + diff --git a/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.map b/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.map new file mode 100644 index 0000000..9f580bf --- /dev/null +++ b/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.md5 b/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.md5 new file mode 100644 index 0000000..2744b02 --- /dev/null +++ b/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.md5 @@ -0,0 +1 @@ +bc256852caf174968cf1ea7b1e7e22d6 \ No newline at end of file diff --git a/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.svg b/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.svg new file mode 100644 index 0000000..b42f2ab --- /dev/null +++ b/classCharDisplayUI_ae63b61a0868ed1e42d48567a0621a13a_cgraph.svg @@ -0,0 +1,93 @@ + + + + + + +CharDisplayUI::drawInfo + + +Node1 + + +CharDisplayUI::drawInfo + + + + + +Node2 + + +Controller::getConfigStore + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ControllerUI::printf + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +asprintf + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +ControllerUI::setCursor + + + + + +Node3->Node5 + + + + + + + + diff --git a/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.map b/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.map new file mode 100644 index 0000000..8f2a275 --- /dev/null +++ b/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.md5 b/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.md5 new file mode 100644 index 0000000..7f210f6 --- /dev/null +++ b/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.md5 @@ -0,0 +1 @@ +97aad8f209d7f58fae4b8d6b365c5e9a \ No newline at end of file diff --git a/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.svg b/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.svg new file mode 100644 index 0000000..1f214b1 --- /dev/null +++ b/classCharDisplayUI_aef739ad8856b975fdd25ffdf9fa86601_cgraph.svg @@ -0,0 +1,174 @@ + + + + + + +CharDisplayUI::draw + + +Node1 + + +CharDisplayUI::draw + + + + + +Node2 + + +asprintf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ControllerUI::blink + + + + + +Node1->Node3 + + + + + + + + +Node5 + + +Humidistat::getHumidity + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +Humidistat::getTemperature + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +ControllerUI::printf + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +ControllerUI::printNTC + + + + + +Node1->Node8 + + + + + + + + +Node4 + + +ControllerUI::setCursor + + + + + +Node3->Node4 + + + + + + + + +Node7->Node2 + + + + + + + + +Node7->Node4 + + + + + + + + +Node8->Node7 + + + + + + + + diff --git a/classConfigPar-members.html b/classConfigPar-members.html new file mode 100644 index 0000000..3f1e687 --- /dev/null +++ b/classConfigPar-members.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ConfigPar Member List
+
+
+ +

This is the complete list of members for ConfigPar, including all inherited members.

+ + + + + + + +
adjust(int16_t delta) constConfigPar
asprint() constConfigPar
ConfigParType enum nameConfigPar
labelConfigPar
magnitude() constConfigPar
varConfigPar
+
+ + + + diff --git a/classConfigPar.html b/classConfigPar.html new file mode 100644 index 0000000..3b6e47a --- /dev/null +++ b/classConfigPar.html @@ -0,0 +1,335 @@ + + + + + + + +Humidistat: ConfigPar Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ConfigPar Class Reference
+
+
+ +

A class for storing references to variables of various types (uint8_t, uint16_t, or double). + More...

+ +

#include <ConfigPar.h>

+
+Collaboration diagram for ConfigPar:
+
+
+
[legend]
+ + + + +

+Classes

struct  Var
 
+ + + +

+Public Types

enum class  ConfigParType { ui8 +, ui16 +, d + }
 
+ + + + + + + + + + +

+Public Member Functions

void adjust (int16_t delta) const
 Add delta to the variable.
 
char * asprint () const
 Print "label: value" to string. Automatically allocates string on the heap. Make sure to delete it immediately afterwards.
 
uint8_t magnitude () const
 Get magnitude (number of digits before the decimal separator) of variable.
 
+ + + + + +

+Public Attributes

struct ConfigPar::Var var
 
char label [10]
 
+

Detailed Description

+

A class for storing references to variables of various types (uint8_t, uint16_t, or double).

+ +

Definition at line 11 of file ConfigPar.h.

+

Member Enumeration Documentation

+ +

◆ ConfigParType

+ +
+
+ + + + + +
+ + + + +
enum class ConfigPar::ConfigParType
+
+strong
+
+ + + + +
Enumerator
ui8 
ui16 
+ +

Definition at line 13 of file ConfigPar.h.

+ +
+
+

Member Function Documentation

+ +

◆ adjust()

+ +
+
+ + + + + + + +
void ConfigPar::adjust (int16_t delta) const
+
+ +

Add delta to the variable.

+
Parameters
+ + +
deltaAmount to add
+
+
+ +

Definition at line 8 of file ConfigPar.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ asprint()

+ +
+
+ + + + + + + +
char * ConfigPar::asprint () const
+
+ +

Print "label: value" to string. Automatically allocates string on the heap. Make sure to delete it immediately afterwards.

+
Returns
Pointer to char string
+ +

Definition at line 22 of file ConfigPar.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ magnitude()

+ +
+
+ + + + + + + +
uint8_t ConfigPar::magnitude () const
+
+ +

Get magnitude (number of digits before the decimal separator) of variable.

+
Returns
magnitude
+ +

Definition at line 33 of file ConfigPar.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ label

+ +
+
+ + + + +
char ConfigPar::label[10]
+
+ +

Definition at line 40 of file ConfigPar.h.

+ +
+
+ +

◆ var

+ +
+
+ + + + +
struct ConfigPar::Var ConfigPar::var
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classConfigPar.js b/classConfigPar.js new file mode 100644 index 0000000..05bedec --- /dev/null +++ b/classConfigPar.js @@ -0,0 +1,14 @@ +var classConfigPar = +[ + [ "Var", "structConfigPar_1_1Var.html", "structConfigPar_1_1Var" ], + [ "ConfigParType", "classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96", [ + [ "ui8", "classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96ab9dbe04bd906ef585047055b88ed6aa9", null ], + [ "ui16", "classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96ab60074c2198659a6c7e8f46acb7d4bc1", null ], + [ "d", "classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96a8277e0910d750195b448797616e091ad", null ] + ] ], + [ "adjust", "classConfigPar.html#aab5ed0b09b040eba98bc05d76e89c4ca", null ], + [ "asprint", "classConfigPar.html#a0bece1a8613c7c8ba8d87e28acf2cb34", null ], + [ "magnitude", "classConfigPar.html#a099b55d3836247dc0ebbe2609d3809cd", null ], + [ "label", "classConfigPar.html#ae1d7fe751a2649604e35bc2853859e87", null ], + [ "var", "classConfigPar.html#ad855012b143f0f6e02e2f611799f5ea5", null ] +]; \ No newline at end of file diff --git a/classConfigPar__coll__graph.map b/classConfigPar__coll__graph.map new file mode 100644 index 0000000..9753370 --- /dev/null +++ b/classConfigPar__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classConfigPar__coll__graph.md5 b/classConfigPar__coll__graph.md5 new file mode 100644 index 0000000..25ce552 --- /dev/null +++ b/classConfigPar__coll__graph.md5 @@ -0,0 +1 @@ +fd0bf73984b957e799bca6858f3d8681 \ No newline at end of file diff --git a/classConfigPar__coll__graph.svg b/classConfigPar__coll__graph.svg new file mode 100644 index 0000000..dcff80c --- /dev/null +++ b/classConfigPar__coll__graph.svg @@ -0,0 +1,40 @@ + + + + + + +ConfigPar + + +Node1 + + +ConfigPar + + + + + +Node2 + + +ConfigPar::Var + + + + + +Node2->Node1 + + + + + + var + + + diff --git a/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.map b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.map new file mode 100644 index 0000000..3dfa7c2 --- /dev/null +++ b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.md5 b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.md5 new file mode 100644 index 0000000..183056a --- /dev/null +++ b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.md5 @@ -0,0 +1 @@ +5ee08af795874a1400b43e8ea6e1bca3 \ No newline at end of file diff --git a/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.svg b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.svg new file mode 100644 index 0000000..612521a --- /dev/null +++ b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_cgraph.svg @@ -0,0 +1,48 @@ + + + + + + +ConfigPar::magnitude + + +Node1 + + +ConfigPar::magnitude + + + + + +Node2 + + +ilog10 + + + + + +Node1->Node2 + + + + + + + + +Node2->Node2 + + + + + + + + diff --git a/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.map b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.map new file mode 100644 index 0000000..f39211f --- /dev/null +++ b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.md5 b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.md5 new file mode 100644 index 0000000..acbe975 --- /dev/null +++ b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.md5 @@ -0,0 +1 @@ +211a662b12b42d8a91e2c34561e26d6e \ No newline at end of file diff --git a/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.svg b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.svg new file mode 100644 index 0000000..76d471f --- /dev/null +++ b/classConfigPar_a099b55d3836247dc0ebbe2609d3809cd_icgraph.svg @@ -0,0 +1,59 @@ + + + + + + +ConfigPar::magnitude + + +Node1 + + +ConfigPar::magnitude + + + + + +Node2 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::draw + + + + + +Node2->Node3 + + + + + + + + diff --git a/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.map b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.map new file mode 100644 index 0000000..900d5bb --- /dev/null +++ b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.md5 b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.md5 new file mode 100644 index 0000000..b48d133 --- /dev/null +++ b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.md5 @@ -0,0 +1 @@ +21148929c5859d5c40789d6c325c4370 \ No newline at end of file diff --git a/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.svg b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.svg new file mode 100644 index 0000000..4161a21 --- /dev/null +++ b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ConfigPar::asprint + + +Node1 + + +ConfigPar::asprint + + + + + +Node2 + + +asprintf + + + + + +Node1->Node2 + + + + + + + + diff --git a/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.map b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.map new file mode 100644 index 0000000..143dfe5 --- /dev/null +++ b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.md5 b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.md5 new file mode 100644 index 0000000..b53180e --- /dev/null +++ b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.md5 @@ -0,0 +1 @@ +a2bb4a0afd79a3029366ffd90ff4caf1 \ No newline at end of file diff --git a/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.svg b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.svg new file mode 100644 index 0000000..94c3f60 --- /dev/null +++ b/classConfigPar_a0bece1a8613c7c8ba8d87e28acf2cb34_icgraph.svg @@ -0,0 +1,59 @@ + + + + + + +ConfigPar::asprint + + +Node1 + + +ConfigPar::asprint + + + + + +Node2 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::draw + + + + + +Node2->Node3 + + + + + + + + diff --git a/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.map b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.map new file mode 100644 index 0000000..61a18c3 --- /dev/null +++ b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.md5 b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.md5 new file mode 100644 index 0000000..6192bc6 --- /dev/null +++ b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.md5 @@ -0,0 +1 @@ +166d47f5754ec9b473f12431fa1ef3fb \ No newline at end of file diff --git a/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.svg b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.svg new file mode 100644 index 0000000..ff07534 --- /dev/null +++ b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_cgraph.svg @@ -0,0 +1,48 @@ + + + + + + +ConfigPar::adjust + + +Node1 + + +ConfigPar::adjust + + + + + +Node2 + + +ipow + + + + + +Node1->Node2 + + + + + + + + +Node2->Node2 + + + + + + + + diff --git a/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.map b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.map new file mode 100644 index 0000000..fcd48b5 --- /dev/null +++ b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.md5 b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.md5 new file mode 100644 index 0000000..b4bdd33 --- /dev/null +++ b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.md5 @@ -0,0 +1 @@ +1cc589774d1d9b6d2c1631e2c90c44c5 \ No newline at end of file diff --git a/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.svg b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.svg new file mode 100644 index 0000000..cee5297 --- /dev/null +++ b/classConfigPar_aab5ed0b09b040eba98bc05d76e89c4ca_icgraph.svg @@ -0,0 +1,59 @@ + + + + + + +ConfigPar::adjust + + +Node1 + + +ConfigPar::adjust + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2->Node3 + + + + + + + + diff --git a/classController-members.html b/classController-members.html new file mode 100644 index 0000000..e3f33ad --- /dev/null +++ b/classController-members.html @@ -0,0 +1,129 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Controller Member List
+
+
+ +

This is the complete list of members for Controller, including all inherited members.

+ + + + + + + + + + + + + +
activeController
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)Controller
csControllerprotected
cvController
getConfigStore()Controller
getTerms(double &pTerm, double &iTerm, double &dTerm) constController
pidControllerprotected
pvController
sensorLastReadControllerprotected
spController
update()Controller
updatePIDParameters()Controller
+
+ + + + diff --git a/classController.html b/classController.html new file mode 100644 index 0000000..a23f41b --- /dev/null +++ b/classController.html @@ -0,0 +1,513 @@ + + + + + + + +Humidistat: Controller Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Controller Class Reference
+
+
+ +

Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance. + More...

+ +

#include <Controller.h>

+
+Inheritance diagram for Controller:
+
+
+
[legend]
+
+Collaboration diagram for Controller:
+
+
+
[legend]
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 Controller (const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
 Constructor.
 
void getTerms (double &pTerm, double &iTerm, double &dTerm) const
 Get the three PID terms by reference.
 
void update ()
 Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.
 
void updatePIDParameters ()
 Update the PID parameters from the configStore.
 
const ConfigStoregetConfigStore ()
 Get a pointer to the ConfigStore instance.
 
+ + + + + + + + + + + + +

+Public Attributes

bool active = false
 
double pv = 0
 Process variable.
 
double sp
 Setpoint.
 
double cv
 Control variable.
 
+ + + + + + + +

+Protected Attributes

PID pid
 
const ConfigStorecs
 
unsigned long sensorLastRead = 0
 
+

Detailed Description

+

Base class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance.

+ +

Definition at line 11 of file Controller.h.

+

Constructor & Destructor Documentation

+ +

◆ Controller()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Controller::Controller (const ConfigStore * cs,
double Kp,
double Ki,
double Kd,
double Kf,
uint16_t dt,
double cvMin,
double cvMax,
double defaultSP,
double defaultCV )
+
+ +

Constructor.

+
Parameters
+ + + + + + + + + + + +
csPointer to a ConfigStore instance
KpProportional gain
KiIntegral gain (in 1/s)
KdDerivative gain (in s)
KfFeed-forward gain
dtTimestep (in ms)
cvMinLower limit for control value
cvMaxUpper limit for control value
defaultSPDefault value for the setpoint
defaultCVDefault value for the control variable
+
+
+ +

Definition at line 3 of file Controller.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getConfigStore()

+ +
+
+ + + + + + + +
const ConfigStore * Controller::getConfigStore ()
+
+ +

Get a pointer to the ConfigStore instance.

+
Returns
pointer to the ConfigStore instance.
+ +

Definition at line 13 of file Controller.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ getTerms()

+ +
+
+ + + + + + + + + + + + + + + + +
void Controller::getTerms (double & pTerm,
double & iTerm,
double & dTerm ) const
+
+ +

Get the three PID terms by reference.

+
Parameters
+ + + + +
pTerm
iTerm
dTerm
+
+
+ +

Definition at line 7 of file Controller.cpp.

+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + +
void Controller::update ()
+
+ +

Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.

+ +
+
+ +

◆ updatePIDParameters()

+ +
+
+ + + + + + + +
void Controller::updatePIDParameters ()
+
+ +

Update the PID parameters from the configStore.

+ +
+
+

Member Data Documentation

+ +

◆ active

+ +
+
+ + + + +
bool Controller::active = false
+
+ +

Definition at line 19 of file Controller.h.

+ +
+
+ +

◆ cs

+ +
+
+ + + + + +
+ + + + +
const ConfigStore& Controller::cs
+
+protected
+
+ +

Definition at line 14 of file Controller.h.

+ +
+
+ +

◆ cv

+ +
+
+ + + + +
double Controller::cv
+
+ +

Control variable.

+ +

Definition at line 23 of file Controller.h.

+ +
+
+ +

◆ pid

+ +
+
+ + + + + +
+ + + + +
PID Controller::pid
+
+protected
+
+ +

Definition at line 13 of file Controller.h.

+ +
+
+ +

◆ pv

+ +
+
+ + + + +
double Controller::pv = 0
+
+ +

Process variable.

+ +

Definition at line 21 of file Controller.h.

+ +
+
+ +

◆ sensorLastRead

+ +
+
+ + + + + +
+ + + + +
unsigned long Controller::sensorLastRead = 0
+
+protected
+
+ +

Definition at line 16 of file Controller.h.

+ +
+
+ +

◆ sp

+ +
+
+ + + + +
double Controller::sp
+
+ +

Setpoint.

+ +

Definition at line 22 of file Controller.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classController.js b/classController.js new file mode 100644 index 0000000..5a203c0 --- /dev/null +++ b/classController.js @@ -0,0 +1,15 @@ +var classController = +[ + [ "Controller", "classController.html#a2cac802179f6b45250a3e6205c6836a6", null ], + [ "getConfigStore", "classController.html#a097a40310e7beb937f7cdcabb2246877", null ], + [ "getTerms", "classController.html#ab5192313a391930820531bf265700887", null ], + [ "update", "classController.html#a7d04c17913f04f99429aa29fa8505484", null ], + [ "updatePIDParameters", "classController.html#ab63fde8bc51d57a153f8db1258ed6d36", null ], + [ "active", "classController.html#a1eca9e56ad3f890647583a38321862f7", null ], + [ "cs", "classController.html#aa2de62d9e5712de3cf51505de645933a", null ], + [ "cv", "classController.html#aabe82f70dad1da06669d57616f08fbc1", null ], + [ "pid", "classController.html#a9e1a527079b696a527331435cc89106f", null ], + [ "pv", "classController.html#a44f6461d98584eef29ae71383dda0c10", null ], + [ "sensorLastRead", "classController.html#ae9b9237c5a1e3ec9146d6aeed7fc4a44", null ], + [ "sp", "classController.html#a01fdd32bacee0e5650ac63a8889eae6e", null ] +]; \ No newline at end of file diff --git a/classControllerUI-members.html b/classControllerUI-members.html new file mode 100644 index 0000000..476686e --- /dev/null +++ b/classControllerUI-members.html @@ -0,0 +1,146 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ControllerUI Member List
+
+
+ +

This is the complete list of members for ControllerUI, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
adjustStepControllerUIprotected
adjustValue(double delta, double &value, uint8_t min, uint8_t max)ControllerUIprotectedstatic
begin()=0ControllerUIpure virtual
blink(uint8_t col, uint8_t row, const char *buf)ControllerUIprotected
blinkIntervalControllerUIprivate
buttonDebounceIntervalControllerUIprivate
buttonReaderControllerUIprivate
clear()=0ControllerUIprivatepure virtual
ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)ControllerUIexplicitprotected
displayControllerUIprivate
draw()=0ControllerUIprivatepure virtual
drawInfo()=0ControllerUIprivatepure virtual
drawSplash()=0ControllerUIprivatepure virtual
handleInput(Buttons state, uint16_t pressedFor)=0ControllerUIprivatepure virtual
infoDrawnControllerUIprivate
infoDurationControllerUIprivate
inputIntervalControllerUIprivate
lastPressedControllerUIprivate
lastRefreshedControllerUIprotected
printf(uint8_t col, uint8_t row, const char *fmt, T... args)ControllerUIinlineprotected
printNTC(uint8_t col, uint8_t row, uint8_t i)ControllerUIprotected
refreshIntervalControllerUIprotected
screenClearedControllerUIprivate
setCursor(uint8_t col, uint8_t row)=0ControllerUIprivatepure virtual
splashDrawnControllerUIprivate
splashDurationControllerUIprivate
toleranceControllerUIprotected
trsControllerUIprotected
update()ControllerUI
+
+ + + + diff --git a/classControllerUI.html b/classControllerUI.html new file mode 100644 index 0000000..fcf7f71 --- /dev/null +++ b/classControllerUI.html @@ -0,0 +1,1191 @@ + + + + + + + +Humidistat: ControllerUI Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ControllerUI Class Referenceabstract
+
+
+ +

User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input, and Humidistat for updating the humidity setpoint. + More...

+ +

#include <ControllerUI.h>

+
+Inheritance diagram for ControllerUI:
+
+
+
[legend]
+
+Collaboration diagram for ControllerUI:
+
+
+
[legend]
+ + + + + + + + +

+Public Member Functions

virtual void begin ()=0
 Initialize the display.
 
void update ()
 Update the display and handle input: set Humidistat's setpoint.
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

 ControllerUI (Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)
 Constructor.
 
void blink (uint8_t col, uint8_t row, const char *buf)
 Print blinking text.
 
void printNTC (uint8_t col, uint8_t row, uint8_t i)
 Print temperature read from thermistors. Handles NaN values as 0.
 
template<typename... T>
void printf (uint8_t col, uint8_t row, const char *fmt, T... args)
 Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer internally.
 
+ + + + +

+Static Protected Member Functions

static void adjustValue (double delta, double &value, uint8_t min, uint8_t max)
 In-/de-crement a variable, while clipping it to [min, max].
 
+ + + + + + + + + + + + +

+Protected Attributes

etl::span< const ThermistorReader, 4 > trs
 
unsigned long lastRefreshed = 0
 Last time display was updated (in millis)
 
const uint16_t refreshInterval = config::refreshInterval
 
const uint8_t adjustStep = config::adjustStep
 
const double tolerance = config::tolerance
 
+ + + + + + + + + + + + + + + + + + + +

+Private Member Functions

virtual void draw ()=0
 Draw main interface (main loop).
 
virtual void drawSplash ()=0
 Draw splash screen.
 
virtual void drawInfo ()=0
 Draw info screen.
 
virtual void clear ()=0
 Clear screen.
 
virtual void setCursor (uint8_t col, uint8_t row)=0
 Set cursor to coordinates.
 
virtual bool handleInput (Buttons state, uint16_t pressedFor)=0
 Handle input.
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

Print & display
 
const ButtonReaderbuttonReader
 
unsigned long lastPressed = 0
 Last time a keypress event occurred (in millis)
 
const uint16_t buttonDebounceInterval = config::buttonDebounceInterval
 
const uint16_t inputInterval = config::inputInterval
 
const uint16_t blinkInterval = config::blinkInterval
 
const uint16_t splashDuration = config::splashDuration
 
const uint16_t infoDuration = config::infoDuration
 
bool splashDrawn = false
 
bool infoDrawn = false
 
bool screenCleared = false
 
+

Detailed Description

+

User interface (display and input) for humidistat. Hold references to ButtonReader for keypad input, and Humidistat for updating the humidity setpoint.

+ +

Definition at line 15 of file ControllerUI.h.

+

Constructor & Destructor Documentation

+ +

◆ ControllerUI()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
ControllerUI::ControllerUI (Print * display,
const ButtonReader * buttonReader,
etl::span< const ThermistorReader, 4 > trs )
+
+explicitprotected
+
+ +

Constructor.

+
Parameters
+ + + + +
displayPointer to a Print instance
buttonReaderPointer to a ButtonReader instance
trsSpan over 4 ThermistorReader instances
+
+
+ +

Definition at line 3 of file ControllerUI.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ adjustValue()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
void ControllerUI::adjustValue (double delta,
double & value,
uint8_t min,
uint8_t max )
+
+staticprotected
+
+ +

In-/de-crement a variable, while clipping it to [min, max].

+
Parameters
+ + + + + +
deltaThe amount by which to in-/de-crement
valueValue to adjust
minLower limit
maxUpper limit
+
+
+ +

Definition at line 67 of file ControllerUI.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ begin()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void ControllerUI::begin ()
+
+pure virtual
+
+ +

Initialize the display.

+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+ +
+
+ +

◆ blink()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
void ControllerUI::blink (uint8_t col,
uint8_t row,
const char * buf )
+
+protected
+
+ +

Print blinking text.

+
Parameters
+ + + + +
colLCD column
rowLCD row
bufBuffer of text to blink
+
+
+ +

Definition at line 43 of file ControllerUI.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ clear()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void ControllerUI::clear ()
+
+privatepure virtual
+
+ +

Clear screen.

+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ draw()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void ControllerUI::draw ()
+
+privatepure virtual
+
+ +

Draw main interface (main loop).

+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ drawInfo()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void ControllerUI::drawInfo ()
+
+privatepure virtual
+
+ +

Draw info screen.

+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ drawSplash()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void ControllerUI::drawSplash ()
+
+privatepure virtual
+
+ +

Draw splash screen.

+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ handleInput()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
virtual bool ControllerUI::handleInput (Buttons state,
uint16_t pressedFor )
+
+privatepure virtual
+
+ +

Handle input.

+
Parameters
+ + + +
stateKeypad state
pressedForDuration the key has been pressed (in millis)
+
+
+
Returns
1 if button was pressed, 0 if not
+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ printf()

+ +
+
+
+template<typename... T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
void ControllerUI::printf (uint8_t col,
uint8_t row,
const char * fmt,
T... args )
+
+inlineprotected
+
+ +

Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer internally.

+
Parameters
+ + + + + +
colLCD column
rowLCD row
fmtFormat string
argsArguments specifying data to print
+
+
+ +

Definition at line 92 of file ControllerUI.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ printNTC()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + +
void ControllerUI::printNTC (uint8_t col,
uint8_t row,
uint8_t i )
+
+protected
+
+ +

Print temperature read from thermistors. Handles NaN values as 0.

+
Parameters
+ + + + +
colLCD column
rowLCD row
iThermistorReader index
+
+
+ +

Definition at line 58 of file ControllerUI.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ setCursor()

+ +
+
+ + + + + +
+ + + + + + + + + + + +
virtual void ControllerUI::setCursor (uint8_t col,
uint8_t row )
+
+privatepure virtual
+
+ +

Set cursor to coordinates.

+
Parameters
+ + + +
colLCD column
rowLCD row
+
+
+ +

Implemented in CharDisplayUI, and GraphicalDisplayUI< Humidistat_t >.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + +
void ControllerUI::update ()
+
+ +

Update the display and handle input: set Humidistat's setpoint.

+ +

Definition at line 6 of file ControllerUI.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ adjustStep

+ +
+
+ + + + + +
+ + + + +
const uint8_t ControllerUI::adjustStep = config::adjustStep
+
+protected
+
+ +

Definition at line 58 of file ControllerUI.h.

+ +
+
+ +

◆ blinkInterval

+ +
+
+ + + + + +
+ + + + +
const uint16_t ControllerUI::blinkInterval = config::blinkInterval
+
+private
+
+ +

Definition at line 24 of file ControllerUI.h.

+ +
+
+ +

◆ buttonDebounceInterval

+ +
+
+ + + + + +
+ + + + +
const uint16_t ControllerUI::buttonDebounceInterval = config::buttonDebounceInterval
+
+private
+
+ +

Definition at line 22 of file ControllerUI.h.

+ +
+
+ +

◆ buttonReader

+ +
+
+ + + + + +
+ + + + +
const ButtonReader& ControllerUI::buttonReader
+
+private
+
+ +

Definition at line 18 of file ControllerUI.h.

+ +
+
+ +

◆ display

+ +
+
+ + + + + +
+ + + + +
Print& ControllerUI::display
+
+private
+
+ +

Definition at line 17 of file ControllerUI.h.

+ +
+
+ +

◆ infoDrawn

+ +
+
+ + + + + +
+ + + + +
bool ControllerUI::infoDrawn = false
+
+private
+
+ +

Definition at line 29 of file ControllerUI.h.

+ +
+
+ +

◆ infoDuration

+ +
+
+ + + + + +
+ + + + +
const uint16_t ControllerUI::infoDuration = config::infoDuration
+
+private
+
+ +

Definition at line 26 of file ControllerUI.h.

+ +
+
+ +

◆ inputInterval

+ +
+
+ + + + + +
+ + + + +
const uint16_t ControllerUI::inputInterval = config::inputInterval
+
+private
+
+ +

Definition at line 23 of file ControllerUI.h.

+ +
+
+ +

◆ lastPressed

+ +
+
+ + + + + +
+ + + + +
unsigned long ControllerUI::lastPressed = 0
+
+private
+
+ +

Last time a keypress event occurred (in millis)

+ +

Definition at line 20 of file ControllerUI.h.

+ +
+
+ +

◆ lastRefreshed

+ +
+
+ + + + + +
+ + + + +
unsigned long ControllerUI::lastRefreshed = 0
+
+protected
+
+ +

Last time display was updated (in millis)

+ +

Definition at line 55 of file ControllerUI.h.

+ +
+
+ +

◆ refreshInterval

+ +
+
+ + + + + +
+ + + + +
const uint16_t ControllerUI::refreshInterval = config::refreshInterval
+
+protected
+
+ +

Definition at line 57 of file ControllerUI.h.

+ +
+
+ +

◆ screenCleared

+ +
+
+ + + + + +
+ + + + +
bool ControllerUI::screenCleared = false
+
+private
+
+ +

Definition at line 30 of file ControllerUI.h.

+ +
+
+ +

◆ splashDrawn

+ +
+
+ + + + + +
+ + + + +
bool ControllerUI::splashDrawn = false
+
+private
+
+ +

Definition at line 28 of file ControllerUI.h.

+ +
+
+ +

◆ splashDuration

+ +
+
+ + + + + +
+ + + + +
const uint16_t ControllerUI::splashDuration = config::splashDuration
+
+private
+
+ +

Definition at line 25 of file ControllerUI.h.

+ +
+
+ +

◆ tolerance

+ +
+
+ + + + + +
+ + + + +
const double ControllerUI::tolerance = config::tolerance
+
+protected
+
+ +

Definition at line 59 of file ControllerUI.h.

+ +
+
+ +

◆ trs

+ +
+
+ + + + + +
+ + + + +
etl::span<const ThermistorReader, 4> ControllerUI::trs
+
+protected
+
+ +

Definition at line 53 of file ControllerUI.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classControllerUI.js b/classControllerUI.js new file mode 100644 index 0000000..221bbc8 --- /dev/null +++ b/classControllerUI.js @@ -0,0 +1,32 @@ +var classControllerUI = +[ + [ "ControllerUI", "classControllerUI.html#ab48d932cb3b88a93736120e23aaade09", null ], + [ "adjustValue", "classControllerUI.html#a227e9eb131da08502bf707ac33bccab3", null ], + [ "begin", "classControllerUI.html#a999978b071e8a4c42751948e3324fb03", null ], + [ "blink", "classControllerUI.html#af385bdf29e1075733d91b845fb771506", null ], + [ "clear", "classControllerUI.html#af0365e8a34ddcc4b00985fa0c95a5d65", null ], + [ "draw", "classControllerUI.html#ad4f4f22b7282e9aacf04f7847f543f04", null ], + [ "drawInfo", "classControllerUI.html#acb114d7cbe1d691028fa3d349728c91e", null ], + [ "drawSplash", "classControllerUI.html#a79527907045a0ac131fb7e1044c4eca4", null ], + [ "handleInput", "classControllerUI.html#ab101f4fc3a16ccdac7fb80e3af1a22ac", null ], + [ "printf", "classControllerUI.html#aa14a64631f7993d6e22ac9e6f5bf4b44", null ], + [ "printNTC", "classControllerUI.html#abfabf4c49c12dcb8ee5e8b5a899cc920", null ], + [ "setCursor", "classControllerUI.html#a94aed853c67197d32434244f8941c21e", null ], + [ "update", "classControllerUI.html#a6f2d7f517a98e9ed393fdded07bbc454", null ], + [ "adjustStep", "classControllerUI.html#ae6fd57f1c87678a082fd5b16ee898153", null ], + [ "blinkInterval", "classControllerUI.html#aa471dcc18ed6efe07dc2e5871ce8d8b0", null ], + [ "buttonDebounceInterval", "classControllerUI.html#ab16183c3b414be8bfb358ca4b7ee91f7", null ], + [ "buttonReader", "classControllerUI.html#abf84f563826a7c8f77d600d96bdbca97", null ], + [ "display", "classControllerUI.html#a177e261dc869404d798a6f1c7d6f688c", null ], + [ "infoDrawn", "classControllerUI.html#aeebcc0fa5ec0f2b66b01998056b0f6ee", null ], + [ "infoDuration", "classControllerUI.html#a96a4191e26241182ffc01df2dc11710c", null ], + [ "inputInterval", "classControllerUI.html#a71927809cdf71c2fecfe560519e017a8", null ], + [ "lastPressed", "classControllerUI.html#ae4f9f38425d216647f2e5810452c49f1", null ], + [ "lastRefreshed", "classControllerUI.html#a5d4288a2902e132b1b6010c0666fad95", null ], + [ "refreshInterval", "classControllerUI.html#a01c0f462c8b59d42de64289508f1cd79", null ], + [ "screenCleared", "classControllerUI.html#a679408f8daf31bd34e8a762012e96207", null ], + [ "splashDrawn", "classControllerUI.html#a8747a103ef10c55194c284e3cdeabb97", null ], + [ "splashDuration", "classControllerUI.html#a62a73bcc94bfc46e1f8a844ee38c0357", null ], + [ "tolerance", "classControllerUI.html#a12ac90cf5a6ae47d1325a058e17bbb48", null ], + [ "trs", "classControllerUI.html#a2cceb103c052a6943acc6ac458cf8717", null ] +]; \ No newline at end of file diff --git a/classControllerUI__coll__graph.map b/classControllerUI__coll__graph.map new file mode 100644 index 0000000..939c3d8 --- /dev/null +++ b/classControllerUI__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI__coll__graph.md5 b/classControllerUI__coll__graph.md5 new file mode 100644 index 0000000..fe3b67d --- /dev/null +++ b/classControllerUI__coll__graph.md5 @@ -0,0 +1 @@ +daa2236187840389f76847bc82315e23 \ No newline at end of file diff --git a/classControllerUI__coll__graph.svg b/classControllerUI__coll__graph.svg new file mode 100644 index 0000000..6ced654 --- /dev/null +++ b/classControllerUI__coll__graph.svg @@ -0,0 +1,40 @@ + + + + + + +ControllerUI + + +Node1 + + +ControllerUI + + + + + +Node2 + + +ButtonReader + + + + + +Node2->Node1 + + + + + + buttonReader + + + diff --git a/classControllerUI__inherit__graph.map b/classControllerUI__inherit__graph.map new file mode 100644 index 0000000..f093fb7 --- /dev/null +++ b/classControllerUI__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classControllerUI__inherit__graph.md5 b/classControllerUI__inherit__graph.md5 new file mode 100644 index 0000000..edd8f8b --- /dev/null +++ b/classControllerUI__inherit__graph.md5 @@ -0,0 +1 @@ +f061777740729c3d5dbd9f44f3533dc0 \ No newline at end of file diff --git a/classControllerUI__inherit__graph.svg b/classControllerUI__inherit__graph.svg new file mode 100644 index 0000000..186fb50 --- /dev/null +++ b/classControllerUI__inherit__graph.svg @@ -0,0 +1,58 @@ + + + + + + +ControllerUI + + +Node1 + + +ControllerUI + + + + + +Node2 + + +CharDisplayUI + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +< Humidistat_t > + + + + + +Node1->Node3 + + + + + + + + diff --git a/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.map b/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.map new file mode 100644 index 0000000..25a1afa --- /dev/null +++ b/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.md5 b/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.md5 new file mode 100644 index 0000000..458b873 --- /dev/null +++ b/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.md5 @@ -0,0 +1 @@ +31dbb342e2013c7a5cabf3653288cfc8 \ No newline at end of file diff --git a/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.svg b/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.svg new file mode 100644 index 0000000..ccbc87c --- /dev/null +++ b/classControllerUI_a227e9eb131da08502bf707ac33bccab3_icgraph.svg @@ -0,0 +1,77 @@ + + + + + + +ControllerUI::adjustValue + + +Node1 + + +ControllerUI::adjustValue + + + + + +Node2 + + +CharDisplayUI::handleInput + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::handleInput + + + + + +Node3->Node4 + + + + + + + + diff --git a/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.map b/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.map new file mode 100644 index 0000000..61b513a --- /dev/null +++ b/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.md5 b/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.md5 new file mode 100644 index 0000000..1ee0c50 --- /dev/null +++ b/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.md5 @@ -0,0 +1 @@ +d2dc53609ae7b43dc23c83f81c8ae96a \ No newline at end of file diff --git a/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.svg b/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.svg new file mode 100644 index 0000000..2bd51a9 --- /dev/null +++ b/classControllerUI_a6f2d7f517a98e9ed393fdded07bbc454_cgraph.svg @@ -0,0 +1,147 @@ + + + + + + +ControllerUI::update + + +Node1 + + +ControllerUI::update + + + + + +Node2 + + +ControllerUI::clear + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ControllerUI::draw + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +ControllerUI::drawInfo + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +ControllerUI::drawSplash + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +ButtonReader::getPressedFor + + + + + +Node1->Node6 + + + + + + + + +Node7 + + +ControllerUI::handleInput + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +ButtonReader::isPressed + + + + + +Node1->Node8 + + + + + + + + diff --git a/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.map b/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.map new file mode 100644 index 0000000..04484dc --- /dev/null +++ b/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.md5 b/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.md5 new file mode 100644 index 0000000..c37e00a --- /dev/null +++ b/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.md5 @@ -0,0 +1 @@ +6ac6971e20f7d3aa4983afb3051cca3a \ No newline at end of file diff --git a/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.svg b/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.svg new file mode 100644 index 0000000..4a89873 --- /dev/null +++ b/classControllerUI_a79527907045a0ac131fb7e1044c4eca4_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ControllerUI::drawSplash + + +Node1 + + +ControllerUI::drawSplash + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.map b/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.map new file mode 100644 index 0000000..9008f20 --- /dev/null +++ b/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.map @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.md5 b/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.md5 new file mode 100644 index 0000000..a3ff371 --- /dev/null +++ b/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.md5 @@ -0,0 +1 @@ +e4b17955cb97010a370a3d06661ad0e5 \ No newline at end of file diff --git a/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.svg b/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.svg new file mode 100644 index 0000000..cd2ab34 --- /dev/null +++ b/classControllerUI_a94aed853c67197d32434244f8941c21e_icgraph.svg @@ -0,0 +1,204 @@ + + + + + + +ControllerUI::setCursor + + +Node1 + + +ControllerUI::setCursor + + + + + +Node2 + + +ControllerUI::blink + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +ControllerUI::printf + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +CharDisplayUI::draw + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node2->Node4 + + + + + + + + +Node5->Node3 + + + + + + + + +Node5->Node4 + + + + + + + + +Node6 + + +CharDisplayUI::drawInfo + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node5->Node7 + + + + + + + + +Node9 + + +ControllerUI::printNTC + + + + + +Node5->Node9 + + + + + + + + +Node8 + + +GraphicalDisplayUI +::draw + + + + + +Node7->Node8 + + + + + + + + +Node9->Node3 + + + + + + + + +Node9->Node7 + + + + + + + + diff --git a/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.map b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.map new file mode 100644 index 0000000..f291a6c --- /dev/null +++ b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.md5 b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.md5 new file mode 100644 index 0000000..a864dfe --- /dev/null +++ b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.md5 @@ -0,0 +1 @@ +d355e0761a10c796faee81d9226f7f9f \ No newline at end of file diff --git a/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.svg b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.svg new file mode 100644 index 0000000..31ba895 --- /dev/null +++ b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + +ControllerUI::printf + + +Node1 + + +ControllerUI::printf + + + + + +Node2 + + +asprintf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ControllerUI::setCursor + + + + + +Node1->Node3 + + + + + + + + diff --git a/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.map b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.map new file mode 100644 index 0000000..48f56ff --- /dev/null +++ b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.md5 b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.md5 new file mode 100644 index 0000000..83a8cd9 --- /dev/null +++ b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.md5 @@ -0,0 +1 @@ +277588ea3bd79ae048f3804b870b5f8b \ No newline at end of file diff --git a/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.svg b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.svg new file mode 100644 index 0000000..888297f --- /dev/null +++ b/classControllerUI_aa14a64631f7993d6e22ac9e6f5bf4b44_icgraph.svg @@ -0,0 +1,150 @@ + + + + + + +ControllerUI::printf + + +Node1 + + +ControllerUI::printf + + + + + +Node2 + + +CharDisplayUI::draw + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +CharDisplayUI::drawInfo + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node1->Node5 + + + + + + + + +Node7 + + +ControllerUI::printNTC + + + + + +Node1->Node7 + + + + + + + + +Node6 + + +GraphicalDisplayUI +::draw + + + + + +Node5->Node6 + + + + + + + + +Node7->Node2 + + + + + + + + +Node7->Node5 + + + + + + + + diff --git a/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.map b/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.map new file mode 100644 index 0000000..94ee82b --- /dev/null +++ b/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.md5 b/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.md5 new file mode 100644 index 0000000..98b467f --- /dev/null +++ b/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.md5 @@ -0,0 +1 @@ +1c092904107a20d516da8e34bfe85cf5 \ No newline at end of file diff --git a/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.svg b/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.svg new file mode 100644 index 0000000..4ca12c6 --- /dev/null +++ b/classControllerUI_ab101f4fc3a16ccdac7fb80e3af1a22ac_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ControllerUI::handleInput + + +Node1 + + +ControllerUI::handleInput + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.map b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.map new file mode 100644 index 0000000..5ece20c --- /dev/null +++ b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.md5 b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.md5 new file mode 100644 index 0000000..240e6af --- /dev/null +++ b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.md5 @@ -0,0 +1 @@ +1ba5a33c3f8adeb8a7c78ef69da3cfd9 \ No newline at end of file diff --git a/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.svg b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.svg new file mode 100644 index 0000000..9ba43ca --- /dev/null +++ b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_cgraph.svg @@ -0,0 +1,75 @@ + + + + + + +ControllerUI::printNTC + + +Node1 + + +ControllerUI::printNTC + + + + + +Node2 + + +ControllerUI::printf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +asprintf + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +ControllerUI::setCursor + + + + + +Node2->Node4 + + + + + + + + diff --git a/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.map b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.map new file mode 100644 index 0000000..b7d2dda --- /dev/null +++ b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.md5 b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.md5 new file mode 100644 index 0000000..8bba3f7 --- /dev/null +++ b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.md5 @@ -0,0 +1 @@ +c4c16575a8db3917705e48d35895402b \ No newline at end of file diff --git a/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.svg b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.svg new file mode 100644 index 0000000..412d9fd --- /dev/null +++ b/classControllerUI_abfabf4c49c12dcb8ee5e8b5a899cc920_icgraph.svg @@ -0,0 +1,77 @@ + + + + + + +ControllerUI::printNTC + + +Node1 + + +ControllerUI::printNTC + + + + + +Node2 + + +CharDisplayUI::draw + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::draw + + + + + +Node3->Node4 + + + + + + + + diff --git a/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.map b/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.map new file mode 100644 index 0000000..7b43e53 --- /dev/null +++ b/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.md5 b/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.md5 new file mode 100644 index 0000000..4e425de --- /dev/null +++ b/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.md5 @@ -0,0 +1 @@ +ac719621a2198abad53276e3515dddd4 \ No newline at end of file diff --git a/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.svg b/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.svg new file mode 100644 index 0000000..53d3499 --- /dev/null +++ b/classControllerUI_acb114d7cbe1d691028fa3d349728c91e_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ControllerUI::drawInfo + + +Node1 + + +ControllerUI::drawInfo + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.map b/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.map new file mode 100644 index 0000000..3550a55 --- /dev/null +++ b/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.md5 b/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.md5 new file mode 100644 index 0000000..cd5c001 --- /dev/null +++ b/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.md5 @@ -0,0 +1 @@ +e5802c34524d2798a64f7a117fad534c \ No newline at end of file diff --git a/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.svg b/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.svg new file mode 100644 index 0000000..6ee9f49 --- /dev/null +++ b/classControllerUI_ad4f4f22b7282e9aacf04f7847f543f04_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ControllerUI::draw + + +Node1 + + +ControllerUI::draw + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.map b/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.map new file mode 100644 index 0000000..1cc4c66 --- /dev/null +++ b/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.md5 b/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.md5 new file mode 100644 index 0000000..0532f27 --- /dev/null +++ b/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.md5 @@ -0,0 +1 @@ +5031c2052734cd2708fb63cb02c8a3d4 \ No newline at end of file diff --git a/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.svg b/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.svg new file mode 100644 index 0000000..da5eef5 --- /dev/null +++ b/classControllerUI_af0365e8a34ddcc4b00985fa0c95a5d65_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ControllerUI::clear + + +Node1 + + +ControllerUI::clear + + + + + +Node2 + + +ControllerUI::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.map b/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.map new file mode 100644 index 0000000..0faa6ae --- /dev/null +++ b/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.md5 b/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.md5 new file mode 100644 index 0000000..d01cd01 --- /dev/null +++ b/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.md5 @@ -0,0 +1 @@ +6cdfc387715f5a66e6730ac0fc84225d \ No newline at end of file diff --git a/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.svg b/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.svg new file mode 100644 index 0000000..4f770ba --- /dev/null +++ b/classControllerUI_af385bdf29e1075733d91b845fb771506_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ControllerUI::blink + + +Node1 + + +ControllerUI::blink + + + + + +Node2 + + +ControllerUI::setCursor + + + + + +Node1->Node2 + + + + + + + + diff --git a/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.map b/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.map new file mode 100644 index 0000000..187baa8 --- /dev/null +++ b/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.md5 b/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.md5 new file mode 100644 index 0000000..457d407 --- /dev/null +++ b/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.md5 @@ -0,0 +1 @@ +3fe016a5ed5e635d6a1b33dc5e011641 \ No newline at end of file diff --git a/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.svg b/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.svg new file mode 100644 index 0000000..24ee10e --- /dev/null +++ b/classControllerUI_af385bdf29e1075733d91b845fb771506_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + +ControllerUI::blink + + +Node1 + + +ControllerUI::blink + + + + + +Node2 + + +CharDisplayUI::draw + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node1->Node3 + + + + + + + + diff --git a/classController__coll__graph.map b/classController__coll__graph.map new file mode 100644 index 0000000..4bab787 --- /dev/null +++ b/classController__coll__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classController__coll__graph.md5 b/classController__coll__graph.md5 new file mode 100644 index 0000000..2f9df4b --- /dev/null +++ b/classController__coll__graph.md5 @@ -0,0 +1 @@ +069dbc5c5c0f2805f5b8aa42d901d863 \ No newline at end of file diff --git a/classController__coll__graph.svg b/classController__coll__graph.svg new file mode 100644 index 0000000..9c52d91 --- /dev/null +++ b/classController__coll__graph.svg @@ -0,0 +1,59 @@ + + + + + + +Controller + + +Node1 + + +Controller + + + + + +Node2 + + +PID + + + + + +Node2->Node1 + + + + + + pid + + + +Node3 + + +ConfigStore + + + + + +Node3->Node1 + + + + + + cs + + + diff --git a/classController__inherit__graph.map b/classController__inherit__graph.map new file mode 100644 index 0000000..7bf5469 --- /dev/null +++ b/classController__inherit__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classController__inherit__graph.md5 b/classController__inherit__graph.md5 new file mode 100644 index 0000000..f19ec70 --- /dev/null +++ b/classController__inherit__graph.md5 @@ -0,0 +1 @@ +667db7bdd5f7801bd0b3439d98dd14be \ No newline at end of file diff --git a/classController__inherit__graph.svg b/classController__inherit__graph.svg new file mode 100644 index 0000000..9c5f705 --- /dev/null +++ b/classController__inherit__graph.svg @@ -0,0 +1,93 @@ + + + + + + +Controller + + +Node1 + + +Controller + + + + + +Node2 + + +FlowController + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Humidistat + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +CascadeHumidistat + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +SingleHumidistat + + + + + +Node3->Node5 + + + + + + + + diff --git a/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.map b/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.map new file mode 100644 index 0000000..9976f5d --- /dev/null +++ b/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.md5 b/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.md5 new file mode 100644 index 0000000..42605fb --- /dev/null +++ b/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.md5 @@ -0,0 +1 @@ +2ef1c65b7a02b8747fb9ede0d6ce5c71 \ No newline at end of file diff --git a/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.svg b/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.svg new file mode 100644 index 0000000..83cf7e4 --- /dev/null +++ b/classController_a097a40310e7beb937f7cdcabb2246877_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +Controller::getConfigStore + + +Node1 + + +Controller::getConfigStore + + + + + +Node2 + + +CharDisplayUI::drawInfo + + + + + +Node1->Node2 + + + + + + + + diff --git a/classDHTHumiditySensor-members.html b/classDHTHumiditySensor-members.html new file mode 100644 index 0000000..36a5e5e --- /dev/null +++ b/classDHTHumiditySensor-members.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
DHTHumiditySensor Member List
+
+
+ +

This is the complete list of members for DHTHumiditySensor, including all inherited members.

+ + + + + + + +
begin()DHTHumiditySensor
dhtDHTHumiditySensorprivate
DHTHumiditySensor(DHT *dht)DHTHumiditySensorexplicit
getHumidity() constDHTHumiditySensor
getTemperature() constDHTHumiditySensor
readSample()DHTHumiditySensor
+
+ + + + diff --git a/classDHTHumiditySensor.html b/classDHTHumiditySensor.html new file mode 100644 index 0000000..5181dd3 --- /dev/null +++ b/classDHTHumiditySensor.html @@ -0,0 +1,281 @@ + + + + + + + +Humidistat: DHTHumiditySensor Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
DHTHumiditySensor Class Reference
+
+
+ +

Implementation of the HumiditySensor interface for the DHT22/AM2302 sensor. + More...

+ +

#include <DHTHumiditySensor.h>

+ + + + + + + + + + + + +

+Public Member Functions

 DHTHumiditySensor (DHT *dht)
 
double getHumidity () const
 
double getTemperature () const
 
void begin ()
 
void readSample ()
 
+ + + +

+Private Attributes

DHT & dht
 
+

Detailed Description

+

Implementation of the HumiditySensor interface for the DHT22/AM2302 sensor.

+ +

Definition at line 7 of file DHTHumiditySensor.h.

+

Constructor & Destructor Documentation

+ +

◆ DHTHumiditySensor()

+ +
+
+ + + + + +
+ + + + + + + +
DHTHumiditySensor::DHTHumiditySensor (DHT * dht)
+
+explicit
+
+ +

Definition at line 3 of file DHTHumiditySensor.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + + + +
void DHTHumiditySensor::begin ()
+
+ +

Definition at line 13 of file DHTHumiditySensor.cpp.

+ +
+
+ +

◆ getHumidity()

+ +
+
+ + + + + + + +
double DHTHumiditySensor::getHumidity () const
+
+ +

Definition at line 5 of file DHTHumiditySensor.cpp.

+ +
+
+ +

◆ getTemperature()

+ +
+
+ + + + + + + +
double DHTHumiditySensor::getTemperature () const
+
+ +

Definition at line 9 of file DHTHumiditySensor.cpp.

+ +
+
+ +

◆ readSample()

+ +
+
+ + + + + + + +
void DHTHumiditySensor::readSample ()
+
+ +

Definition at line 17 of file DHTHumiditySensor.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ dht

+ +
+
+ + + + + +
+ + + + +
DHT& DHTHumiditySensor::dht
+
+private
+
+ +

Definition at line 9 of file DHTHumiditySensor.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classDHTHumiditySensor.js b/classDHTHumiditySensor.js new file mode 100644 index 0000000..f9fde0d --- /dev/null +++ b/classDHTHumiditySensor.js @@ -0,0 +1,9 @@ +var classDHTHumiditySensor = +[ + [ "DHTHumiditySensor", "classDHTHumiditySensor.html#a674bbed48b7526897e578557c203ccd0", null ], + [ "begin", "classDHTHumiditySensor.html#a6f3c44549a548da9e10d0e9320935132", null ], + [ "getHumidity", "classDHTHumiditySensor.html#a0a3cbf12af517882be5661014bd92e7b", null ], + [ "getTemperature", "classDHTHumiditySensor.html#a0dc4854afba7cff9a8145afc2cc68c81", null ], + [ "readSample", "classDHTHumiditySensor.html#a00eb12e6e2bc051bea1d82992fe96ec2", null ], + [ "dht", "classDHTHumiditySensor.html#a5bccc6e4e21824cf2c37bdbb23507280", null ] +]; \ No newline at end of file diff --git a/classEEPROMConfig-members.html b/classEEPROMConfig-members.html new file mode 100644 index 0000000..947ff68 --- /dev/null +++ b/classEEPROMConfig-members.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
EEPROMConfig Member List
+
+
+ +

This is the complete list of members for EEPROMConfig, including all inherited members.

+ + + + + + + +
addressEEPROMConfigprivate
configStoreEEPROMConfig
EEPROMConfig()EEPROMConfig
load()EEPROMConfig
reset()EEPROMConfig
save() constEEPROMConfig
+
+ + + + diff --git a/classEEPROMConfig.html b/classEEPROMConfig.html new file mode 100644 index 0000000..bd5b290 --- /dev/null +++ b/classEEPROMConfig.html @@ -0,0 +1,318 @@ + + + + + + + +Humidistat: EEPROMConfig Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
EEPROMConfig Class Reference
+
+
+ +

Load/save an (internal) ConfigStore in EEPROM. + More...

+ +

#include <EEPROMConfig.h>

+
+Collaboration diagram for EEPROMConfig:
+
+
+
[legend]
+ + + + + + + + + + + + + + +

+Public Member Functions

 EEPROMConfig ()
 Constructor.
 
bool load ()
 Load config values from EEPROM into configStore.
 
uint16_t save () const
 Saves current content of configStore into EEPROM.
 
void reset ()
 Reset the config store: overwrite the configStore with the default values.
 
+ + + +

+Public Attributes

ConfigStore configStore
 
+ + + +

+Private Attributes

uint8_t address = config::EEPROMAddress
 
+

Detailed Description

+

Load/save an (internal) ConfigStore in EEPROM.

+ +

Definition at line 60 of file EEPROMConfig.h.

+

Constructor & Destructor Documentation

+ +

◆ EEPROMConfig()

+ +
+
+ + + + + + + +
EEPROMConfig::EEPROMConfig ()
+
+ +

Constructor.

+ +

Definition at line 25 of file EEPROMConfig.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Function Documentation

+ +

◆ load()

+ +
+
+ + + + + + + +
bool EEPROMConfig::load ()
+
+ +

Load config values from EEPROM into configStore.

+
Returns
1 if valid data was read, 0 if not
+ +

Definition at line 5 of file EEPROMConfig.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ reset()

+ +
+
+ + + + + + + +
void EEPROMConfig::reset ()
+
+ +

Reset the config store: overwrite the configStore with the default values.

+ +

Definition at line 29 of file EEPROMConfig.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ save()

+ +
+
+ + + + + + + +
uint16_t EEPROMConfig::save () const
+
+ +

Saves current content of configStore into EEPROM.

+
Returns
number of bytes written
+ +

Definition at line 21 of file EEPROMConfig.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ address

+ +
+
+ + + + + +
+ + + + +
uint8_t EEPROMConfig::address = config::EEPROMAddress
+
+private
+
+ +

Definition at line 62 of file EEPROMConfig.h.

+ +
+
+ +

◆ configStore

+ +
+
+ + + + +
ConfigStore EEPROMConfig::configStore
+
+ +

Definition at line 65 of file EEPROMConfig.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classEEPROMConfig.js b/classEEPROMConfig.js new file mode 100644 index 0000000..6d2ccf1 --- /dev/null +++ b/classEEPROMConfig.js @@ -0,0 +1,9 @@ +var classEEPROMConfig = +[ + [ "EEPROMConfig", "classEEPROMConfig.html#af870a201def01a3ac797f240a8e96188", null ], + [ "load", "classEEPROMConfig.html#a88ca7504a4c1d8ed44e3c37ed2764ba3", null ], + [ "reset", "classEEPROMConfig.html#a389d1170c790427a9d5fb6643c340b21", null ], + [ "save", "classEEPROMConfig.html#a3ccccd29dcfe0a56152c2d9382fa2f0d", null ], + [ "address", "classEEPROMConfig.html#a272a99cab90d4d57be569ed1d603a530", null ], + [ "configStore", "classEEPROMConfig.html#ae252948f13098dbb66d19758d1fcb400", null ] +]; \ No newline at end of file diff --git a/classEEPROMConfig__coll__graph.map b/classEEPROMConfig__coll__graph.map new file mode 100644 index 0000000..7b2b106 --- /dev/null +++ b/classEEPROMConfig__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classEEPROMConfig__coll__graph.md5 b/classEEPROMConfig__coll__graph.md5 new file mode 100644 index 0000000..310642d --- /dev/null +++ b/classEEPROMConfig__coll__graph.md5 @@ -0,0 +1 @@ +b27785046985c2928d537218468ebf1b \ No newline at end of file diff --git a/classEEPROMConfig__coll__graph.svg b/classEEPROMConfig__coll__graph.svg new file mode 100644 index 0000000..b3694c8 --- /dev/null +++ b/classEEPROMConfig__coll__graph.svg @@ -0,0 +1,40 @@ + + + + + + +EEPROMConfig + + +Node1 + + +EEPROMConfig + + + + + +Node2 + + +ConfigStore + + + + + +Node2->Node1 + + + + + + configStore + + + diff --git a/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.map b/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.map new file mode 100644 index 0000000..11a5aeb --- /dev/null +++ b/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.md5 b/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.md5 new file mode 100644 index 0000000..c09e759 --- /dev/null +++ b/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.md5 @@ -0,0 +1 @@ +51ad49b9bdcb33fdaf5a63d4dbfd346a \ No newline at end of file diff --git a/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.svg b/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.svg new file mode 100644 index 0000000..f8f04ea --- /dev/null +++ b/classEEPROMConfig_a389d1170c790427a9d5fb6643c340b21_icgraph.svg @@ -0,0 +1,95 @@ + + + + + + +EEPROMConfig::reset + + +Node1 + + +EEPROMConfig::reset + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +EEPROMConfig::load + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +EEPROMConfig::EEPROMConfig + + + + + +Node4->Node5 + + + + + + + + diff --git a/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.map b/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.map new file mode 100644 index 0000000..4255980 --- /dev/null +++ b/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.md5 b/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.md5 new file mode 100644 index 0000000..abb4d15 --- /dev/null +++ b/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.md5 @@ -0,0 +1 @@ +09c216561c814462a1e54e80d40d682c \ No newline at end of file diff --git a/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.svg b/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.svg new file mode 100644 index 0000000..f6d6f73 --- /dev/null +++ b/classEEPROMConfig_a3ccccd29dcfe0a56152c2d9382fa2f0d_icgraph.svg @@ -0,0 +1,95 @@ + + + + + + +EEPROMConfig::save + + +Node1 + + +EEPROMConfig::save + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +EEPROMConfig::load + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +EEPROMConfig::EEPROMConfig + + + + + +Node4->Node5 + + + + + + + + diff --git a/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.map b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.map new file mode 100644 index 0000000..40d1e92 --- /dev/null +++ b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.md5 b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.md5 new file mode 100644 index 0000000..05f3f4a --- /dev/null +++ b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.md5 @@ -0,0 +1 @@ +1226273f481edf198d7e8c0f0dfdcd52 \ No newline at end of file diff --git a/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.svg b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.svg new file mode 100644 index 0000000..bce7cff --- /dev/null +++ b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + +EEPROMConfig::load + + +Node1 + + +EEPROMConfig::load + + + + + +Node2 + + +EEPROMConfig::reset + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +EEPROMConfig::save + + + + + +Node1->Node3 + + + + + + + + diff --git a/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.map b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.map new file mode 100644 index 0000000..b180637 --- /dev/null +++ b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.md5 b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.md5 new file mode 100644 index 0000000..5cd9ff6 --- /dev/null +++ b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.md5 @@ -0,0 +1 @@ +ad84d053bdc492bec50ca0a4912dce5c \ No newline at end of file diff --git a/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.svg b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.svg new file mode 100644 index 0000000..7416c50 --- /dev/null +++ b/classEEPROMConfig_a88ca7504a4c1d8ed44e3c37ed2764ba3_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +EEPROMConfig::load + + +Node1 + + +EEPROMConfig::load + + + + + +Node2 + + +EEPROMConfig::EEPROMConfig + + + + + +Node1->Node2 + + + + + + + + diff --git a/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.map b/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.map new file mode 100644 index 0000000..4d247f7 --- /dev/null +++ b/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.md5 b/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.md5 new file mode 100644 index 0000000..712605e --- /dev/null +++ b/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.md5 @@ -0,0 +1 @@ +df3d5c25f1d075b61c6c21a2f62a8ee5 \ No newline at end of file diff --git a/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.svg b/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.svg new file mode 100644 index 0000000..daa9382 --- /dev/null +++ b/classEEPROMConfig_af870a201def01a3ac797f240a8e96188_cgraph.svg @@ -0,0 +1,75 @@ + + + + + + +EEPROMConfig::EEPROMConfig + + +Node1 + + +EEPROMConfig::EEPROMConfig + + + + + +Node2 + + +EEPROMConfig::load + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +EEPROMConfig::reset + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +EEPROMConfig::save + + + + + +Node2->Node4 + + + + + + + + diff --git a/classFlowController-members.html b/classFlowController-members.html new file mode 100644 index 0000000..797463b --- /dev/null +++ b/classFlowController-members.html @@ -0,0 +1,133 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowController Member List
+
+
+ +

This is the complete list of members for FlowController, including all inherited members.

+ + + + + + + + + + + + + + + + + +
activeController
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)Controller
csControllerprotected
cvController
FlowController(const FlowSensor *fs, const ConfigStore *cs, uint8_t solenoidPin, uint8_t pwmRes)FlowController
fsFlowControllerprivate
getConfigStore()Controller
getTerms(double &pTerm, double &iTerm, double &dTerm) constController
pidControllerprotected
pvController
pwmResFlowControllerprivate
sensorLastReadControllerprotected
solenoidPinFlowControllerprivate
spController
update()FlowController
updatePIDParameters()FlowController
+
+ + + + diff --git a/classFlowController.html b/classFlowController.html new file mode 100644 index 0000000..1d2c174 --- /dev/null +++ b/classFlowController.html @@ -0,0 +1,377 @@ + + + + + + + +Humidistat: FlowController Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
FlowController Class Reference
+
+
+ +

Controls flow. Holds a reference to a FlowSensor instance. + More...

+ +

#include <FlowController.h>

+
+Inheritance diagram for FlowController:
+
+
+
[legend]
+
+Collaboration diagram for FlowController:
+
+
+
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FlowController (const FlowSensor *fs, const ConfigStore *cs, uint8_t solenoidPin, uint8_t pwmRes)
 Constructor.
 
void update ()
 
void updatePIDParameters ()
 
- Public Member Functions inherited from Controller
 Controller (const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
 Constructor.
 
void getTerms (double &pTerm, double &iTerm, double &dTerm) const
 Get the three PID terms by reference.
 
void update ()
 Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.
 
void updatePIDParameters ()
 Update the PID parameters from the configStore.
 
const ConfigStoregetConfigStore ()
 Get a pointer to the ConfigStore instance.
 
+ + + + + + + +

+Private Attributes

const FlowSensorfs
 
const uint8_t solenoidPin
 
const uint8_t pwmRes
 
+ + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from Controller
bool active = false
 
double pv = 0
 Process variable.
 
double sp
 Setpoint.
 
double cv
 Control variable.
 
- Protected Attributes inherited from Controller
PID pid
 
const ConfigStorecs
 
unsigned long sensorLastRead = 0
 
+

Detailed Description

+

Controls flow. Holds a reference to a FlowSensor instance.

+ +

Definition at line 11 of file FlowController.h.

+

Constructor & Destructor Documentation

+ +

◆ FlowController()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
FlowController::FlowController (const FlowSensor * fs,
const ConfigStore * cs,
uint8_t solenoidPin,
uint8_t pwmRes )
+
+ +

Constructor.

+
Parameters
+ + + + + +
fsPointer to a FlowSensor instance
csPointer to a ConfigStore instance
solenoidPinSolenoid pin
pwmResPWM resolution (bits)
+
+
+ +

Definition at line 5 of file FlowController.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ update()

+ +
+
+ + + + + + + +
void FlowController::update ()
+
+ +

Definition at line 9 of file FlowController.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ updatePIDParameters()

+ +
+
+ + + + + + + +
void FlowController::updatePIDParameters ()
+
+ +

Definition at line 28 of file FlowController.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ fs

+ +
+
+ + + + + +
+ + + + +
const FlowSensor& FlowController::fs
+
+private
+
+ +

Definition at line 13 of file FlowController.h.

+ +
+
+ +

◆ pwmRes

+ +
+
+ + + + + +
+ + + + +
const uint8_t FlowController::pwmRes
+
+private
+
+ +

Definition at line 15 of file FlowController.h.

+ +
+
+ +

◆ solenoidPin

+ +
+
+ + + + + +
+ + + + +
const uint8_t FlowController::solenoidPin
+
+private
+
+ +

Definition at line 14 of file FlowController.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classFlowController.js b/classFlowController.js new file mode 100644 index 0000000..39891c6 --- /dev/null +++ b/classFlowController.js @@ -0,0 +1,9 @@ +var classFlowController = +[ + [ "FlowController", "classFlowController.html#a9b73926698854665b106b25b1aeceb4c", null ], + [ "update", "classFlowController.html#a67e791323a0cd95c97266135ba2ecde2", null ], + [ "updatePIDParameters", "classFlowController.html#a20a5cb870095042fc47e60866675bc07", null ], + [ "fs", "classFlowController.html#a897b25ddd823a6019955a3787ec94a0e", null ], + [ "pwmRes", "classFlowController.html#a3fb3606bf4cd3df8a65291a347e33179", null ], + [ "solenoidPin", "classFlowController.html#afa75463316137685eea0754df2b98a71", null ] +]; \ No newline at end of file diff --git a/classFlowController__coll__graph.map b/classFlowController__coll__graph.map new file mode 100644 index 0000000..fc3fa8a --- /dev/null +++ b/classFlowController__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classFlowController__coll__graph.md5 b/classFlowController__coll__graph.md5 new file mode 100644 index 0000000..bbb9021 --- /dev/null +++ b/classFlowController__coll__graph.md5 @@ -0,0 +1 @@ +ee7c66ddac198c9b1c04b01cbfe419fc \ No newline at end of file diff --git a/classFlowController__coll__graph.svg b/classFlowController__coll__graph.svg new file mode 100644 index 0000000..7052274 --- /dev/null +++ b/classFlowController__coll__graph.svg @@ -0,0 +1,96 @@ + + + + + + +FlowController + + +Node1 + + +FlowController + + + + + +Node2 + + +Controller + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +PID + + + + + +Node3->Node2 + + + + + + pid + + + +Node4 + + +ConfigStore + + + + + +Node4->Node2 + + + + + + cs + + + +Node5 + + +FlowSensor + + + + + +Node5->Node1 + + + + + + fs + + + diff --git a/classFlowController__inherit__graph.map b/classFlowController__inherit__graph.map new file mode 100644 index 0000000..7bbd947 --- /dev/null +++ b/classFlowController__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classFlowController__inherit__graph.md5 b/classFlowController__inherit__graph.md5 new file mode 100644 index 0000000..e19c270 --- /dev/null +++ b/classFlowController__inherit__graph.md5 @@ -0,0 +1 @@ +3b1d170e2889d7863096803b234026bb \ No newline at end of file diff --git a/classFlowController__inherit__graph.svg b/classFlowController__inherit__graph.svg new file mode 100644 index 0000000..338a07c --- /dev/null +++ b/classFlowController__inherit__graph.svg @@ -0,0 +1,39 @@ + + + + + + +FlowController + + +Node1 + + +FlowController + + + + + +Node2 + + +Controller + + + + + +Node2->Node1 + + + + + + + + diff --git a/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.map b/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.map new file mode 100644 index 0000000..83c52da --- /dev/null +++ b/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.md5 b/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.md5 new file mode 100644 index 0000000..c7d454d --- /dev/null +++ b/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.md5 @@ -0,0 +1 @@ +39cd588872d5794f6dc9697fa7a3e3b8 \ No newline at end of file diff --git a/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.svg b/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.svg new file mode 100644 index 0000000..2c8c062 --- /dev/null +++ b/classFlowController_a20a5cb870095042fc47e60866675bc07_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + +FlowController::updatePIDParameters + + +Node1 + + +FlowController::updatePIDParameters + + + + + +Node2 + + +PID::setGains + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +PID::init + + + + + +Node2->Node3 + + + + + + + + diff --git a/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.map b/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.map new file mode 100644 index 0000000..dc1ce2a --- /dev/null +++ b/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.md5 b/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.md5 new file mode 100644 index 0000000..398990c --- /dev/null +++ b/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.md5 @@ -0,0 +1 @@ +b2b19d591610ae2c2bca42e5c1d517b0 \ No newline at end of file diff --git a/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.svg b/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.svg new file mode 100644 index 0000000..0795b04 --- /dev/null +++ b/classFlowController_a20a5cb870095042fc47e60866675bc07_icgraph.svg @@ -0,0 +1,40 @@ + + + + + + +FlowController::updatePIDParameters + + +Node1 + + +FlowController::updatePIDParameters + + + + + +Node2 + + +CascadeHumidistat:: +updatePIDParameters + + + + + +Node1->Node2 + + + + + + + + diff --git a/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.map b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.map new file mode 100644 index 0000000..5462505 --- /dev/null +++ b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.map @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.md5 b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.md5 new file mode 100644 index 0000000..abbf59f --- /dev/null +++ b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.md5 @@ -0,0 +1 @@ +ea969766e2e7312c2c32f0f2b4822394 \ No newline at end of file diff --git a/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.svg b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.svg new file mode 100644 index 0000000..2a126a2 --- /dev/null +++ b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_cgraph.svg @@ -0,0 +1,147 @@ + + + + + + +FlowController::update + + +Node1 + + +FlowController::update + + + + + +Node2 + + +PID::compute + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +ipow + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +FlowSensor::readFlowrate + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +PID::setAuto + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +PID::clip + + + + + +Node2->Node3 + + + + + + + + +Node4->Node4 + + + + + + + + +Node5->Node4 + + + + + + + + +Node7 + + +PID::init + + + + + +Node6->Node7 + + + + + + + + diff --git a/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.map b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.map new file mode 100644 index 0000000..262c1f5 --- /dev/null +++ b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.md5 b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.md5 new file mode 100644 index 0000000..fa1276d --- /dev/null +++ b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.md5 @@ -0,0 +1 @@ +b080a84d52800d53a0e6fa8b4d4209f7 \ No newline at end of file diff --git a/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.svg b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.svg new file mode 100644 index 0000000..f72664a --- /dev/null +++ b/classFlowController_a67e791323a0cd95c97266135ba2ecde2_icgraph.svg @@ -0,0 +1,40 @@ + + + + + + +FlowController::update + + +Node1 + + +FlowController::update + + + + + +Node2 + + +CascadeHumidistat:: +update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classFlowSensor-members.html b/classFlowSensor-members.html new file mode 100644 index 0000000..428d265 --- /dev/null +++ b/classFlowSensor-members.html @@ -0,0 +1,121 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
FlowSensor Member List
+
+
+ +

This is the complete list of members for FlowSensor, including all inherited members.

+ + + + + +
coeffsFlowSensorprivatestatic
FlowSensor(uint8_t pin)FlowSensorexplicit
pinFlowSensorprivate
readFlowrate() constFlowSensor
+
+ + + + diff --git a/classFlowSensor.html b/classFlowSensor.html new file mode 100644 index 0000000..15d13d3 --- /dev/null +++ b/classFlowSensor.html @@ -0,0 +1,283 @@ + + + + + + + +Humidistat: FlowSensor Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
FlowSensor Class Reference
+
+
+ +

Read flow rate using a Omron D6F-P0010 MEMS flow sensor. + More...

+ +

#include <FlowSensor.h>

+ + + + + + + + +

+Public Member Functions

 FlowSensor (uint8_t pin)
 Constructor.
 
double readFlowrate () const
 Read the flow rate.
 
+ + + +

+Private Attributes

const uint8_t pin
 
+ + + + +

+Static Private Attributes

static constexpr double coeffs []
 Coefficients of the polynomial approximation to the sensor response (and voltage mapping)
 
+

Detailed Description

+

Read flow rate using a Omron D6F-P0010 MEMS flow sensor.

+ +

Definition at line 9 of file FlowSensor.h.

+

Constructor & Destructor Documentation

+ +

◆ FlowSensor()

+ +
+
+ + + + + +
+ + + + + + + +
FlowSensor::FlowSensor (uint8_t pin)
+
+explicit
+
+ +

Constructor.

+
Parameters
+ + +
pinSensor pin number
+
+
+ +

Definition at line 6 of file FlowSensor.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ readFlowrate()

+ +
+
+ + + + + + + +
double FlowSensor::readFlowrate () const
+
+ +

Read the flow rate.

+
Returns
flow rate (L/min)
+ +

Definition at line 8 of file FlowSensor.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ coeffs

+ +
+
+ + + + + +
+ + + + +
double FlowSensor::coeffs[]
+
+staticconstexprprivate
+
+Initial value:
= {
+
0.094003 * ipow(3.3 / 1023, 5),
+
-0.564312 * ipow(3.3 / 1023, 4),
+
1.374705 * ipow(3.3 / 1023, 3),
+
-1.601495 * ipow(3.3 / 1023, 2),
+
1.060657 / 1023 * 3.3,
+
-0.269996,
+
}
+
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
+

Coefficients of the polynomial approximation to the sensor response (and voltage mapping)

+ +

Definition at line 13 of file FlowSensor.h.

+ +
+
+ +

◆ pin

+ +
+
+ + + + + +
+ + + + +
const uint8_t FlowSensor::pin
+
+private
+
+ +

Definition at line 11 of file FlowSensor.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classFlowSensor.js b/classFlowSensor.js new file mode 100644 index 0000000..a666fbb --- /dev/null +++ b/classFlowSensor.js @@ -0,0 +1,7 @@ +var classFlowSensor = +[ + [ "FlowSensor", "classFlowSensor.html#a9dbf60ea4661fb10c01916e604d2e79a", null ], + [ "readFlowrate", "classFlowSensor.html#af13c74f7fd6fed9e163292e2b840ca8e", null ], + [ "coeffs", "classFlowSensor.html#a0a564c7e779a09d198748307bb36d47d", null ], + [ "pin", "classFlowSensor.html#a7a85d59fc135a3eaa46b33d09e1e828c", null ] +]; \ No newline at end of file diff --git a/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.map b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.map new file mode 100644 index 0000000..cfd154f --- /dev/null +++ b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.map @@ -0,0 +1,6 @@ + + + + + + diff --git a/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.md5 b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.md5 new file mode 100644 index 0000000..ff90a9a --- /dev/null +++ b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.md5 @@ -0,0 +1 @@ +a7b2e9f425f9f6025221f8a6d74f78c6 \ No newline at end of file diff --git a/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.svg b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.svg new file mode 100644 index 0000000..dbc1cd7 --- /dev/null +++ b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_cgraph.svg @@ -0,0 +1,48 @@ + + + + + + +FlowSensor::readFlowrate + + +Node1 + + +FlowSensor::readFlowrate + + + + + +Node2 + + +ipow + + + + + +Node1->Node2 + + + + + + + + +Node2->Node2 + + + + + + + + diff --git a/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.map b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.map new file mode 100644 index 0000000..1c0e383 --- /dev/null +++ b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.md5 b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.md5 new file mode 100644 index 0000000..6ae3f2b --- /dev/null +++ b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.md5 @@ -0,0 +1 @@ +3e0552fe8c5105a85719db45974fc07a \ No newline at end of file diff --git a/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.svg b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.svg new file mode 100644 index 0000000..0d0c165 --- /dev/null +++ b/classFlowSensor_af13c74f7fd6fed9e163292e2b840ca8e_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + +FlowSensor::readFlowrate + + +Node1 + + +FlowSensor::readFlowrate + + + + + +Node2 + + +FlowController::update + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +CascadeHumidistat:: +update + + + + + +Node2->Node3 + + + + + + + + diff --git a/classGraphicalDisplayUI-members.html b/classGraphicalDisplayUI-members.html new file mode 100644 index 0000000..8a6f508 --- /dev/null +++ b/classGraphicalDisplayUI-members.html @@ -0,0 +1,177 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
GraphicalDisplayUI< Humidistat_t > Member List
+
+
+ +

This is the complete list of members for GraphicalDisplayUI< Humidistat_t >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Action enum nameGraphicalDisplayUI< Humidistat_t >private
adjustStepControllerUIprotected
adjustValue(double delta, double &value, uint8_t min, uint8_t max)ControllerUIprotectedstatic
begin() overrideGraphicalDisplayUI< Humidistat_t >inlinevirtual
blink(uint8_t col, uint8_t row, const char *buf)ControllerUIprotected
blinkIntervalControllerUIprivate
buttonDebounceIntervalControllerUIprivate
buttonReaderControllerUIprivate
clear() overrideGraphicalDisplayUI< Humidistat_t >inlineprivatevirtual
configParsGraphicalDisplayUI< Humidistat_t >private
configSaveCooldownGraphicalDisplayUI< Humidistat_t >private
configSaveTimerGraphicalDisplayUI< Humidistat_t >private
ControllerUI(Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)ControllerUIexplicitprotected
currentActionGraphicalDisplayUI< Humidistat_t >private
currentDigitGraphicalDisplayUI< Humidistat_t >private
currentParGraphicalDisplayUI< Humidistat_t >private
currentSelectionGraphicalDisplayUI< Humidistat_t >private
currentSPProfileGraphicalDisplayUI< Humidistat_t >private
currentTabGraphicalDisplayUI< Humidistat_t >private
displayControllerUIprivate
draw() overrideGraphicalDisplayUI< Humidistat_t >inlineprivatevirtual
drawConfig()GraphicalDisplayUI< Humidistat_t >inlineprivate
drawInfo() overrideGraphicalDisplayUI< Humidistat_t >inlineprivatevirtual
drawMain()GraphicalDisplayUI< Humidistat_t >private
drawMain()GraphicalDisplayUI< Humidistat_t >private
drawMain()GraphicalDisplayUI< Humidistat_t >private
DrawMainCommon()GraphicalDisplayUI< Humidistat_t >inlineprivate
drawSplash() overrideGraphicalDisplayUI< Humidistat_t >inlineprivatevirtual
drawTabBar()GraphicalDisplayUI< Humidistat_t >inlineprivate
drawTabInfo()GraphicalDisplayUI< Humidistat_t >inlineprivate
eepromConfigGraphicalDisplayUI< Humidistat_t >private
frameGraphicalDisplayUI< Humidistat_t >private
GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)GraphicalDisplayUI< Humidistat_t >inlineexplicit
GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, CascadeHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)GraphicalDisplayUI< Humidistat_t >inlineexplicit
handleInput(Buttons state, uint16_t pressedFor) overrideGraphicalDisplayUI< Humidistat_t >inlineprivatevirtual
handleInputConfig(Buttons state, uint8_t pressedFor)GraphicalDisplayUI< Humidistat_t >inlineprivate
handleInputInfo(Buttons state, uint16_t pressedFor)GraphicalDisplayUI< Humidistat_t >inlineprivate
handleInputMain(Buttons state, uint16_t pressedFor)GraphicalDisplayUI< Humidistat_t >inlineprivate
humidistatGraphicalDisplayUI< Humidistat_t >private
infoDrawnControllerUIprivate
infoDurationControllerUIprivate
inputIntervalControllerUIprivate
lastPressedControllerUIprivate
lastRefreshedControllerUIprotected
longPressDurationGraphicalDisplayUI< Humidistat_t >private
nConfigParsGraphicalDisplayUI< Humidistat_t >private
printf(uint8_t col, uint8_t row, const char *fmt, T... args)ControllerUIinlineprotected
printNTC(uint8_t col, uint8_t row, uint8_t i)ControllerUIprotected
refreshIntervalControllerUIprotected
screenClearedControllerUIprivate
Selection enum nameGraphicalDisplayUI< Humidistat_t >private
setCursor(uint8_t col, uint8_t row) overrideGraphicalDisplayUI< Humidistat_t >inlineprivatevirtual
splashDrawnControllerUIprivate
splashDurationControllerUIprivate
sprGraphicalDisplayUI< Humidistat_t >private
Tab enum nameGraphicalDisplayUI< Humidistat_t >private
toleranceControllerUIprotected
trsControllerUIprotected
u8g2GraphicalDisplayUI< Humidistat_t >private
update()ControllerUI
+
+ + + + diff --git a/classGraphicalDisplayUI.html b/classGraphicalDisplayUI.html new file mode 100644 index 0000000..b5551b9 --- /dev/null +++ b/classGraphicalDisplayUI.html @@ -0,0 +1,1601 @@ + + + + + + + +Humidistat: GraphicalDisplayUI< Humidistat_t > Class Template Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
GraphicalDisplayUI< Humidistat_t > Class Template Reference
+
+
+ +

TUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to display, an EEPROMConfig instance to edit the config, and to a Humidistat instance to show/edit its state. + More...

+ +

#include <GraphicalDisplayUI.h>

+
+Inheritance diagram for GraphicalDisplayUI< Humidistat_t >:
+
+
+
[legend]
+
+Collaboration diagram for GraphicalDisplayUI< Humidistat_t >:
+
+
+
[legend]
+ + + + + + + + + + + + + + + +

+Public Member Functions

void begin () override
 Initialize the display.
 
 GraphicalDisplayUI (U8G2 *u8g2, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)
 Constructor.
 
 GraphicalDisplayUI (U8G2 *u8g2, const ButtonReader *buttonReader, CascadeHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)
 
- Public Member Functions inherited from ControllerUI
void update ()
 Update the display and handle input: set Humidistat's setpoint.
 
+ + + + + + + + + + +

+Private Types

enum class  Tab { main +, info +, config +, _last = config + }
 Tab definitions. More...
 
enum class  Selection { par +, number +, actions + }
 Config tab selection definitions. More...
 
enum class  Action { save +, reset +, _last = reset + }
 Config tab action definitions. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Member Functions

void drawMain ()
 Draw the Main tab.
 
void drawTabInfo ()
 
void drawConfig ()
 Draw the Config tab.
 
void DrawMainCommon ()
 Draw common elements in Main tab.
 
void drawTabBar ()
 Draw the tab bar.
 
bool handleInput (Buttons state, uint16_t pressedFor) override
 Handle input.
 
bool handleInputMain (Buttons state, uint16_t pressedFor)
 Handle input on the Main tab.
 
bool handleInputInfo (Buttons state, uint16_t pressedFor)
 Handle input on the Info tab.
 
bool handleInputConfig (Buttons state, uint8_t pressedFor)
 Handle input on the Config tab.
 
void draw () override
 Draw main interface (main loop).
 
void drawSplash () override
 Draw splash screen.
 
void drawInfo () override
 Draw info screen.
 
void clear () override
 Clear screen.
 
void setCursor (uint8_t col, uint8_t row) override
 Set cursor to coordinates.
 
void drawMain ()
 
void drawMain ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

U8G2 & u8g2
 
EEPROMConfigeepromConfig
 
Humidistat_t & humidistat
 
SetpointProfileRunnerspr
 
Tab currentTab = Tab::main
 Currently active tab.
 
uint8_t currentPar = 0
 Currently active config parameter.
 
Selection currentSelection = Selection::par
 
Action currentAction = Action::save
 
uint8_t currentDigit = NUM_DIGITS - 1
 
uint8_t currentSPProfile = 0
 
uint8_t frame = 0
 Frame counter (overflows, but that's OK)
 
uint8_t configSaveTimer = 0
 Timer containing the current value of the cooldown on saving config to EEPROM.
 
const uint16_t longPressDuration = config::longPressDuration
 
const uint8_t configSaveCooldown = config::configSaveCooldown
 
const uint8_t nConfigPars
 Total number of config parameters.
 
const ConfigPar configPars [13]
 Array of config parameters.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from ControllerUI
 ControllerUI (Print *display, const ButtonReader *buttonReader, etl::span< const ThermistorReader, 4 > trs)
 Constructor.
 
void blink (uint8_t col, uint8_t row, const char *buf)
 Print blinking text.
 
void printNTC (uint8_t col, uint8_t row, uint8_t i)
 Print temperature read from thermistors. Handles NaN values as 0.
 
template<typename... T>
void printf (uint8_t col, uint8_t row, const char *fmt, T... args)
 Print formatted data to display, at (col, row). Calculates lengths and creates appropriate buffer internally.
 
- Static Protected Member Functions inherited from ControllerUI
static void adjustValue (double delta, double &value, uint8_t min, uint8_t max)
 In-/de-crement a variable, while clipping it to [min, max].
 
- Protected Attributes inherited from ControllerUI
etl::span< const ThermistorReader, 4 > trs
 
unsigned long lastRefreshed = 0
 Last time display was updated (in millis)
 
const uint16_t refreshInterval = config::refreshInterval
 
const uint8_t adjustStep = config::adjustStep
 
const double tolerance = config::tolerance
 
+

Detailed Description

+
template<class Humidistat_t>
+class GraphicalDisplayUI< Humidistat_t >

TUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to display, an EEPROMConfig instance to edit the config, and to a Humidistat instance to show/edit its state.

+
Template Parameters
+ + +
Humidistat_tEither SingleHumidistat or CascadeHumidistat
+
+
+ +

Definition at line 24 of file GraphicalDisplayUI.h.

+

Member Enumeration Documentation

+ +

◆ Action

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
enum class GraphicalDisplayUI::Action
+
+strongprivate
+
+ +

Config tab action definitions.

+ + + + +
Enumerator
save 
reset 
_last 
+ +

Definition at line 42 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ Selection

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
enum class GraphicalDisplayUI::Selection
+
+strongprivate
+
+ +

Config tab selection definitions.

+ + + + +
Enumerator
par 
number 
actions 
+ +

Definition at line 35 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ Tab

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
enum class GraphicalDisplayUI::Tab
+
+strongprivate
+
+ +

Tab definitions.

+ + + + + +
Enumerator
main 
info 
config 
_last 
+ +

Definition at line 27 of file GraphicalDisplayUI.h.

+ +
+
+

Constructor & Destructor Documentation

+ +

◆ GraphicalDisplayUI() [1/2]

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GraphicalDisplayUI< Humidistat_t >::GraphicalDisplayUI (U8G2 * u8g2,
const ButtonReader * buttonReader,
SingleHumidistat * humidistat,
etl::span< const ThermistorReader, 4 > trs,
EEPROMConfig * eepromConfig,
SetpointProfileRunner * spr )
+
+inlineexplicit
+
+ +

Constructor.

+
Parameters
+ + + + + + + +
u8g2Pointer to a U8G2 instance
buttonReaderPointer to a ButtonReader instance
humidistatPointer to a Humidistat instance
trsSpan over 4 ThermistorReader instances
eepromConfigPointer to a EEPROMConfig instance
sprPointer to a SetpointProfileRunner instance
+
+
+ +

Definition at line 521 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ GraphicalDisplayUI() [2/2]

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GraphicalDisplayUI< Humidistat_t >::GraphicalDisplayUI (U8G2 * u8g2,
const ButtonReader * buttonReader,
CascadeHumidistat * humidistat,
etl::span< const ThermistorReader, 4 > trs,
EEPROMConfig * eepromConfig,
SetpointProfileRunner * spr )
+
+inlineexplicit
+
+ +

Definition at line 534 of file GraphicalDisplayUI.h.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::begin ()
+
+inlineoverridevirtual
+
+ +

Initialize the display.

+ +

Implements ControllerUI.

+ +

Definition at line 555 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ clear()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::clear ()
+
+inlineoverrideprivatevirtual
+
+ +

Clear screen.

+ +

Implements ControllerUI.

+ +

Definition at line 504 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ draw()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::draw ()
+
+inlineoverrideprivatevirtual
+
+ +

Draw main interface (main loop).

+ +

Implements ControllerUI.

+ +

Definition at line 462 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ drawConfig()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::drawConfig ()
+
+inlineprivate
+
+ +

Draw the Config tab.

+ +

Definition at line 121 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ drawInfo()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::drawInfo ()
+
+inlineoverrideprivatevirtual
+
+ +

Draw info screen.

+ +

Implements ControllerUI.

+ +

Definition at line 502 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ drawMain() [1/3]

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::drawMain ()
+
+private
+
+ +

Draw the Main tab.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ drawMain() [2/3]

+ +
+
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< SingleHumidistat >::drawMain ()
+
+private
+
+ +

Definition at line 562 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ drawMain() [3/3]

+ +
+
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< CascadeHumidistat >::drawMain ()
+
+private
+
+ +

Definition at line 585 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ DrawMainCommon()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::DrawMainCommon ()
+
+inlineprivate
+
+ +

Draw common elements in Main tab.

+ +

Definition at line 231 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ drawSplash()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::drawSplash ()
+
+inlineoverrideprivatevirtual
+
+ +

Draw splash screen.

+ +

Implements ControllerUI.

+ +

Definition at line 488 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ drawTabBar()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::drawTabBar ()
+
+inlineprivate
+
+ +

Draw the tab bar.

+ +

Definition at line 308 of file GraphicalDisplayUI.h.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ drawTabInfo()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::drawTabInfo ()
+
+inlineprivate
+
+ +

Definition at line 74 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ handleInput()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + +
bool GraphicalDisplayUI< Humidistat_t >::handleInput (Buttons state,
uint16_t pressedFor )
+
+inlineoverrideprivatevirtual
+
+ +

Handle input.

+
Parameters
+ + + +
stateKeypad state
pressedForDuration the key has been pressed (in millis)
+
+
+
Returns
1 if button was pressed, 0 if not
+ +

Implements ControllerUI.

+ +

Definition at line 318 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ handleInputConfig()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + +
bool GraphicalDisplayUI< Humidistat_t >::handleInputConfig (Buttons state,
uint8_t pressedFor )
+
+inlineprivate
+
+ +

Handle input on the Config tab.

+ +

Definition at line 384 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ handleInputInfo()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + +
bool GraphicalDisplayUI< Humidistat_t >::handleInputInfo (Buttons state,
uint16_t pressedFor )
+
+inlineprivate
+
+ +

Handle input on the Info tab.

+ +

Definition at line 369 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ handleInputMain()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + +
bool GraphicalDisplayUI< Humidistat_t >::handleInputMain (Buttons state,
uint16_t pressedFor )
+
+inlineprivate
+
+ +

Handle input on the Main tab.

+ +

Definition at line 336 of file GraphicalDisplayUI.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ setCursor()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + +
void GraphicalDisplayUI< Humidistat_t >::setCursor (uint8_t col,
uint8_t row )
+
+inlineoverrideprivatevirtual
+
+ +

Set cursor to coordinates.

+
Parameters
+ + + +
colLCD column
rowLCD row
+
+
+ +

Implements ControllerUI.

+ +

Definition at line 508 of file GraphicalDisplayUI.h.

+ +
+
+

Member Data Documentation

+ +

◆ configPars

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const ConfigPar GraphicalDisplayUI< Humidistat_t >::configPars[13]
+
+private
+
+ +

Array of config parameters.

+ +

Definition at line 68 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ configSaveCooldown

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const uint8_t GraphicalDisplayUI< Humidistat_t >::configSaveCooldown = config::configSaveCooldown
+
+private
+
+ +

Definition at line 65 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ configSaveTimer

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
uint8_t GraphicalDisplayUI< Humidistat_t >::configSaveTimer = 0
+
+private
+
+ +

Timer containing the current value of the cooldown on saving config to EEPROM.

+ +

Definition at line 62 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ currentAction

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
Action GraphicalDisplayUI< Humidistat_t >::currentAction = Action::save
+
+private
+
+ +

Definition at line 57 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ currentDigit

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
uint8_t GraphicalDisplayUI< Humidistat_t >::currentDigit = NUM_DIGITS - 1
+
+private
+
+ +

Definition at line 58 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ currentPar

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
uint8_t GraphicalDisplayUI< Humidistat_t >::currentPar = 0
+
+private
+
+ +

Currently active config parameter.

+ +

Definition at line 55 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ currentSelection

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
Selection GraphicalDisplayUI< Humidistat_t >::currentSelection = Selection::par
+
+private
+
+ +

Definition at line 56 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ currentSPProfile

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
uint8_t GraphicalDisplayUI< Humidistat_t >::currentSPProfile = 0
+
+private
+
+ +

Definition at line 59 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ currentTab

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
Tab GraphicalDisplayUI< Humidistat_t >::currentTab = Tab::main
+
+private
+
+ +

Currently active tab.

+ +

Definition at line 54 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ eepromConfig

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
EEPROMConfig& GraphicalDisplayUI< Humidistat_t >::eepromConfig
+
+private
+
+ +

Definition at line 49 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ frame

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
uint8_t GraphicalDisplayUI< Humidistat_t >::frame = 0
+
+private
+
+ +

Frame counter (overflows, but that's OK)

+ +

Definition at line 61 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ humidistat

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
Humidistat_t& GraphicalDisplayUI< Humidistat_t >::humidistat
+
+private
+
+ +

Definition at line 50 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ longPressDuration

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const uint16_t GraphicalDisplayUI< Humidistat_t >::longPressDuration = config::longPressDuration
+
+private
+
+ +

Definition at line 64 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ nConfigPars

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const uint8_t GraphicalDisplayUI< Humidistat_t >::nConfigPars
+
+private
+
+ +

Total number of config parameters.

+ +

Definition at line 67 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ spr

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
SetpointProfileRunner& GraphicalDisplayUI< Humidistat_t >::spr
+
+private
+
+ +

Definition at line 51 of file GraphicalDisplayUI.h.

+ +
+
+ +

◆ u8g2

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
U8G2& GraphicalDisplayUI< Humidistat_t >::u8g2
+
+private
+
+ +

Definition at line 48 of file GraphicalDisplayUI.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classGraphicalDisplayUI.js b/classGraphicalDisplayUI.js new file mode 100644 index 0000000..97fa001 --- /dev/null +++ b/classGraphicalDisplayUI.js @@ -0,0 +1,54 @@ +var classGraphicalDisplayUI = +[ + [ "Action", "classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199d", [ + [ "save", "classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199da43781db5c40ecc39fd718685594f0956", null ], + [ "reset", "classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199da86266ee937d97f812a8e57d22b62ee29", null ], + [ "_last", "classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199dad07362c156b2478a01d62dad95e24f14", null ] + ] ], + [ "Selection", "classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66c", [ + [ "par", "classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66cad018268506e2868537a478629b59e7c1", null ], + [ "number", "classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66cab1bc248a7ff2b2e95569f56de68615df", null ], + [ "actions", "classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66caebb67a4271abe715344471b0f16321f6", null ] + ] ], + [ "Tab", "classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8", [ + [ "main", "classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8afad58de7366495db4650cfefac2fcd61", null ], + [ "info", "classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8acaf9b6b99962bf5c2264824231d7a40c", null ], + [ "config", "classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8a2245023265ae4cf87d02c8b6ba991139", null ], + [ "_last", "classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8ad07362c156b2478a01d62dad95e24f14", null ] + ] ], + [ "GraphicalDisplayUI", "classGraphicalDisplayUI.html#a14488d9aa73089c9b4529babe077a2a9", null ], + [ "GraphicalDisplayUI", "classGraphicalDisplayUI.html#a5a2e08fb0a787befcd52984ed0948d71", null ], + [ "begin", "classGraphicalDisplayUI.html#a8d23dbf1a27faef393f8976e0f0d4532", null ], + [ "clear", "classGraphicalDisplayUI.html#a10119a1a93c9c72e60a5ae309041900d", null ], + [ "draw", "classGraphicalDisplayUI.html#aa73a9c30736b609bcef2b75c7aed1970", null ], + [ "drawConfig", "classGraphicalDisplayUI.html#aa1797798b407f534ccaddf6304ce1a7d", null ], + [ "drawInfo", "classGraphicalDisplayUI.html#abbdc687a1a27167309340e9caa81eda5", null ], + [ "drawMain", "classGraphicalDisplayUI.html#a1c6ba21cf53a2ec496723904101fb05c", null ], + [ "drawMain", "classGraphicalDisplayUI.html#a3bb8b1b254ff8ed7af679a72b1c2e5ac", null ], + [ "drawMain", "classGraphicalDisplayUI.html#a3a5b689c690f167afb4e0ff4c5973ab4", null ], + [ "DrawMainCommon", "classGraphicalDisplayUI.html#af69808890fcfb2bd088ac73aa6f7563c", null ], + [ "drawSplash", "classGraphicalDisplayUI.html#aae6489707bbdc171057692effb3d7081", null ], + [ "drawTabBar", "classGraphicalDisplayUI.html#a85c871a16eaa3b27f170305ae0eb8ea1", null ], + [ "drawTabInfo", "classGraphicalDisplayUI.html#a41ae47f8e4d0bd909b6d2be9765cdbc4", null ], + [ "handleInput", "classGraphicalDisplayUI.html#a3e340b5f072ed6a4251069f4a408e4b0", null ], + [ "handleInputConfig", "classGraphicalDisplayUI.html#a17cd12ba983e77b6f766bac994b09f49", null ], + [ "handleInputInfo", "classGraphicalDisplayUI.html#a8f0f20c1ddf3b647f42ed92492fc959c", null ], + [ "handleInputMain", "classGraphicalDisplayUI.html#a948cf32243a585b1a88c0989efd9d474", null ], + [ "setCursor", "classGraphicalDisplayUI.html#a036a55e339ff591d1fa70c1baa474e52", null ], + [ "configPars", "classGraphicalDisplayUI.html#ada8e89861f782213d31580a46a161e58", null ], + [ "configSaveCooldown", "classGraphicalDisplayUI.html#a5594bad98dbbcce925c0851e1eeaade8", null ], + [ "configSaveTimer", "classGraphicalDisplayUI.html#a08621f13717e9cc5289f9927c63806a2", null ], + [ "currentAction", "classGraphicalDisplayUI.html#ac3a272f9a07f057a9830aed3064586c4", null ], + [ "currentDigit", "classGraphicalDisplayUI.html#ab2ff1d6587f3a7fdd1c217f8d43939c2", null ], + [ "currentPar", "classGraphicalDisplayUI.html#a6d11cdf9dd64f51998691333c398eade", null ], + [ "currentSelection", "classGraphicalDisplayUI.html#af715277009197361fcfc48995e33f7ff", null ], + [ "currentSPProfile", "classGraphicalDisplayUI.html#ae43fcaf3c2bcf534553cac7aad76ac37", null ], + [ "currentTab", "classGraphicalDisplayUI.html#a9923b8c1e5347d97de32f6eba5affec9", null ], + [ "eepromConfig", "classGraphicalDisplayUI.html#a90ea3cc65ce081ff1b2b37f6ac9e04ee", null ], + [ "frame", "classGraphicalDisplayUI.html#ae439cedf8ccb67f32aa277bbdd9e9510", null ], + [ "humidistat", "classGraphicalDisplayUI.html#a35f22a63b9e44359c0d85e705bf2e176", null ], + [ "longPressDuration", "classGraphicalDisplayUI.html#a32058d1aa48eba3465cd69a37cf1aaa7", null ], + [ "nConfigPars", "classGraphicalDisplayUI.html#a5f9366e2fd469d786226cd5906cd2d03", null ], + [ "spr", "classGraphicalDisplayUI.html#ab89bfe682717e76208ce72dc56c6a343", null ], + [ "u8g2", "classGraphicalDisplayUI.html#ada718a9e797fbf338ce4e49ae1eef1f1", null ] +]; \ No newline at end of file diff --git a/classGraphicalDisplayUI__coll__graph.map b/classGraphicalDisplayUI__coll__graph.map new file mode 100644 index 0000000..83684dc --- /dev/null +++ b/classGraphicalDisplayUI__coll__graph.map @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI__coll__graph.md5 b/classGraphicalDisplayUI__coll__graph.md5 new file mode 100644 index 0000000..c5386a3 --- /dev/null +++ b/classGraphicalDisplayUI__coll__graph.md5 @@ -0,0 +1 @@ +f1dc92f1a97152e856465487f7948d40 \ No newline at end of file diff --git a/classGraphicalDisplayUI__coll__graph.svg b/classGraphicalDisplayUI__coll__graph.svg new file mode 100644 index 0000000..e5c34fd --- /dev/null +++ b/classGraphicalDisplayUI__coll__graph.svg @@ -0,0 +1,220 @@ + + + + + + +GraphicalDisplayUI< Humidistat_t > + + +Node1 + + +GraphicalDisplayUI +< Humidistat_t > + + + + + +Node2 + + +ControllerUI + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +ButtonReader + + + + + +Node3->Node2 + + + + + + buttonReader + + + +Node4 + + +EEPROMConfig + + + + + +Node4->Node1 + + + + + + eepromConfig + + + +Node5 + + +ConfigStore + + + + + +Node5->Node4 + + + + + + configStore + + + +Node8 + + +Controller + + + + + +Node5->Node8 + + + + + + cs + + + +Node6 + + +SetpointProfileRunner + + + + + +Node6->Node1 + + + + + + spr + + + +Node7 + + +Humidistat + + + + + +Node7->Node6 + + + + + + humidistat + + + +Node8->Node7 + + + + + + + + +Node9 + + +PID + + + + + +Node9->Node8 + + + + + + pid + + + +Node10 + + +ConfigPar + + + + + +Node10->Node1 + + + + + + configPars + + + +Node11 + + +ConfigPar::Var + + + + + +Node11->Node10 + + + + + + var + + + diff --git a/classGraphicalDisplayUI__inherit__graph.map b/classGraphicalDisplayUI__inherit__graph.map new file mode 100644 index 0000000..be08951 --- /dev/null +++ b/classGraphicalDisplayUI__inherit__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI__inherit__graph.md5 b/classGraphicalDisplayUI__inherit__graph.md5 new file mode 100644 index 0000000..2ddbdb1 --- /dev/null +++ b/classGraphicalDisplayUI__inherit__graph.md5 @@ -0,0 +1 @@ +79832c2ce542b3f3f2716dddb7ccb9fc \ No newline at end of file diff --git a/classGraphicalDisplayUI__inherit__graph.svg b/classGraphicalDisplayUI__inherit__graph.svg new file mode 100644 index 0000000..fac42e5 --- /dev/null +++ b/classGraphicalDisplayUI__inherit__graph.svg @@ -0,0 +1,40 @@ + + + + + + +GraphicalDisplayUI< Humidistat_t > + + +Node1 + + +GraphicalDisplayUI +< Humidistat_t > + + + + + +Node2 + + +ControllerUI + + + + + +Node2->Node1 + + + + + + + + diff --git a/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.map b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.map new file mode 100644 index 0000000..e33e400 --- /dev/null +++ b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.map @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.md5 b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.md5 new file mode 100644 index 0000000..139effb --- /dev/null +++ b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.md5 @@ -0,0 +1 @@ +30521b297392d9e202174659f7fc74f2 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.svg b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.svg new file mode 100644 index 0000000..61043e3 --- /dev/null +++ b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_cgraph.svg @@ -0,0 +1,130 @@ + + + + + + +GraphicalDisplayUI::handleInputConfig + + +Node1 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node2 + + +ConfigPar::adjust + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ipow + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +advanceEnum + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +EEPROMConfig::reset + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +EEPROMConfig::save + + + + + +Node1->Node6 + + + + + + + + +Node2->Node3 + + + + + + + + +Node3->Node3 + + + + + + + + diff --git a/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.map b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.map new file mode 100644 index 0000000..b530103 --- /dev/null +++ b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.md5 b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.md5 new file mode 100644 index 0000000..877cc65 --- /dev/null +++ b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.md5 @@ -0,0 +1 @@ +4befe8f5d3aaecf140471b33f8c7ca56 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.svg b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.svg new file mode 100644 index 0000000..132ee58 --- /dev/null +++ b/classGraphicalDisplayUI_a17cd12ba983e77b6f766bac994b09f49_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::handleInputConfig + + +Node1 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node2 + + +GraphicalDisplayUI +::handleInput + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.map b/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.map new file mode 100644 index 0000000..d2058aa --- /dev/null +++ b/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.md5 b/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.md5 new file mode 100644 index 0000000..462fc30 --- /dev/null +++ b/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.md5 @@ -0,0 +1 @@ +7151d0e18ccc08c6237a11be2e8b38bc \ No newline at end of file diff --git a/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.svg b/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.svg new file mode 100644 index 0000000..62a06e4 --- /dev/null +++ b/classGraphicalDisplayUI_a1c6ba21cf53a2ec496723904101fb05c_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::drawMain + + +Node1 + + +GraphicalDisplayUI +::drawMain + + + + + +Node2 + + +GraphicalDisplayUI +::draw + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.map b/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.map new file mode 100644 index 0000000..1ac3006 --- /dev/null +++ b/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.map @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.md5 b/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.md5 new file mode 100644 index 0000000..7948a95 --- /dev/null +++ b/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.md5 @@ -0,0 +1 @@ +d43ff8fe27c7c56d2a99f56315ee6431 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.svg b/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.svg new file mode 100644 index 0000000..3fe1194 --- /dev/null +++ b/classGraphicalDisplayUI_a3e340b5f072ed6a4251069f4a408e4b0_cgraph.svg @@ -0,0 +1,261 @@ + + + + + + +GraphicalDisplayUI::handleInput + + +Node1 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node1->Node2 + + + + + + + + +Node8 + + +GraphicalDisplayUI +::handleInputInfo + + + + + +Node1->Node8 + + + + + + + + +Node9 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node1->Node9 + + + + + + + + +Node3 + + +ConfigPar::adjust + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +ipow + + + + + +Node2->Node4 + + + + + + + + +Node5 + + +advanceEnum + + + + + +Node2->Node5 + + + + + + + + +Node6 + + +EEPROMConfig::reset + + + + + +Node2->Node6 + + + + + + + + +Node7 + + +EEPROMConfig::save + + + + + +Node2->Node7 + + + + + + + + +Node3->Node4 + + + + + + + + +Node4->Node4 + + + + + + + + +Node8->Node5 + + + + + + + + +Node9->Node5 + + + + + + + + +Node10 + + +ControllerUI::adjustValue + + + + + +Node9->Node10 + + + + + + + + +Node11 + + +SetpointProfileRunner +::setProfile + + + + + +Node9->Node11 + + + + + + + + +Node12 + + +SetpointProfileRunner +::toggle + + + + + +Node9->Node12 + + + + + + + + diff --git a/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.map b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.map new file mode 100644 index 0000000..dd98ad4 --- /dev/null +++ b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.md5 b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.md5 new file mode 100644 index 0000000..2c9ea7c --- /dev/null +++ b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.md5 @@ -0,0 +1 @@ +dd256d1e58a3f54a5e58edfc2e7dc93e \ No newline at end of file diff --git a/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.svg b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.svg new file mode 100644 index 0000000..d4f8398 --- /dev/null +++ b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_cgraph.svg @@ -0,0 +1,103 @@ + + + + + + +GraphicalDisplayUI::drawTabInfo + + +Node1 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node2 + + +ControllerUI::printf + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +ControllerUI::printNTC + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +asprintf + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +ControllerUI::setCursor + + + + + +Node2->Node4 + + + + + + + + +Node5->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.map b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.map new file mode 100644 index 0000000..709f857 --- /dev/null +++ b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.md5 b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.md5 new file mode 100644 index 0000000..c9168fe --- /dev/null +++ b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.md5 @@ -0,0 +1 @@ +06232c0f706cbc3fc19ca94a33ca3571 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.svg b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.svg new file mode 100644 index 0000000..59590f4 --- /dev/null +++ b/classGraphicalDisplayUI_a41ae47f8e4d0bd909b6d2be9765cdbc4_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::drawTabInfo + + +Node1 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node2 + + +GraphicalDisplayUI +::draw + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.map b/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.map new file mode 100644 index 0000000..2bf3382 --- /dev/null +++ b/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.md5 b/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.md5 new file mode 100644 index 0000000..c9fd478 --- /dev/null +++ b/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.md5 @@ -0,0 +1 @@ +6f372668370616851900d4b9a0ef4cdc \ No newline at end of file diff --git a/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.svg b/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.svg new file mode 100644 index 0000000..9477e88 --- /dev/null +++ b/classGraphicalDisplayUI_a85c871a16eaa3b27f170305ae0eb8ea1_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::drawTabBar + + +Node1 + + +GraphicalDisplayUI +::drawTabBar + + + + + +Node2 + + +GraphicalDisplayUI +::draw + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.map b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.map new file mode 100644 index 0000000..a9495ed --- /dev/null +++ b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.md5 b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.md5 new file mode 100644 index 0000000..1ec6600 --- /dev/null +++ b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.md5 @@ -0,0 +1 @@ +505618c10f46fdd0711f0f0788215d36 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.svg b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.svg new file mode 100644 index 0000000..7142b77 --- /dev/null +++ b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +GraphicalDisplayUI::handleInputInfo + + +Node1 + + +GraphicalDisplayUI +::handleInputInfo + + + + + +Node2 + + +advanceEnum + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.map b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.map new file mode 100644 index 0000000..35f26f3 --- /dev/null +++ b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.md5 b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.md5 new file mode 100644 index 0000000..2f0733a --- /dev/null +++ b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.md5 @@ -0,0 +1 @@ +8971aec47b9e16b329d857a1a6f5f757 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.svg b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.svg new file mode 100644 index 0000000..bd8e178 --- /dev/null +++ b/classGraphicalDisplayUI_a8f0f20c1ddf3b647f42ed92492fc959c_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::handleInputInfo + + +Node1 + + +GraphicalDisplayUI +::handleInputInfo + + + + + +Node2 + + +GraphicalDisplayUI +::handleInput + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.map b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.map new file mode 100644 index 0000000..adca94c --- /dev/null +++ b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.md5 b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.md5 new file mode 100644 index 0000000..ed5b457 --- /dev/null +++ b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.md5 @@ -0,0 +1 @@ +3133b5a2414cd4a93fd42e3e25dad676 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.svg b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.svg new file mode 100644 index 0000000..e42f296 --- /dev/null +++ b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_cgraph.svg @@ -0,0 +1,96 @@ + + + + + + +GraphicalDisplayUI::handleInputMain + + +Node1 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node2 + + +ControllerUI::adjustValue + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +advanceEnum + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +SetpointProfileRunner +::setProfile + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +SetpointProfileRunner +::toggle + + + + + +Node1->Node5 + + + + + + + + diff --git a/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.map b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.map new file mode 100644 index 0000000..ab3380b --- /dev/null +++ b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.md5 b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.md5 new file mode 100644 index 0000000..a5a50db --- /dev/null +++ b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.md5 @@ -0,0 +1 @@ +9005665528de9b024f9c0139d85d51d0 \ No newline at end of file diff --git a/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.svg b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.svg new file mode 100644 index 0000000..668135d --- /dev/null +++ b/classGraphicalDisplayUI_a948cf32243a585b1a88c0989efd9d474_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::handleInputMain + + +Node1 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node2 + + +GraphicalDisplayUI +::handleInput + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.map b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.map new file mode 100644 index 0000000..8e6bb3a --- /dev/null +++ b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.md5 b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.md5 new file mode 100644 index 0000000..c9f3820 --- /dev/null +++ b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.md5 @@ -0,0 +1 @@ +d05b5e2df4388a59029403d30d51bfe2 \ No newline at end of file diff --git a/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.svg b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.svg new file mode 100644 index 0000000..bfe64a6 --- /dev/null +++ b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_cgraph.svg @@ -0,0 +1,103 @@ + + + + + + +GraphicalDisplayUI::drawConfig + + +Node1 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node2 + + +ConfigPar::asprint + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +ConfigPar::magnitude + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +asprintf + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +ilog10 + + + + + +Node4->Node5 + + + + + + + + +Node5->Node5 + + + + + + + + diff --git a/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.map b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.map new file mode 100644 index 0000000..f01d221 --- /dev/null +++ b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.md5 b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.md5 new file mode 100644 index 0000000..5f9e181 --- /dev/null +++ b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.md5 @@ -0,0 +1 @@ +9b94825c4527a430229636fe56588e4b \ No newline at end of file diff --git a/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.svg b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.svg new file mode 100644 index 0000000..dffe52a --- /dev/null +++ b/classGraphicalDisplayUI_aa1797798b407f534ccaddf6304ce1a7d_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +GraphicalDisplayUI::drawConfig + + +Node1 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node2 + + +GraphicalDisplayUI +::draw + + + + + +Node1->Node2 + + + + + + + + diff --git a/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.map b/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.map new file mode 100644 index 0000000..a9a8629 --- /dev/null +++ b/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.map @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.md5 b/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.md5 new file mode 100644 index 0000000..38424ff --- /dev/null +++ b/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.md5 @@ -0,0 +1 @@ +ca53ad279b76d52606861b4014c22623 \ No newline at end of file diff --git a/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.svg b/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.svg new file mode 100644 index 0000000..1be8915 --- /dev/null +++ b/classGraphicalDisplayUI_aa73a9c30736b609bcef2b75c7aed1970_cgraph.svg @@ -0,0 +1,251 @@ + + + + + + +GraphicalDisplayUI::draw + + +Node1 + + +GraphicalDisplayUI +::draw + + + + + +Node2 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node1->Node2 + + + + + + + + +Node7 + + +GraphicalDisplayUI +::drawMain + + + + + +Node1->Node7 + + + + + + + + +Node8 + + +GraphicalDisplayUI +::drawTabBar + + + + + +Node1->Node8 + + + + + + + + +Node9 + + +GraphicalDisplayUI +::drawTabInfo + + + + + +Node1->Node9 + + + + + + + + +Node3 + + +ConfigPar::asprint + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +ConfigPar::magnitude + + + + + +Node2->Node5 + + + + + + + + +Node4 + + +asprintf + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +ilog10 + + + + + +Node5->Node6 + + + + + + + + +Node6->Node6 + + + + + + + + +Node10 + + +ControllerUI::printf + + + + + +Node9->Node10 + + + + + + + + +Node12 + + +ControllerUI::printNTC + + + + + +Node9->Node12 + + + + + + + + +Node10->Node4 + + + + + + + + +Node11 + + +ControllerUI::setCursor + + + + + +Node10->Node11 + + + + + + + + +Node12->Node10 + + + + + + + + diff --git a/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.map b/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.map new file mode 100644 index 0000000..5102f3f --- /dev/null +++ b/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.md5 b/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.md5 new file mode 100644 index 0000000..10842fa --- /dev/null +++ b/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.md5 @@ -0,0 +1 @@ +0b43d5977c36563bf46b7f67a8089b1f \ No newline at end of file diff --git a/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.svg b/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.svg new file mode 100644 index 0000000..fc0eb36 --- /dev/null +++ b/classGraphicalDisplayUI_af69808890fcfb2bd088ac73aa6f7563c_cgraph.svg @@ -0,0 +1,141 @@ + + + + + + +GraphicalDisplayUI::DrawMainCommon + + +Node1 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node2 + + +ControllerUI::blink + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +SetpointProfileRunner +::getCurrentPoint + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +SetpointProfileRunner +::isRunning + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +ControllerUI::printf + + + + + +Node1->Node6 + + + + + + + + +Node3 + + +ControllerUI::setCursor + + + + + +Node2->Node3 + + + + + + + + +Node6->Node3 + + + + + + + + +Node7 + + +asprintf + + + + + +Node6->Node7 + + + + + + + + diff --git a/classHumidistat-members.html b/classHumidistat-members.html new file mode 100644 index 0000000..04e2798 --- /dev/null +++ b/classHumidistat-members.html @@ -0,0 +1,136 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Humidistat Member List
+
+
+ +

This is the complete list of members for Humidistat, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + +
activeController
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)Controller
csControllerprotected
cvController
getConfigStore()Controller
getCvMax() constHumidistat
getCvMin() constHumidistat
getHumidity() constHumidistat
getTemperature() constHumidistat
getTerms(double &pTerm, double &iTerm, double &dTerm) constController
hsHumidistatprotected
Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)Humidistat
pidControllerprotected
pvController
runCycle()Humidistatprotected
sensorLastReadControllerprotected
spController
update()Controller
updatePIDParameters()Controller
+
+ + + + diff --git a/classHumidistat.html b/classHumidistat.html new file mode 100644 index 0000000..288dea9 --- /dev/null +++ b/classHumidistat.html @@ -0,0 +1,451 @@ + + + + + + + +Humidistat: Humidistat Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Humidistat Class Reference
+
+
+ +

Base class for a humidistat. Holds a reference to a HumiditySensor instance. + More...

+ +

#include <Humidistat.h>

+
+Inheritance diagram for Humidistat:
+
+
+
[legend]
+
+Collaboration diagram for Humidistat:
+
+
+
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Humidistat (const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)
 Constructor.
 
double getHumidity () const
 Read the humidity.
 
double getTemperature () const
 Read the temperature.
 
double getCvMin () const
 
double getCvMax () const
 
- Public Member Functions inherited from Controller
 Controller (const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
 Constructor.
 
void getTerms (double &pTerm, double &iTerm, double &dTerm) const
 Get the three PID terms by reference.
 
void update ()
 Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.
 
void updatePIDParameters ()
 Update the PID parameters from the configStore.
 
const ConfigStoregetConfigStore ()
 Get a pointer to the ConfigStore instance.
 
+ + + + +

+Protected Member Functions

void runCycle ()
 Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
 
+ + + + + + + + + + +

+Protected Attributes

HumiditySensor & hs
 
- Protected Attributes inherited from Controller
PID pid
 
const ConfigStorecs
 
unsigned long sensorLastRead = 0
 
+ + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from Controller
bool active = false
 
double pv = 0
 Process variable.
 
double sp
 Setpoint.
 
double cv
 Control variable.
 
+

Detailed Description

+

Base class for a humidistat. Holds a reference to a HumiditySensor instance.

+ +

Definition at line 10 of file Humidistat.h.

+

Constructor & Destructor Documentation

+ +

◆ Humidistat()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Humidistat::Humidistat (const ConfigStore * cs,
HumiditySensor * hs,
double Kp,
double Ki,
double Kd,
double Kf,
uint16_t dt,
double cvMin,
double cvMax )
+
+ +

Constructor.

+
Parameters
+ + + + + + + + + + +
csPointer to a ConfigStore instance
hsPointer to a HumiditySensor instance
KpProportional gain
KiIntegral gain (in 1/s)
KdDerivative gain (in s)
KfFeed-forward gain
dtTimestep (in ms)
cvMinLower limit for control value
cvMaxUpper limit for control value
+
+
+ +

Definition at line 3 of file Humidistat.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getCvMax()

+ +
+
+ + + + + + + +
double Humidistat::getCvMax () const
+
+ +

Definition at line 35 of file Humidistat.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ getCvMin()

+ +
+
+ + + + + + + +
double Humidistat::getCvMin () const
+
+ +

Definition at line 31 of file Humidistat.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ getHumidity()

+ +
+
+ + + + + + + +
double Humidistat::getHumidity () const
+
+ +

Read the humidity.

+
Returns
Relative humidity (percent)
+ +

Definition at line 7 of file Humidistat.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ getTemperature()

+ +
+
+ + + + + + + +
double Humidistat::getTemperature () const
+
+ +

Read the temperature.

+
Returns
Temperature (Celsius)
+ +

Definition at line 11 of file Humidistat.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ runCycle()

+ +
+
+ + + + + +
+ + + + + + + +
void Humidistat::runCycle ()
+
+protected
+
+ +

Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.

+ +

Definition at line 15 of file Humidistat.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ hs

+ +
+
+ + + + + +
+ + + + +
HumiditySensor& Humidistat::hs
+
+protected
+
+ +

Definition at line 12 of file Humidistat.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classHumidistat.js b/classHumidistat.js new file mode 100644 index 0000000..11678d4 --- /dev/null +++ b/classHumidistat.js @@ -0,0 +1,10 @@ +var classHumidistat = +[ + [ "Humidistat", "classHumidistat.html#a3f8890823bcf559d2698d058efaebf27", null ], + [ "getCvMax", "classHumidistat.html#a4bf25f4c2465e52423379ff99aae2960", null ], + [ "getCvMin", "classHumidistat.html#a14b5fa1effc029cfb6afc43de5a44712", null ], + [ "getHumidity", "classHumidistat.html#a12c137dcc4218eabce1c78b328bc48b0", null ], + [ "getTemperature", "classHumidistat.html#add5923a18abdee988d59e3411d12ba04", null ], + [ "runCycle", "classHumidistat.html#ae30511d6477f5996de05996bdf221730", null ], + [ "hs", "classHumidistat.html#aea5e648f567fdb2e15b64c1a575aca6c", null ] +]; \ No newline at end of file diff --git a/classHumidistat__coll__graph.map b/classHumidistat__coll__graph.map new file mode 100644 index 0000000..fb24bdd --- /dev/null +++ b/classHumidistat__coll__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classHumidistat__coll__graph.md5 b/classHumidistat__coll__graph.md5 new file mode 100644 index 0000000..064c964 --- /dev/null +++ b/classHumidistat__coll__graph.md5 @@ -0,0 +1 @@ +32344e7c210d87262e9a5db26412f071 \ No newline at end of file diff --git a/classHumidistat__coll__graph.svg b/classHumidistat__coll__graph.svg new file mode 100644 index 0000000..ecb4e1c --- /dev/null +++ b/classHumidistat__coll__graph.svg @@ -0,0 +1,77 @@ + + + + + + +Humidistat + + +Node1 + + +Humidistat + + + + + +Node2 + + +Controller + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +PID + + + + + +Node3->Node2 + + + + + + pid + + + +Node4 + + +ConfigStore + + + + + +Node4->Node2 + + + + + + cs + + + diff --git a/classHumidistat__inherit__graph.map b/classHumidistat__inherit__graph.map new file mode 100644 index 0000000..08fd063 --- /dev/null +++ b/classHumidistat__inherit__graph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classHumidistat__inherit__graph.md5 b/classHumidistat__inherit__graph.md5 new file mode 100644 index 0000000..e26513b --- /dev/null +++ b/classHumidistat__inherit__graph.md5 @@ -0,0 +1 @@ +f145b7ebcfaa89751efceae376b553c5 \ No newline at end of file diff --git a/classHumidistat__inherit__graph.svg b/classHumidistat__inherit__graph.svg new file mode 100644 index 0000000..24da994 --- /dev/null +++ b/classHumidistat__inherit__graph.svg @@ -0,0 +1,75 @@ + + + + + + +Humidistat + + +Node1 + + +Humidistat + + + + + +Node3 + + +CascadeHumidistat + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +SingleHumidistat + + + + + +Node1->Node4 + + + + + + + + +Node2 + + +Controller + + + + + +Node2->Node1 + + + + + + + + diff --git a/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.map b/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.map new file mode 100644 index 0000000..f42177c --- /dev/null +++ b/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.md5 b/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.md5 new file mode 100644 index 0000000..3b53cf7 --- /dev/null +++ b/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.md5 @@ -0,0 +1 @@ +7aad5f81f3a484785e9af21f5ec95d04 \ No newline at end of file diff --git a/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.svg b/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.svg new file mode 100644 index 0000000..d8709cf --- /dev/null +++ b/classHumidistat_a12c137dcc4218eabce1c78b328bc48b0_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +Humidistat::getHumidity + + +Node1 + + +Humidistat::getHumidity + + + + + +Node2 + + +CharDisplayUI::draw + + + + + +Node1->Node2 + + + + + + + + diff --git a/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.map b/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.map new file mode 100644 index 0000000..3b26b86 --- /dev/null +++ b/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.md5 b/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.md5 new file mode 100644 index 0000000..e7415e2 --- /dev/null +++ b/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.md5 @@ -0,0 +1 @@ +b2a2b933fd0974d721f4c2e9d2745b08 \ No newline at end of file diff --git a/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.svg b/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.svg new file mode 100644 index 0000000..2ae0083 --- /dev/null +++ b/classHumidistat_a14b5fa1effc029cfb6afc43de5a44712_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +Humidistat::getCvMin + + +Node1 + + +Humidistat::getCvMin + + + + + +Node2 + + +CharDisplayUI::handleInput + + + + + +Node1->Node2 + + + + + + + + diff --git a/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.map b/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.map new file mode 100644 index 0000000..e06021a --- /dev/null +++ b/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.md5 b/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.md5 new file mode 100644 index 0000000..5645996 --- /dev/null +++ b/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.md5 @@ -0,0 +1 @@ +17a7b21ddb82b160ef20c9427b27db22 \ No newline at end of file diff --git a/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.svg b/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.svg new file mode 100644 index 0000000..b6e170a --- /dev/null +++ b/classHumidistat_a4bf25f4c2465e52423379ff99aae2960_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +Humidistat::getCvMax + + +Node1 + + +Humidistat::getCvMax + + + + + +Node2 + + +CharDisplayUI::handleInput + + + + + +Node1->Node2 + + + + + + + + diff --git a/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.map b/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.map new file mode 100644 index 0000000..456e288 --- /dev/null +++ b/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.md5 b/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.md5 new file mode 100644 index 0000000..a6c2ae2 --- /dev/null +++ b/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.md5 @@ -0,0 +1 @@ +c1a2f3325526d6e4d3670048f0833f45 \ No newline at end of file diff --git a/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.svg b/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.svg new file mode 100644 index 0000000..fb4909b --- /dev/null +++ b/classHumidistat_add5923a18abdee988d59e3411d12ba04_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +Humidistat::getTemperature + + +Node1 + + +Humidistat::getTemperature + + + + + +Node2 + + +CharDisplayUI::draw + + + + + +Node1->Node2 + + + + + + + + diff --git a/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.map b/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.map new file mode 100644 index 0000000..706c84e --- /dev/null +++ b/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.md5 b/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.md5 new file mode 100644 index 0000000..c47f7c5 --- /dev/null +++ b/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.md5 @@ -0,0 +1 @@ +947cd5f4a1a506fbd6d9322b663b9e4d \ No newline at end of file diff --git a/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.svg b/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.svg new file mode 100644 index 0000000..6c6dc10 --- /dev/null +++ b/classHumidistat_ae30511d6477f5996de05996bdf221730_cgraph.svg @@ -0,0 +1,93 @@ + + + + + + +Humidistat::runCycle + + +Node1 + + +Humidistat::runCycle + + + + + +Node2 + + +PID::compute + + + + + +Node1->Node2 + + + + + + + + +Node4 + + +PID::setAuto + + + + + +Node1->Node4 + + + + + + + + +Node3 + + +PID::clip + + + + + +Node2->Node3 + + + + + + + + +Node5 + + +PID::init + + + + + +Node4->Node5 + + + + + + + + diff --git a/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.map b/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.map new file mode 100644 index 0000000..b8d32c7 --- /dev/null +++ b/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.md5 b/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.md5 new file mode 100644 index 0000000..41b5465 --- /dev/null +++ b/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.md5 @@ -0,0 +1 @@ +30eb4ed1b76515f741536eda9d3bc617 \ No newline at end of file diff --git a/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.svg b/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.svg new file mode 100644 index 0000000..46af1f1 --- /dev/null +++ b/classHumidistat_ae30511d6477f5996de05996bdf221730_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + +Humidistat::runCycle + + +Node1 + + +Humidistat::runCycle + + + + + +Node2 + + +CascadeHumidistat:: +update + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +SingleHumidistat::update + + + + + +Node1->Node3 + + + + + + + + diff --git a/classKs0256VoltLadder-members.html b/classKs0256VoltLadder-members.html new file mode 100644 index 0000000..62a85be --- /dev/null +++ b/classKs0256VoltLadder-members.html @@ -0,0 +1,118 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0256VoltLadder Member List
+
+
+ +

This is the complete list of members for Ks0256VoltLadder, including all inherited members.

+ + +
voltageToButton(uint16_t voltage) constKs0256VoltLadder
+
+ + + + diff --git a/classKs0256VoltLadder.html b/classKs0256VoltLadder.html new file mode 100644 index 0000000..d05875c --- /dev/null +++ b/classKs0256VoltLadder.html @@ -0,0 +1,157 @@ + + + + + + + +Humidistat: Ks0256VoltLadder Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Ks0256VoltLadder Class Reference
+
+
+ +

Implementation of the VoltLadder interface for the Keyestudio Ks0256 keypad. + More...

+ +

#include <Ks0256VoltLadder.h>

+ + + + +

+Public Member Functions

Buttons voltageToButton (uint16_t voltage) const
 
+

Detailed Description

+

Implementation of the VoltLadder interface for the Keyestudio Ks0256 keypad.

+ +

Definition at line 9 of file Ks0256VoltLadder.h.

+

Member Function Documentation

+ +

◆ voltageToButton()

+ +
+
+ + + + + + + +
Buttons Ks0256VoltLadder::voltageToButton (uint16_t voltage) const
+
+ +

Definition at line 3 of file Ks0256VoltLadder.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classKs0256VoltLadder.js b/classKs0256VoltLadder.js new file mode 100644 index 0000000..7b4e250 --- /dev/null +++ b/classKs0256VoltLadder.js @@ -0,0 +1,4 @@ +var classKs0256VoltLadder = +[ + [ "voltageToButton", "classKs0256VoltLadder.html#a5dfd77e1d57a8ad0ada2629d862df81d", null ] +]; \ No newline at end of file diff --git a/classKs0466VoltLadder-members.html b/classKs0466VoltLadder-members.html new file mode 100644 index 0000000..640afc9 --- /dev/null +++ b/classKs0466VoltLadder-members.html @@ -0,0 +1,118 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Ks0466VoltLadder Member List
+
+
+ +

This is the complete list of members for Ks0466VoltLadder, including all inherited members.

+ + +
voltageToButton(uint16_t voltage) constKs0466VoltLadder
+
+ + + + diff --git a/classKs0466VoltLadder.html b/classKs0466VoltLadder.html new file mode 100644 index 0000000..fd7e65c --- /dev/null +++ b/classKs0466VoltLadder.html @@ -0,0 +1,157 @@ + + + + + + + +Humidistat: Ks0466VoltLadder Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
Ks0466VoltLadder Class Reference
+
+
+ +

Implementation of the VoltLadder interface for the Keyestudio Ks0466 keypad. + More...

+ +

#include <Ks0466VoltLadder.h>

+ + + + +

+Public Member Functions

Buttons voltageToButton (uint16_t voltage) const
 
+

Detailed Description

+

Implementation of the VoltLadder interface for the Keyestudio Ks0466 keypad.

+ +

Definition at line 9 of file Ks0466VoltLadder.h.

+

Member Function Documentation

+ +

◆ voltageToButton()

+ +
+
+ + + + + + + +
Buttons Ks0466VoltLadder::voltageToButton (uint16_t voltage) const
+
+ +

Definition at line 3 of file Ks0466VoltLadder.cpp.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classKs0466VoltLadder.js b/classKs0466VoltLadder.js new file mode 100644 index 0000000..2b9f965 --- /dev/null +++ b/classKs0466VoltLadder.js @@ -0,0 +1,4 @@ +var classKs0466VoltLadder = +[ + [ "voltageToButton", "classKs0466VoltLadder.html#a620f1eab2fdb7c12cae97c5fa432eb97", null ] +]; \ No newline at end of file diff --git a/classPID-members.html b/classPID-members.html new file mode 100644 index 0000000..0c03d0d --- /dev/null +++ b/classPID-members.html @@ -0,0 +1,143 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
PID Member List
+
+
+ +

This is the complete list of members for PID, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
aPIDprivate
clip(double value) constPIDprivate
compute()PID
cvPIDprivate
cvMaxPID
cvMinPID
dtPIDprivate
dTermPID
fTermPID
inAutoPIDprivate
init()PIDprivate
integralPIDprivate
iTermPID
KdPIDprivate
KfPIDprivate
KiPIDprivate
KpPIDprivate
lastDPVPIDprivate
lastEPIDprivate
lastPvPIDprivate
PID(const double *pv, double *cv, const double *sp, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double a)PID
pTermPID
pvPIDprivate
setAuto(bool inAuto)PID
setGains(double Kp, double Ki, double Kd, double Kf, uint16_t dt)PID
spPIDprivate
+
+ + + + diff --git a/classPID.html b/classPID.html new file mode 100644 index 0000000..9d20d11 --- /dev/null +++ b/classPID.html @@ -0,0 +1,974 @@ + + + + + + + +Humidistat: PID Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
PID Class Reference
+
+
+ +

PID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Measurement, anti-windup through conditional integration, bumpless transfer, and feed-forward. + More...

+ +

#include <PID.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

 PID (const double *pv, double *cv, const double *sp, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double a)
 Constructor.
 
bool compute ()
 Run a cycle of the PID loop.
 
void setAuto (bool inAuto)
 Set the mode of the controller.
 
void setGains (double Kp, double Ki, double Kd, double Kf, uint16_t dt)
 Set the gains and timestep.
 
+ + + + + + + + + + + + + + + +

+Public Attributes

double pTerm = 0
 
double iTerm = 0
 
double dTerm = 0
 
double fTerm = 0
 PID terms.
 
double cvMin
 
double cvMax
 Lower/upper limits for cv.
 
+ + + + + + + +

+Private Member Functions

void init ()
 Method to be called when the controller goes from manual to auto mode for proper bumpless transfer.
 
double clip (double value) const
 Clip value to [cvMin, cvMax].
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

const double & pv
 Process variable.
 
double & cv
 Control variable.
 
const double & sp
 Setpoint.
 
double Kp
 
double Ki
 
double Kd
 
double Kf
 Gains.
 
double a
 Smoothing factor for EWA filter for derivative.
 
uint16_t dt
 Timestep.
 
bool inAuto = false
 Mode.
 
double lastPv
 Last value of pv.
 
double lastE
 Last value of error.
 
double lastDPV
 Last value of derivative term.
 
double integral
 Integral of pv.
 
+

Detailed Description

+

PID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Measurement, anti-windup through conditional integration, bumpless transfer, and feed-forward.

+ +

Definition at line 8 of file PID.h.

+

Constructor & Destructor Documentation

+ +

◆ PID()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PID::PID (const double * pv,
double * cv,
const double * sp,
double Kp,
double Ki,
double Kd,
double Kf,
uint16_t dt,
double cvMin,
double cvMax,
double a )
+
+ +

Constructor.

+
Parameters
+ + + + + + + + + + + + +
pvPointer to process variable
cvPointer to control value
spPointer to setpoint
KpProportional gain
KiIntegral gain (in 1/s)
KdDerivative gain (in s)
KfFeed-forward gain
dtTimestep (in ms)
cvMinLower limit for control value
cvMaxUpper limit for control value
aSmoothing factor for EWA filter for derivative
+
+
+ +

Definition at line 3 of file PID.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Function Documentation

+ +

◆ clip()

+ +
+
+ + + + + +
+ + + + + + + +
double PID::clip (double value) const
+
+private
+
+ +

Clip value to [cvMin, cvMax].

+
Parameters
+ + +
valueValue to clip
+
+
+
Returns
Clipped value
+ +

Definition at line 44 of file PID.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ compute()

+ +
+
+ + + + + + + +
bool PID::compute ()
+
+ +

Run a cycle of the PID loop.

+
Returns
True if a PID step was run, and false if not.
+ +

Definition at line 17 of file PID.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ init()

+ +
+
+ + + + + +
+ + + + + + + +
void PID::init ()
+
+private
+
+ +

Method to be called when the controller goes from manual to auto mode for proper bumpless transfer.

+ +

Definition at line 9 of file PID.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ setAuto()

+ +
+
+ + + + + + + +
void PID::setAuto (bool inAuto)
+
+ +

Set the mode of the controller.

+
Parameters
+ + +
inAutoSet to true for automatic, false for manual.
+
+
+ +

Definition at line 52 of file PID.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ setGains()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
void PID::setGains (double Kp,
double Ki,
double Kd,
double Kf,
uint16_t dt )
+
+ +

Set the gains and timestep.

+
Parameters
+ + + + + + +
KpProportional gain
KiIntegral gain (in 1/s)
KdDerivative gain (in s)
KfFeed-forward gain
dtTimestep (in ms)
+
+
+ +

Definition at line 59 of file PID.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ a

+ +
+
+ + + + + +
+ + + + +
double PID::a
+
+private
+
+ +

Smoothing factor for EWA filter for derivative.

+ +

Definition at line 15 of file PID.h.

+ +
+
+ +

◆ cv

+ +
+
+ + + + + +
+ + + + +
double& PID::cv
+
+private
+
+ +

Control variable.

+ +

Definition at line 11 of file PID.h.

+ +
+
+ +

◆ cvMax

+ +
+
+ + + + +
double PID::cvMax
+
+ +

Lower/upper limits for cv.

+ +

Definition at line 34 of file PID.h.

+ +
+
+ +

◆ cvMin

+ +
+
+ + + + +
double PID::cvMin
+
+ +

Definition at line 34 of file PID.h.

+ +
+
+ +

◆ dt

+ +
+
+ + + + + +
+ + + + +
uint16_t PID::dt
+
+private
+
+ +

Timestep.

+ +

Definition at line 16 of file PID.h.

+ +
+
+ +

◆ dTerm

+ +
+
+ + + + +
double PID::dTerm = 0
+
+ +

Definition at line 33 of file PID.h.

+ +
+
+ +

◆ fTerm

+ +
+
+ + + + +
double PID::fTerm = 0
+
+ +

PID terms.

+ +

Definition at line 33 of file PID.h.

+ +
+
+ +

◆ inAuto

+ +
+
+ + + + + +
+ + + + +
bool PID::inAuto = false
+
+private
+
+ +

Mode.

+ +

Definition at line 18 of file PID.h.

+ +
+
+ +

◆ integral

+ +
+
+ + + + + +
+ + + + +
double PID::integral
+
+private
+
+ +

Integral of pv.

+ +

Definition at line 22 of file PID.h.

+ +
+
+ +

◆ iTerm

+ +
+
+ + + + +
double PID::iTerm = 0
+
+ +

Definition at line 33 of file PID.h.

+ +
+
+ +

◆ Kd

+ +
+
+ + + + + +
+ + + + +
double PID::Kd
+
+private
+
+ +

Definition at line 14 of file PID.h.

+ +
+
+ +

◆ Kf

+ +
+
+ + + + + +
+ + + + +
double PID::Kf
+
+private
+
+ +

Gains.

+ +

Definition at line 14 of file PID.h.

+ +
+
+ +

◆ Ki

+ +
+
+ + + + + +
+ + + + +
double PID::Ki
+
+private
+
+ +

Definition at line 14 of file PID.h.

+ +
+
+ +

◆ Kp

+ +
+
+ + + + + +
+ + + + +
double PID::Kp
+
+private
+
+ +

Definition at line 14 of file PID.h.

+ +
+
+ +

◆ lastDPV

+ +
+
+ + + + + +
+ + + + +
double PID::lastDPV
+
+private
+
+ +

Last value of derivative term.

+ +

Definition at line 21 of file PID.h.

+ +
+
+ +

◆ lastE

+ +
+
+ + + + + +
+ + + + +
double PID::lastE
+
+private
+
+ +

Last value of error.

+ +

Definition at line 20 of file PID.h.

+ +
+
+ +

◆ lastPv

+ +
+
+ + + + + +
+ + + + +
double PID::lastPv
+
+private
+
+ +

Last value of pv.

+ +

Definition at line 19 of file PID.h.

+ +
+
+ +

◆ pTerm

+ +
+
+ + + + +
double PID::pTerm = 0
+
+ +

Definition at line 33 of file PID.h.

+ +
+
+ +

◆ pv

+ +
+
+ + + + + +
+ + + + +
const double& PID::pv
+
+private
+
+ +

Process variable.

+ +

Definition at line 10 of file PID.h.

+ +
+
+ +

◆ sp

+ +
+
+ + + + + +
+ + + + +
const double& PID::sp
+
+private
+
+ +

Setpoint.

+ +

Definition at line 12 of file PID.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classPID.js b/classPID.js new file mode 100644 index 0000000..4ce7a81 --- /dev/null +++ b/classPID.js @@ -0,0 +1,29 @@ +var classPID = +[ + [ "PID", "classPID.html#a5cc06605b7c3778f132838314136f292", null ], + [ "clip", "classPID.html#a0e64deb10d189ef873ec4e672a1c79f2", null ], + [ "compute", "classPID.html#a742098de1dc845731f9bc86ebf01fb01", null ], + [ "init", "classPID.html#a0ccd3a3e6e64a2560077ea76bf71e417", null ], + [ "setAuto", "classPID.html#a05e62644ef9b7c0f3b1bb34631150ab4", null ], + [ "setGains", "classPID.html#ae3f4eed49d68435cc1b77e137ac31920", null ], + [ "a", "classPID.html#a40ab14751ced39a55d8d0a1ce269bd70", null ], + [ "cv", "classPID.html#a04b6efec6a104611f59dbbe2d90826e2", null ], + [ "cvMax", "classPID.html#a9b7414bf88b134e31199b041954720a4", null ], + [ "cvMin", "classPID.html#ad35190486e64101d3643f5d504be525a", null ], + [ "dt", "classPID.html#ab142c5c4854b2f52d21f5f935aaf7e92", null ], + [ "dTerm", "classPID.html#a7c3316e239a4c5983a75d65db59b4d0b", null ], + [ "fTerm", "classPID.html#af702fc5420c1ffba6f0dd3d8caccd2b4", null ], + [ "inAuto", "classPID.html#ab23e7d74b5f147c7e4bd7a9c2cdf0b52", null ], + [ "integral", "classPID.html#a7792de52992d0c0362f12df93a7abb28", null ], + [ "iTerm", "classPID.html#a697801bbe20f01695246aad75aa5a205", null ], + [ "Kd", "classPID.html#ae5dabe1953dd6c4aa28e5cb03f71b9e3", null ], + [ "Kf", "classPID.html#a1cc61882053e1946cd8211495543fdeb", null ], + [ "Ki", "classPID.html#a78d1833549e5c05ca4e94d07129ac4e7", null ], + [ "Kp", "classPID.html#a482d124af49dcabfa1d9542066ead626", null ], + [ "lastDPV", "classPID.html#a9a1655ddef1bd2e530e332de419a9500", null ], + [ "lastE", "classPID.html#a4c18ef8aca833bc546ea32d5f17090ba", null ], + [ "lastPv", "classPID.html#a91c30112ee14980270c99d5938efdf58", null ], + [ "pTerm", "classPID.html#af931212cc8de18013248e364ee7f6e26", null ], + [ "pv", "classPID.html#ae27acb223f8ce894a6d0ecda4914ded0", null ], + [ "sp", "classPID.html#a4014610045793c81f58cddf1cd00312d", null ] +]; \ No newline at end of file diff --git a/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.map b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.map new file mode 100644 index 0000000..5b76f0f --- /dev/null +++ b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.md5 b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.md5 new file mode 100644 index 0000000..c139ae9 --- /dev/null +++ b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.md5 @@ -0,0 +1 @@ +e8ac14dcdf22f64c87d06370be031805 \ No newline at end of file diff --git a/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.svg b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.svg new file mode 100644 index 0000000..e5bf162 --- /dev/null +++ b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +PID::setAuto + + +Node1 + + +PID::setAuto + + + + + +Node2 + + +PID::init + + + + + +Node1->Node2 + + + + + + + + diff --git a/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.map b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.map new file mode 100644 index 0000000..7c1171f --- /dev/null +++ b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.md5 b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.md5 new file mode 100644 index 0000000..531d7a2 --- /dev/null +++ b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.md5 @@ -0,0 +1 @@ +54f98b1c6ebcee9fd3a1ab83e7952ed4 \ No newline at end of file diff --git a/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.svg b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.svg new file mode 100644 index 0000000..55d27a9 --- /dev/null +++ b/classPID_a05e62644ef9b7c0f3b1bb34631150ab4_icgraph.svg @@ -0,0 +1,103 @@ + + + + + + +PID::setAuto + + +Node1 + + +PID::setAuto + + + + + +Node2 + + +Humidistat::runCycle + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +FlowController::update + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +CascadeHumidistat:: +update + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +SingleHumidistat::update + + + + + +Node2->Node4 + + + + + + + + +Node5->Node3 + + + + + + + + diff --git a/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.map b/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.map new file mode 100644 index 0000000..c5ed234 --- /dev/null +++ b/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.map @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.md5 b/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.md5 new file mode 100644 index 0000000..d46a217 --- /dev/null +++ b/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.md5 @@ -0,0 +1 @@ +1269ca43a44a0e66b4ead9fbf2c08be6 \ No newline at end of file diff --git a/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.svg b/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.svg new file mode 100644 index 0000000..ccfde76 --- /dev/null +++ b/classPID_a0ccd3a3e6e64a2560077ea76bf71e417_icgraph.svg @@ -0,0 +1,222 @@ + + + + + + +PID::init + + +Node1 + + +PID::init + + + + + +Node2 + + +PID::setAuto + + + + + +Node1->Node2 + + + + + + + + +Node7 + + +PID::setGains + + + + + +Node1->Node7 + + + + + + + + +Node3 + + +Humidistat::runCycle + + + + + +Node2->Node3 + + + + + + + + +Node6 + + +FlowController::update + + + + + +Node2->Node6 + + + + + + + + +Node4 + + +CascadeHumidistat:: +update + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +SingleHumidistat::update + + + + + +Node3->Node5 + + + + + + + + +Node6->Node4 + + + + + + + + +Node8 + + +PID::PID + + + + + +Node7->Node8 + + + + + + + + +Node9 + + +CascadeHumidistat:: +updatePIDParameters + + + + + +Node7->Node9 + + + + + + + + +Node10 + + +FlowController::updatePIDParameters + + + + + +Node7->Node10 + + + + + + + + +Node11 + + +SingleHumidistat::update +PIDParameters + + + + + +Node7->Node11 + + + + + + + + +Node10->Node9 + + + + + + + + diff --git a/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.map b/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.map new file mode 100644 index 0000000..bf30bbe --- /dev/null +++ b/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.md5 b/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.md5 new file mode 100644 index 0000000..bf9bb7e --- /dev/null +++ b/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.md5 @@ -0,0 +1 @@ +34476d4162f28fc8d5bdcd1b83571867 \ No newline at end of file diff --git a/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.svg b/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.svg new file mode 100644 index 0000000..3724267 --- /dev/null +++ b/classPID_a0e64deb10d189ef873ec4e672a1c79f2_icgraph.svg @@ -0,0 +1,121 @@ + + + + + + +PID::clip + + +Node1 + + +PID::clip + + + + + +Node2 + + +PID::compute + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Humidistat::runCycle + + + + + +Node2->Node3 + + + + + + + + +Node6 + + +FlowController::update + + + + + +Node2->Node6 + + + + + + + + +Node4 + + +CascadeHumidistat:: +update + + + + + +Node3->Node4 + + + + + + + + +Node5 + + +SingleHumidistat::update + + + + + +Node3->Node5 + + + + + + + + +Node6->Node4 + + + + + + + + diff --git a/classPID_a5cc06605b7c3778f132838314136f292_cgraph.map b/classPID_a5cc06605b7c3778f132838314136f292_cgraph.map new file mode 100644 index 0000000..32a9172 --- /dev/null +++ b/classPID_a5cc06605b7c3778f132838314136f292_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classPID_a5cc06605b7c3778f132838314136f292_cgraph.md5 b/classPID_a5cc06605b7c3778f132838314136f292_cgraph.md5 new file mode 100644 index 0000000..5c115a5 --- /dev/null +++ b/classPID_a5cc06605b7c3778f132838314136f292_cgraph.md5 @@ -0,0 +1 @@ +9a743b2408bc606f3e2bf12e48345766 \ No newline at end of file diff --git a/classPID_a5cc06605b7c3778f132838314136f292_cgraph.svg b/classPID_a5cc06605b7c3778f132838314136f292_cgraph.svg new file mode 100644 index 0000000..defb589 --- /dev/null +++ b/classPID_a5cc06605b7c3778f132838314136f292_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + +PID::PID + + +Node1 + + +PID::PID + + + + + +Node2 + + +PID::setGains + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +PID::init + + + + + +Node2->Node3 + + + + + + + + diff --git a/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.map b/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.map new file mode 100644 index 0000000..cc86a4a --- /dev/null +++ b/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.md5 b/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.md5 new file mode 100644 index 0000000..f47b585 --- /dev/null +++ b/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.md5 @@ -0,0 +1 @@ +bfada625fa4ad3a58a3b2b715512a4c9 \ No newline at end of file diff --git a/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.svg b/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.svg new file mode 100644 index 0000000..5022ee9 --- /dev/null +++ b/classPID_a742098de1dc845731f9bc86ebf01fb01_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +PID::compute + + +Node1 + + +PID::compute + + + + + +Node2 + + +PID::clip + + + + + +Node1->Node2 + + + + + + + + diff --git a/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.map b/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.map new file mode 100644 index 0000000..e488777 --- /dev/null +++ b/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.md5 b/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.md5 new file mode 100644 index 0000000..46261dc --- /dev/null +++ b/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.md5 @@ -0,0 +1 @@ +05fa30c663aa78b2719a780358e67d43 \ No newline at end of file diff --git a/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.svg b/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.svg new file mode 100644 index 0000000..102c48e --- /dev/null +++ b/classPID_a742098de1dc845731f9bc86ebf01fb01_icgraph.svg @@ -0,0 +1,103 @@ + + + + + + +PID::compute + + +Node1 + + +PID::compute + + + + + +Node2 + + +Humidistat::runCycle + + + + + +Node1->Node2 + + + + + + + + +Node5 + + +FlowController::update + + + + + +Node1->Node5 + + + + + + + + +Node3 + + +CascadeHumidistat:: +update + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +SingleHumidistat::update + + + + + +Node2->Node4 + + + + + + + + +Node5->Node3 + + + + + + + + diff --git a/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.map b/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.map new file mode 100644 index 0000000..5d7188f --- /dev/null +++ b/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.md5 b/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.md5 new file mode 100644 index 0000000..5641f13 --- /dev/null +++ b/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.md5 @@ -0,0 +1 @@ +f5eb828b315b8082472c6b00353834ed \ No newline at end of file diff --git a/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.svg b/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.svg new file mode 100644 index 0000000..5c9bc6e --- /dev/null +++ b/classPID_ae3f4eed49d68435cc1b77e137ac31920_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +PID::setGains + + +Node1 + + +PID::setGains + + + + + +Node2 + + +PID::init + + + + + +Node1->Node2 + + + + + + + + diff --git a/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.map b/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.map new file mode 100644 index 0000000..6c4991a --- /dev/null +++ b/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.map @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.md5 b/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.md5 new file mode 100644 index 0000000..bb0d486 --- /dev/null +++ b/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.md5 @@ -0,0 +1 @@ +03e1d9b48714dd86e931cf618e5f9c82 \ No newline at end of file diff --git a/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.svg b/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.svg new file mode 100644 index 0000000..b95b230 --- /dev/null +++ b/classPID_ae3f4eed49d68435cc1b77e137ac31920_icgraph.svg @@ -0,0 +1,104 @@ + + + + + + +PID::setGains + + +Node1 + + +PID::setGains + + + + + +Node2 + + +PID::PID + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +CascadeHumidistat:: +updatePIDParameters + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +FlowController::updatePIDParameters + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +SingleHumidistat::update +PIDParameters + + + + + +Node1->Node5 + + + + + + + + +Node4->Node3 + + + + + + + + diff --git a/classSHTHumiditySensor-members.html b/classSHTHumiditySensor-members.html new file mode 100644 index 0000000..7727764 --- /dev/null +++ b/classSHTHumiditySensor-members.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SHTHumiditySensor Member List
+
+
+ +

This is the complete list of members for SHTHumiditySensor, including all inherited members.

+ + + + + + + + + +
begin()SHTHumiditySensor
getHumidity() constSHTHumiditySensor
getTemperature() constSHTHumiditySensor
hSHTHumiditySensorprivate
readSample()SHTHumiditySensor
shtSHTHumiditySensorprivate
SHTHumiditySensor(SHTSensor *sht)SHTHumiditySensorexplicit
tSHTHumiditySensorprivate
+
+ + + + diff --git a/classSHTHumiditySensor.html b/classSHTHumiditySensor.html new file mode 100644 index 0000000..0747a15 --- /dev/null +++ b/classSHTHumiditySensor.html @@ -0,0 +1,333 @@ + + + + + + + +Humidistat: SHTHumiditySensor Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SHTHumiditySensor Class Reference
+
+
+ +

Implementation of the HumiditySensor interface for the Sensirion SHT85 sensor. + More...

+ +

#include <SHTHumiditySensor.h>

+ + + + + + + + + + + + +

+Public Member Functions

 SHTHumiditySensor (SHTSensor *sht)
 
double getHumidity () const
 
double getTemperature () const
 
void begin ()
 
void readSample ()
 
+ + + + + + + +

+Private Attributes

SHTSensor & sht
 
double t = NAN
 
double h = NAN
 
+

Detailed Description

+

Implementation of the HumiditySensor interface for the Sensirion SHT85 sensor.

+ +

Definition at line 9 of file SHTHumiditySensor.h.

+

Constructor & Destructor Documentation

+ +

◆ SHTHumiditySensor()

+ +
+
+ + + + + +
+ + + + + + + +
SHTHumiditySensor::SHTHumiditySensor (SHTSensor * sht)
+
+explicit
+
+ +

Definition at line 3 of file SHTHumiditySensor.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+ + + + + + + +
void SHTHumiditySensor::begin ()
+
+ +

Definition at line 13 of file SHTHumiditySensor.cpp.

+ +
+
+ +

◆ getHumidity()

+ +
+
+ + + + + + + +
double SHTHumiditySensor::getHumidity () const
+
+ +

Definition at line 5 of file SHTHumiditySensor.cpp.

+ +
+
+ +

◆ getTemperature()

+ +
+
+ + + + + + + +
double SHTHumiditySensor::getTemperature () const
+
+ +

Definition at line 9 of file SHTHumiditySensor.cpp.

+ +
+
+ +

◆ readSample()

+ +
+
+ + + + + + + +
void SHTHumiditySensor::readSample ()
+
+ +

Definition at line 18 of file SHTHumiditySensor.cpp.

+ +
+
+

Member Data Documentation

+ +

◆ h

+ +
+
+ + + + + +
+ + + + +
double SHTHumiditySensor::h = NAN
+
+private
+
+ +

Definition at line 13 of file SHTHumiditySensor.h.

+ +
+
+ +

◆ sht

+ +
+
+ + + + + +
+ + + + +
SHTSensor& SHTHumiditySensor::sht
+
+private
+
+ +

Definition at line 11 of file SHTHumiditySensor.h.

+ +
+
+ +

◆ t

+ +
+
+ + + + + +
+ + + + +
double SHTHumiditySensor::t = NAN
+
+private
+
+ +

Definition at line 13 of file SHTHumiditySensor.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classSHTHumiditySensor.js b/classSHTHumiditySensor.js new file mode 100644 index 0000000..80bbbad --- /dev/null +++ b/classSHTHumiditySensor.js @@ -0,0 +1,11 @@ +var classSHTHumiditySensor = +[ + [ "SHTHumiditySensor", "classSHTHumiditySensor.html#a1039b7f325744746e33a2de35a979807", null ], + [ "begin", "classSHTHumiditySensor.html#af7637bc2b5b2f4b7d638a526f0eb4533", null ], + [ "getHumidity", "classSHTHumiditySensor.html#abe46e9f9311a24954fad0d3f164b8df4", null ], + [ "getTemperature", "classSHTHumiditySensor.html#a926804010b705e62908d0c91273944d6", null ], + [ "readSample", "classSHTHumiditySensor.html#ad6e81ab1ca1183180dac12e563567e44", null ], + [ "h", "classSHTHumiditySensor.html#a5fdec69b16d437af66152c881c3d23f0", null ], + [ "sht", "classSHTHumiditySensor.html#ad2aee2628bec41099d35e0c252e8d08c", null ], + [ "t", "classSHTHumiditySensor.html#a6f0a4e485f55ac5069cefbab4f0b7d02", null ] +]; \ No newline at end of file diff --git a/classSerialLogger-members.html b/classSerialLogger-members.html new file mode 100644 index 0000000..9d0c4ed --- /dev/null +++ b/classSerialLogger-members.html @@ -0,0 +1,131 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SerialLogger< Humidistat_t > Member List
+
+
+ +

This is the complete list of members for SerialLogger< Humidistat_t >, including all inherited members.

+ + + + + + + + + + + + + + + +
begin(uint32_t baud)SerialLogger< Humidistat_t >inlinestatic
headerSerialLogger< Humidistat_t >privatestatic
header[]SerialLogger< Humidistat_t >private
header[]SerialLogger< Humidistat_t >private
humidistatSerialLogger< Humidistat_t >private
intervalSerialLogger< Humidistat_t >private
lastTimeSerialLogger< Humidistat_t >private
log()SerialLogger< Humidistat_t >private
log()SerialLogger< Humidistat_t >private
log()SerialLogger< Humidistat_t >private
readySerialLogger< Humidistat_t >private
SerialLogger(const Humidistat_t *humidistat, etl::span< const ThermistorReader, 4 > trs, uint16_t interval)SerialLogger< Humidistat_t >inlineexplicit
trsSerialLogger< Humidistat_t >private
update()SerialLogger< Humidistat_t >inline
+
+ + + + diff --git a/classSerialLogger.html b/classSerialLogger.html new file mode 100644 index 0000000..39b89cc --- /dev/null +++ b/classSerialLogger.html @@ -0,0 +1,615 @@ + + + + + + + +Humidistat: SerialLogger< Humidistat_t > Class Template Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SerialLogger< Humidistat_t > Class Template Reference
+
+
+ +

Logs humidistat data over serial. + More...

+ +

#include <SerialLogger.h>

+ + + + + + + + +

+Public Member Functions

 SerialLogger (const Humidistat_t *humidistat, etl::span< const ThermistorReader, 4 > trs, uint16_t interval)
 Constructor.
 
void update ()
 Log a line every interval, once data has been received.
 
+ + + + +

+Static Public Member Functions

static void begin (uint32_t baud)
 Setup the serial interface.
 
+ + + + + + + + + + + + +

+Private Member Functions

void log ()
 Write a line to serial.
 
const char header []
 
const char header []
 
void log ()
 
void log ()
 
+ + + + + + + + + + + + + +

+Private Attributes

const Humidistat_t & humidistat
 
const etl::span< const ThermistorReader, 4 > trs
 
const uint16_t interval
 Logging interval (in millis)
 
unsigned long lastTime = 0
 Last time line was written (in millis)
 
bool ready = false
 
+ + + +

+Static Private Attributes

static const char header []
 
+

Detailed Description

+
template<class Humidistat_t>
+class SerialLogger< Humidistat_t >

Logs humidistat data over serial.

+
Template Parameters
+ + +
Humidistat_tEither SingleHumidistat or CascadeHumidistat
+
+
+ +

Definition at line 15 of file SerialLogger.h.

+

Constructor & Destructor Documentation

+ +

◆ SerialLogger()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + + + + + + + + + + +
SerialLogger< Humidistat_t >::SerialLogger (const Humidistat_t * humidistat,
etl::span< const ThermistorReader, 4 > trs,
uint16_t interval )
+
+inlineexplicit
+
+ +

Constructor.

+
Parameters
+ + + + +
humidistatPointer to a Humidistat instance
trsSpan over 4 ThermistorReader instances
intervalLogging interval (in ms)
+
+
+ +

Definition at line 35 of file SerialLogger.h.

+ +
+
+

Member Function Documentation

+ +

◆ begin()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
static void SerialLogger< Humidistat_t >::begin (uint32_t baud)
+
+inlinestatic
+
+ +

Setup the serial interface.

+ +

Definition at line 39 of file SerialLogger.h.

+ +
+
+ +

◆ header() [1/2]

+ +
+
+ + + + + +
+ + + + +
const char SerialLogger< SingleHumidistat >::header
+
+private
+
+ +

Definition at line 70 of file SerialLogger.h.

+ +
+
+ +

◆ header() [2/2]

+ +
+
+ + + + + +
+ + + + +
const char SerialLogger< CascadeHumidistat >::header
+
+private
+
+ +

Definition at line 74 of file SerialLogger.h.

+ +
+
+ +

◆ log() [1/3]

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void SerialLogger< Humidistat_t >::log ()
+
+private
+
+ +

Write a line to serial.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ log() [2/3]

+ +
+
+ + + + + +
+ + + + + + + +
void SerialLogger< SingleHumidistat >::log ()
+
+private
+
+ +

Definition at line 79 of file SerialLogger.h.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ log() [3/3]

+ +
+
+ + + + + +
+ + + + + + + +
void SerialLogger< CascadeHumidistat >::log ()
+
+private
+
+ +

Definition at line 103 of file SerialLogger.h.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ update()

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + + + + +
void SerialLogger< Humidistat_t >::update ()
+
+inline
+
+ +

Log a line every interval, once data has been received.

+ +

Definition at line 46 of file SerialLogger.h.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ header

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const char SerialLogger< Humidistat_t >::header[]
+
+staticprivate
+
+ +

Definition at line 21 of file SerialLogger.h.

+ +
+
+ +

◆ humidistat

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const Humidistat_t& SerialLogger< Humidistat_t >::humidistat
+
+private
+
+ +

Definition at line 17 of file SerialLogger.h.

+ +
+
+ +

◆ interval

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const uint16_t SerialLogger< Humidistat_t >::interval
+
+private
+
+ +

Logging interval (in millis)

+ +

Definition at line 23 of file SerialLogger.h.

+ +
+
+ +

◆ lastTime

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
unsigned long SerialLogger< Humidistat_t >::lastTime = 0
+
+private
+
+ +

Last time line was written (in millis)

+ +

Definition at line 24 of file SerialLogger.h.

+ +
+
+ +

◆ ready

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
bool SerialLogger< Humidistat_t >::ready = false
+
+private
+
+ +

Definition at line 25 of file SerialLogger.h.

+ +
+
+ +

◆ trs

+ +
+
+
+template<class Humidistat_t >
+ + + + + +
+ + + + +
const etl::span<const ThermistorReader, 4> SerialLogger< Humidistat_t >::trs
+
+private
+
+ +

Definition at line 18 of file SerialLogger.h.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/classSerialLogger.js b/classSerialLogger.js new file mode 100644 index 0000000..a1e6bac --- /dev/null +++ b/classSerialLogger.js @@ -0,0 +1,17 @@ +var classSerialLogger = +[ + [ "SerialLogger", "classSerialLogger.html#a49cb903243a25d8fe058c5d3fbd0af27", null ], + [ "begin", "classSerialLogger.html#a7f48d0c123bae376f761db3b5f23efe9", null ], + [ "header", "classSerialLogger.html#af692abf860fcae4f90adf812326ee769", null ], + [ "header", "classSerialLogger.html#ab42b8168047db63bda010a9d5e5fe8fb", null ], + [ "log", "classSerialLogger.html#a1ea6568a47741b504452e921382ef04e", null ], + [ "log", "classSerialLogger.html#a19892d82447f8504faf4ddace7a56877", null ], + [ "log", "classSerialLogger.html#a4951b602e6c18f7f2a6a13e9ca3a111a", null ], + [ "update", "classSerialLogger.html#a2c4b7a2678b3742894d61739949f9c9d", null ], + [ "header", "classSerialLogger.html#a6675ab020b655f85c80200b8b0bc7344", null ], + [ "humidistat", "classSerialLogger.html#aa5b4f636f15572e24878259174b51f1a", null ], + [ "interval", "classSerialLogger.html#ad9d67933341260c9184d709531714561", null ], + [ "lastTime", "classSerialLogger.html#aba0e388e124ce116cb6d66b749bfc80f", null ], + [ "ready", "classSerialLogger.html#a3a9426a4363db61fa75787bb447757c9", null ], + [ "trs", "classSerialLogger.html#aaea6bb97bd8ebd7a55931585e9ab2bdb", null ] +]; \ No newline at end of file diff --git a/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.map b/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.map new file mode 100644 index 0000000..e1b6fae --- /dev/null +++ b/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.map @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.md5 b/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.md5 new file mode 100644 index 0000000..f65ca2b --- /dev/null +++ b/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.md5 @@ -0,0 +1 @@ +1c250438c8477bc992a15e8dd89b2ee6 \ No newline at end of file diff --git a/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.svg b/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.svg new file mode 100644 index 0000000..0e8b919 --- /dev/null +++ b/classSerialLogger_a19892d82447f8504faf4ddace7a56877_cgraph.svg @@ -0,0 +1,76 @@ + + + + + + +SerialLogger::log + + +Node1 + + +SerialLogger::log + + + + + +Node2 + + +asprintf + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ThermistorReader::readTemp + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +ThermistorReader::getThermistor +Resistance + + + + + +Node3->Node4 + + + + + + + + diff --git a/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.map b/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.map new file mode 100644 index 0000000..2967a84 --- /dev/null +++ b/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.md5 b/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.md5 new file mode 100644 index 0000000..e7027b8 --- /dev/null +++ b/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.md5 @@ -0,0 +1 @@ +b91b1fe08bc3077a5f146d87d7a64389 \ No newline at end of file diff --git a/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.svg b/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.svg new file mode 100644 index 0000000..059071e --- /dev/null +++ b/classSerialLogger_a1ea6568a47741b504452e921382ef04e_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +SerialLogger::log + + +Node1 + + +SerialLogger::log + + + + + +Node2 + + +SerialLogger::update + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.map b/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.map new file mode 100644 index 0000000..78d4ef6 --- /dev/null +++ b/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.md5 b/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.md5 new file mode 100644 index 0000000..e8bfbf5 --- /dev/null +++ b/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.md5 @@ -0,0 +1 @@ +65ef43d9b4bf6066eb79ea33bcbe49bd \ No newline at end of file diff --git a/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.svg b/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.svg new file mode 100644 index 0000000..fe97f20 --- /dev/null +++ b/classSerialLogger_a2c4b7a2678b3742894d61739949f9c9d_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +SerialLogger::update + + +Node1 + + +SerialLogger::update + + + + + +Node2 + + +SerialLogger::log + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.map b/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.map new file mode 100644 index 0000000..02b3544 --- /dev/null +++ b/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.md5 b/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.md5 new file mode 100644 index 0000000..3155974 --- /dev/null +++ b/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.md5 @@ -0,0 +1 @@ +e0cfd77a57286530a9bcd8e9b3c628e0 \ No newline at end of file diff --git a/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.svg b/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.svg new file mode 100644 index 0000000..15b878e --- /dev/null +++ b/classSerialLogger_a4951b602e6c18f7f2a6a13e9ca3a111a_cgraph.svg @@ -0,0 +1,39 @@ + + + + + + +SerialLogger::log + + +Node1 + + +SerialLogger::log + + + + + +Node2 + + +asprintf + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSetpointProfileRunner-members.html b/classSetpointProfileRunner-members.html new file mode 100644 index 0000000..2176cb8 --- /dev/null +++ b/classSetpointProfileRunner-members.html @@ -0,0 +1,127 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SetpointProfileRunner Member List
+
+
+ +

This is the complete list of members for SetpointProfileRunner, including all inherited members.

+ + + + + + + + + + + +
getCurrentPoint() constSetpointProfileRunner
humidistatSetpointProfileRunnerprivate
isRunning() constSetpointProfileRunner
profileSetpointProfileRunnerprivate
runningSetpointProfileRunnerprivate
SetpointProfileRunner(Humidistat *humidistat)SetpointProfileRunnerexplicit
setProfile(const etl::span< const Point > &profile)SetpointProfileRunner
timeStartSetpointProfileRunnerprivate
toggle()SetpointProfileRunner
update()SetpointProfileRunner
+
+ + + + diff --git a/classSetpointProfileRunner.html b/classSetpointProfileRunner.html new file mode 100644 index 0000000..df22401 --- /dev/null +++ b/classSetpointProfileRunner.html @@ -0,0 +1,458 @@ + + + + + + + +Humidistat: SetpointProfileRunner Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SetpointProfileRunner Class Reference
+
+
+ +

'Runs' a setpoint profile. + More...

+ +

#include <SetpointProfileRunner.h>

+
+Collaboration diagram for SetpointProfileRunner:
+
+
+
[legend]
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SetpointProfileRunner (Humidistat *humidistat)
 Constructor.
 
void toggle ()
 Toggle the run state.
 
void setProfile (const etl::span< const Point > &profile)
 Set the profile.
 
void update ()
 Run the profile (if running). Call this periodically.
 
bool isRunning () const
 Get the run state.
 
size_t getCurrentPoint () const
 Get the index of the current Point in the profile.
 
+ + + + + + + + + +

+Private Attributes

Humidistathumidistat
 
etl::span< const Pointprofile
 
uint32_t timeStart
 
bool running = false
 
+

Detailed Description

+

'Runs' a setpoint profile.

+ +

Definition at line 10 of file SetpointProfileRunner.h.

+

Constructor & Destructor Documentation

+ +

◆ SetpointProfileRunner()

+ +
+
+ + + + + +
+ + + + + + + +
SetpointProfileRunner::SetpointProfileRunner (Humidistat * humidistat)
+
+explicit
+
+ +

Constructor.

+
Parameters
+ + +
humidistatPointer to a Humidistat instance
+
+
+ +

Definition at line 3 of file SetpointProfileRunner.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getCurrentPoint()

+ +
+
+ + + + + +
+ + + + + + + +
size_t SetpointProfileRunner::getCurrentPoint () const
+
+nodiscard
+
+ +

Get the index of the current Point in the profile.

+
Returns
index
+ +

Definition at line 32 of file SetpointProfileRunner.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ isRunning()

+ +
+
+ + + + + +
+ + + + + + + +
bool SetpointProfileRunner::isRunning () const
+
+nodiscard
+
+ +

Get the run state.

+
Returns
True if running
+ +

Definition at line 28 of file SetpointProfileRunner.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ setProfile()

+ +
+
+ + + + + + + +
void SetpointProfileRunner::setProfile (const etl::span< const Point > & profile)
+
+ +

Set the profile.

+
Parameters
+ + +
profileSpan over Points
+
+
+ +

Definition at line 24 of file SetpointProfileRunner.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ toggle()

+ +
+
+ + + + + + + +
void SetpointProfileRunner::toggle ()
+
+ +

Toggle the run state.

+ +

Definition at line 19 of file SetpointProfileRunner.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ update()

+ +
+
+ + + + + + + +
void SetpointProfileRunner::update ()
+
+ +

Run the profile (if running). Call this periodically.

+ +

Definition at line 6 of file SetpointProfileRunner.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ humidistat

+ +
+
+ + + + + +
+ + + + +
Humidistat& SetpointProfileRunner::humidistat
+
+private
+
+ +

Definition at line 12 of file SetpointProfileRunner.h.

+ +
+
+ +

◆ profile

+ +
+
+ + + + + +
+ + + + +
etl::span<const Point> SetpointProfileRunner::profile
+
+private
+
+ +

Definition at line 13 of file SetpointProfileRunner.h.

+ +
+
+ +

◆ running

+ +
+
+ + + + + +
+ + + + +
bool SetpointProfileRunner::running = false
+
+private
+
+ +

Definition at line 15 of file SetpointProfileRunner.h.

+ +
+
+ +

◆ timeStart

+ +
+
+ + + + + +
+ + + + +
uint32_t SetpointProfileRunner::timeStart
+
+private
+
+ +

Definition at line 14 of file SetpointProfileRunner.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classSetpointProfileRunner.js b/classSetpointProfileRunner.js new file mode 100644 index 0000000..39b2496 --- /dev/null +++ b/classSetpointProfileRunner.js @@ -0,0 +1,13 @@ +var classSetpointProfileRunner = +[ + [ "SetpointProfileRunner", "classSetpointProfileRunner.html#af79fdf3a056f30d3a56ba2902bde9f55", null ], + [ "getCurrentPoint", "classSetpointProfileRunner.html#a8806af9c619d794383b477693485858b", null ], + [ "isRunning", "classSetpointProfileRunner.html#a346e9b34c7c2e23b46bc51446ddd1947", null ], + [ "setProfile", "classSetpointProfileRunner.html#a1c11d6fe1d34db313e8bc78cc08ab19f", null ], + [ "toggle", "classSetpointProfileRunner.html#ace14da515f49645e5901523d0864dd23", null ], + [ "update", "classSetpointProfileRunner.html#a076b63e4aea6e1ba45c7b28ff714d6b6", null ], + [ "humidistat", "classSetpointProfileRunner.html#a2e9ed471d72a3577a3eea3f12e1fe368", null ], + [ "profile", "classSetpointProfileRunner.html#af9d89b4b7b869aa70fae6e1cf635d988", null ], + [ "running", "classSetpointProfileRunner.html#a226c7cee855976afd07e012862c09730", null ], + [ "timeStart", "classSetpointProfileRunner.html#a82788238a2cf6c4d625d003e9d35022f", null ] +]; \ No newline at end of file diff --git a/classSetpointProfileRunner__coll__graph.map b/classSetpointProfileRunner__coll__graph.map new file mode 100644 index 0000000..0498621 --- /dev/null +++ b/classSetpointProfileRunner__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classSetpointProfileRunner__coll__graph.md5 b/classSetpointProfileRunner__coll__graph.md5 new file mode 100644 index 0000000..079eaee --- /dev/null +++ b/classSetpointProfileRunner__coll__graph.md5 @@ -0,0 +1 @@ +208a7a9444140a98a2d683c8b49cbc17 \ No newline at end of file diff --git a/classSetpointProfileRunner__coll__graph.svg b/classSetpointProfileRunner__coll__graph.svg new file mode 100644 index 0000000..fcf92c8 --- /dev/null +++ b/classSetpointProfileRunner__coll__graph.svg @@ -0,0 +1,96 @@ + + + + + + +SetpointProfileRunner + + +Node1 + + +SetpointProfileRunner + + + + + +Node2 + + +Humidistat + + + + + +Node2->Node1 + + + + + + humidistat + + + +Node3 + + +Controller + + + + + +Node3->Node2 + + + + + + + + +Node4 + + +PID + + + + + +Node4->Node3 + + + + + + pid + + + +Node5 + + +ConfigStore + + + + + +Node5->Node3 + + + + + + cs + + + diff --git a/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.map b/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.map new file mode 100644 index 0000000..a026b56 --- /dev/null +++ b/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.md5 b/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.md5 new file mode 100644 index 0000000..8d6c047 --- /dev/null +++ b/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.md5 @@ -0,0 +1 @@ +cd16407def6b5b6b35c86b2328d6bac0 \ No newline at end of file diff --git a/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.svg b/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.svg new file mode 100644 index 0000000..acf373b --- /dev/null +++ b/classSetpointProfileRunner_a076b63e4aea6e1ba45c7b28ff714d6b6_cgraph.svg @@ -0,0 +1,41 @@ + + + + + + +SetpointProfileRunner::update + + +Node1 + + +SetpointProfileRunner +::update + + + + + +Node2 + + +SetpointProfileRunner +::getCurrentPoint + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.map b/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.map new file mode 100644 index 0000000..e5602a8 --- /dev/null +++ b/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.md5 b/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.md5 new file mode 100644 index 0000000..d69790a --- /dev/null +++ b/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.md5 @@ -0,0 +1 @@ +c119b2b21d95c32d2db5e980c71d9289 \ No newline at end of file diff --git a/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.svg b/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.svg new file mode 100644 index 0000000..7382012 --- /dev/null +++ b/classSetpointProfileRunner_a1c11d6fe1d34db313e8bc78cc08ab19f_icgraph.svg @@ -0,0 +1,60 @@ + + + + + + +SetpointProfileRunner::setProfile + + +Node1 + + +SetpointProfileRunner +::setProfile + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2->Node3 + + + + + + + + diff --git a/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.map b/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.map new file mode 100644 index 0000000..47c5d33 --- /dev/null +++ b/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.md5 b/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.md5 new file mode 100644 index 0000000..04f4cd9 --- /dev/null +++ b/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.md5 @@ -0,0 +1 @@ +d88a33124b0a0cb906d834fc93563822 \ No newline at end of file diff --git a/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.svg b/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.svg new file mode 100644 index 0000000..e60d6f4 --- /dev/null +++ b/classSetpointProfileRunner_a346e9b34c7c2e23b46bc51446ddd1947_icgraph.svg @@ -0,0 +1,41 @@ + + + + + + +SetpointProfileRunner::isRunning + + +Node1 + + +SetpointProfileRunner +::isRunning + + + + + +Node2 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node1->Node2 + + + + + + + + diff --git a/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.map b/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.map new file mode 100644 index 0000000..cceec3a --- /dev/null +++ b/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.md5 b/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.md5 new file mode 100644 index 0000000..4b1d7c0 --- /dev/null +++ b/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.md5 @@ -0,0 +1 @@ +7a74f5346390b38f5c6ebff90e5ab3f1 \ No newline at end of file diff --git a/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.svg b/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.svg new file mode 100644 index 0000000..785b3ca --- /dev/null +++ b/classSetpointProfileRunner_a8806af9c619d794383b477693485858b_icgraph.svg @@ -0,0 +1,60 @@ + + + + + + +SetpointProfileRunner::getCurrentPoint + + +Node1 + + +SetpointProfileRunner +::getCurrentPoint + + + + + +Node2 + + +GraphicalDisplayUI +::DrawMainCommon + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +SetpointProfileRunner +::update + + + + + +Node1->Node3 + + + + + + + + diff --git a/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.map b/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.map new file mode 100644 index 0000000..fed8dd5 --- /dev/null +++ b/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.md5 b/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.md5 new file mode 100644 index 0000000..ab6304d --- /dev/null +++ b/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.md5 @@ -0,0 +1 @@ +465f82958ba87316c9a5e0e54e9dff85 \ No newline at end of file diff --git a/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.svg b/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.svg new file mode 100644 index 0000000..b1c54de --- /dev/null +++ b/classSetpointProfileRunner_ace14da515f49645e5901523d0864dd23_icgraph.svg @@ -0,0 +1,60 @@ + + + + + + +SetpointProfileRunner::toggle + + +Node1 + + +SetpointProfileRunner +::toggle + + + + + +Node2 + + +GraphicalDisplayUI +::handleInputMain + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInput + + + + + +Node2->Node3 + + + + + + + + diff --git a/classSingleHumidistat-members.html b/classSingleHumidistat-members.html new file mode 100644 index 0000000..bfe4451 --- /dev/null +++ b/classSingleHumidistat-members.html @@ -0,0 +1,139 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
SingleHumidistat Member List
+
+
+ +

This is the complete list of members for SingleHumidistat, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
activeController
Controller(const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)Controller
csControllerprotected
cvController
getConfigStore()Controller
getCvMax() constHumidistat
getCvMin() constHumidistat
getHumidity() constHumidistat
getTemperature() constHumidistat
getTerms(double &pTerm, double &iTerm, double &dTerm) constController
hsHumidistatprotected
Humidistat(const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)Humidistat
pidControllerprotected
pins_solenoidSingleHumidistatprivate
pvController
pwmResSingleHumidistatprivate
runCycle()Humidistatprotected
sensorLastReadControllerprotected
SingleHumidistat(HumiditySensor *hs, const ConfigStore *cs, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)SingleHumidistat
spController
update()SingleHumidistat
updatePIDParameters()SingleHumidistat
+
+ + + + diff --git a/classSingleHumidistat.html b/classSingleHumidistat.html new file mode 100644 index 0000000..2bef9b2 --- /dev/null +++ b/classSingleHumidistat.html @@ -0,0 +1,362 @@ + + + + + + + +Humidistat: SingleHumidistat Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
SingleHumidistat Class Reference
+
+
+ +

Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and call update(). + More...

+ +

#include <SingleHumidistat.h>

+
+Inheritance diagram for SingleHumidistat:
+
+
+
[legend]
+
+Collaboration diagram for SingleHumidistat:
+
+
+
[legend]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SingleHumidistat (HumiditySensor *hs, const ConfigStore *cs, etl::array< uint8_t, 2 > pins_solenoid, uint8_t pwmRes)
 Constructor.
 
void update ()
 
void updatePIDParameters ()
 
- Public Member Functions inherited from Humidistat
 Humidistat (const ConfigStore *cs, HumiditySensor *hs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax)
 Constructor.
 
double getHumidity () const
 Read the humidity.
 
double getTemperature () const
 Read the temperature.
 
double getCvMin () const
 
double getCvMax () const
 
- Public Member Functions inherited from Controller
 Controller (const ConfigStore *cs, double Kp, double Ki, double Kd, double Kf, uint16_t dt, double cvMin, double cvMax, double defaultSP, double defaultCV)
 Constructor.
 
void getTerms (double &pTerm, double &iTerm, double &dTerm) const
 Get the three PID terms by reference.
 
void update ()
 Run the controller: Typically reads a sensor, runs a cycle of the PID loop and drives some actuator.
 
void updatePIDParameters ()
 Update the PID parameters from the configStore.
 
const ConfigStoregetConfigStore ()
 Get a pointer to the ConfigStore instance.
 
+ + + + + +

+Private Attributes

const uint8_t pins_solenoid [2]
 
const uint8_t pwmRes
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Attributes inherited from Controller
bool active = false
 
double pv = 0
 Process variable.
 
double sp
 Setpoint.
 
double cv
 Control variable.
 
- Protected Member Functions inherited from Humidistat
void runCycle ()
 Run a cycle of the controller. Reads a sample from the humidity controller and runs PID.
 
- Protected Attributes inherited from Humidistat
HumiditySensor & hs
 
- Protected Attributes inherited from Controller
PID pid
 
const ConfigStorecs
 
unsigned long sensorLastRead = 0
 
+

Detailed Description

+

Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and call update().

+ +

Definition at line 13 of file SingleHumidistat.h.

+

Constructor & Destructor Documentation

+ +

◆ SingleHumidistat()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + +
SingleHumidistat::SingleHumidistat (HumiditySensor * hs,
const ConfigStore * cs,
etl::array< uint8_t, 2 > pins_solenoid,
uint8_t pwmRes )
+
+ +

Constructor.

+
Parameters
+ + + + + +
hsPointer to a HumiditySensor instance
csPointer to a ConfigStore instance
pins_solenoidArray of 2 integers corresponding to the solenoid pins
pwmResPWM resolution (bits)
+
+
+ +

Definition at line 6 of file SingleHumidistat.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ update()

+ +
+
+ + + + + + + +
void SingleHumidistat::update ()
+
+ +

Definition at line 11 of file SingleHumidistat.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ updatePIDParameters()

+ +
+
+ + + + + + + +
void SingleHumidistat::updatePIDParameters ()
+
+ +

Definition at line 19 of file SingleHumidistat.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ pins_solenoid

+ +
+
+ + + + + +
+ + + + +
const uint8_t SingleHumidistat::pins_solenoid[2]
+
+private
+
+ +

Definition at line 15 of file SingleHumidistat.h.

+ +
+
+ +

◆ pwmRes

+ +
+
+ + + + + +
+ + + + +
const uint8_t SingleHumidistat::pwmRes
+
+private
+
+ +

Definition at line 16 of file SingleHumidistat.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classSingleHumidistat.js b/classSingleHumidistat.js new file mode 100644 index 0000000..3619438 --- /dev/null +++ b/classSingleHumidistat.js @@ -0,0 +1,8 @@ +var classSingleHumidistat = +[ + [ "SingleHumidistat", "classSingleHumidistat.html#a342a291cc9a950ecd47399f87c873908", null ], + [ "update", "classSingleHumidistat.html#af667a97d9c89b5801dab0956f88acd70", null ], + [ "updatePIDParameters", "classSingleHumidistat.html#ae8f19856e617b83e1cf21e72e5b9f1d9", null ], + [ "pins_solenoid", "classSingleHumidistat.html#af43d7a513d8a467f7360caedb93378b5", null ], + [ "pwmRes", "classSingleHumidistat.html#a93abacea3cc14849656431d1c67a44d7", null ] +]; \ No newline at end of file diff --git a/classSingleHumidistat__coll__graph.map b/classSingleHumidistat__coll__graph.map new file mode 100644 index 0000000..7cc0107 --- /dev/null +++ b/classSingleHumidistat__coll__graph.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/classSingleHumidistat__coll__graph.md5 b/classSingleHumidistat__coll__graph.md5 new file mode 100644 index 0000000..63f7752 --- /dev/null +++ b/classSingleHumidistat__coll__graph.md5 @@ -0,0 +1 @@ +f1dc6bcb49266beb1b4e117562a3ae21 \ No newline at end of file diff --git a/classSingleHumidistat__coll__graph.svg b/classSingleHumidistat__coll__graph.svg new file mode 100644 index 0000000..6b24802 --- /dev/null +++ b/classSingleHumidistat__coll__graph.svg @@ -0,0 +1,95 @@ + + + + + + +SingleHumidistat + + +Node1 + + +SingleHumidistat + + + + + +Node2 + + +Humidistat + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +Controller + + + + + +Node3->Node2 + + + + + + + + +Node4 + + +PID + + + + + +Node4->Node3 + + + + + + pid + + + +Node5 + + +ConfigStore + + + + + +Node5->Node3 + + + + + + cs + + + diff --git a/classSingleHumidistat__inherit__graph.map b/classSingleHumidistat__inherit__graph.map new file mode 100644 index 0000000..e183557 --- /dev/null +++ b/classSingleHumidistat__inherit__graph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classSingleHumidistat__inherit__graph.md5 b/classSingleHumidistat__inherit__graph.md5 new file mode 100644 index 0000000..ea19f54 --- /dev/null +++ b/classSingleHumidistat__inherit__graph.md5 @@ -0,0 +1 @@ +05044462aa98ca5534898417cd67e05d \ No newline at end of file diff --git a/classSingleHumidistat__inherit__graph.svg b/classSingleHumidistat__inherit__graph.svg new file mode 100644 index 0000000..b752d42 --- /dev/null +++ b/classSingleHumidistat__inherit__graph.svg @@ -0,0 +1,57 @@ + + + + + + +SingleHumidistat + + +Node1 + + +SingleHumidistat + + + + + +Node2 + + +Humidistat + + + + + +Node2->Node1 + + + + + + + + +Node3 + + +Controller + + + + + +Node3->Node2 + + + + + + + + diff --git a/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.map b/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.map new file mode 100644 index 0000000..397a9b2 --- /dev/null +++ b/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.md5 b/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.md5 new file mode 100644 index 0000000..d66945c --- /dev/null +++ b/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.md5 @@ -0,0 +1 @@ +0846225f0eef68bf2e903ce99457f04d \ No newline at end of file diff --git a/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.svg b/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.svg new file mode 100644 index 0000000..d8cbdf0 --- /dev/null +++ b/classSingleHumidistat_ae8f19856e617b83e1cf21e72e5b9f1d9_cgraph.svg @@ -0,0 +1,58 @@ + + + + + + +SingleHumidistat::updatePIDParameters + + +Node1 + + +SingleHumidistat::update +PIDParameters + + + + + +Node2 + + +PID::setGains + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +PID::init + + + + + +Node2->Node3 + + + + + + + + diff --git a/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.map b/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.map new file mode 100644 index 0000000..0b599c5 --- /dev/null +++ b/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.map @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.md5 b/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.md5 new file mode 100644 index 0000000..5769cbd --- /dev/null +++ b/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.md5 @@ -0,0 +1 @@ +58e0cb953e10e1d050342666804ebd34 \ No newline at end of file diff --git a/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.svg b/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.svg new file mode 100644 index 0000000..eff8c50 --- /dev/null +++ b/classSingleHumidistat_af667a97d9c89b5801dab0956f88acd70_cgraph.svg @@ -0,0 +1,138 @@ + + + + + + +SingleHumidistat::update + + +Node1 + + +SingleHumidistat::update + + + + + +Node2 + + +ipow + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +Humidistat::runCycle + + + + + +Node1->Node3 + + + + + + + + +Node2->Node2 + + + + + + + + +Node4 + + +PID::compute + + + + + +Node3->Node4 + + + + + + + + +Node6 + + +PID::setAuto + + + + + +Node3->Node6 + + + + + + + + +Node5 + + +PID::clip + + + + + +Node4->Node5 + + + + + + + + +Node7 + + +PID::init + + + + + +Node6->Node7 + + + + + + + + diff --git a/classThermistorReader-members.html b/classThermistorReader-members.html new file mode 100644 index 0000000..d95ca2b --- /dev/null +++ b/classThermistorReader-members.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ThermistorReader Member List
+
+
+ +

This is the complete list of members for ThermistorReader, including all inherited members.

+ + + + + + + + + +
BThermistorReaderprivate
getThermistorResistance() constThermistorReaderprivate
pinThermistorReaderprivate
r_infThermistorReaderprivate
R_seriesThermistorReaderprivate
readTemp() constThermistorReader
ref_pinThermistorReaderprivate
ThermistorReader(uint8_t pin)ThermistorReaderexplicit
+
+ + + + diff --git a/classThermistorReader.html b/classThermistorReader.html new file mode 100644 index 0000000..fbdd73e --- /dev/null +++ b/classThermistorReader.html @@ -0,0 +1,402 @@ + + + + + + + +Humidistat: ThermistorReader Class Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
ThermistorReader Class Reference
+
+
+ +

Driver for thermistor thermometers. + More...

+ +

#include <ThermistorReader.h>

+ + + + + + + + +

+Public Member Functions

 ThermistorReader (uint8_t pin)
 Constructor.
 
double readTemp () const
 Get the temperature of the thermistor.
 
+ + + + +

+Private Member Functions

double getThermistorResistance () const
 Calculate the resistance of the thermistor in the voltage divider.
 
+ + + + + + + + + + + + + + + + +

+Private Attributes

const uint8_t ref_pin = 5
 Reference (high) voltage pin number.
 
const uint8_t pin
 NTC pin number.
 
const double R_series = 10000
 Resistance of R2 in voltage divider (Ohm)
 
const double B = 3950
 Thermistor's value of B in the thermistor equation (K)
 
const double r_inf = 0.01752
 Thermistor's value of R_inf in the thermistor equation (Ohm)
 
+

Detailed Description

+

Driver for thermistor thermometers.

+ +

Definition at line 7 of file ThermistorReader.h.

+

Constructor & Destructor Documentation

+ +

◆ ThermistorReader()

+ +
+
+ + + + + +
+ + + + + + + +
ThermistorReader::ThermistorReader (uint8_t pin)
+
+explicit
+
+ +

Constructor.

+
Parameters
+ + +
pinNTC pin number
+
+
+ +

Definition at line 4 of file ThermistorReader.cpp.

+ +
+
+

Member Function Documentation

+ +

◆ getThermistorResistance()

+ +
+
+ + + + + +
+ + + + + + + +
double ThermistorReader::getThermistorResistance () const
+
+private
+
+ +

Calculate the resistance of the thermistor in the voltage divider.

+
Returns
Resistance (Ohm)
+ +

Definition at line 6 of file ThermistorReader.cpp.

+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ readTemp()

+ +
+
+ + + + + + + +
double ThermistorReader::readTemp () const
+
+ +

Get the temperature of the thermistor.

+
Returns
Temperature (Celsius)
+ +

Definition at line 12 of file ThermistorReader.cpp.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+

Member Data Documentation

+ +

◆ B

+ +
+
+ + + + + +
+ + + + +
const double ThermistorReader::B = 3950
+
+private
+
+ +

Thermistor's value of B in the thermistor equation (K)

+ +

Definition at line 12 of file ThermistorReader.h.

+ +
+
+ +

◆ pin

+ +
+
+ + + + + +
+ + + + +
const uint8_t ThermistorReader::pin
+
+private
+
+ +

NTC pin number.

+ +

Definition at line 10 of file ThermistorReader.h.

+ +
+
+ +

◆ r_inf

+ +
+
+ + + + + +
+ + + + +
const double ThermistorReader::r_inf = 0.01752
+
+private
+
+ +

Thermistor's value of R_inf in the thermistor equation (Ohm)

+ +

Definition at line 13 of file ThermistorReader.h.

+ +
+
+ +

◆ R_series

+ +
+
+ + + + + +
+ + + + +
const double ThermistorReader::R_series = 10000
+
+private
+
+ +

Resistance of R2 in voltage divider (Ohm)

+ +

Definition at line 11 of file ThermistorReader.h.

+ +
+
+ +

◆ ref_pin

+ +
+
+ + + + + +
+ + + + +
const uint8_t ThermistorReader::ref_pin = 5
+
+private
+
+ +

Reference (high) voltage pin number.

+ +

Definition at line 9 of file ThermistorReader.h.

+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/classThermistorReader.js b/classThermistorReader.js new file mode 100644 index 0000000..4a981dc --- /dev/null +++ b/classThermistorReader.js @@ -0,0 +1,11 @@ +var classThermistorReader = +[ + [ "ThermistorReader", "classThermistorReader.html#afad2e0f1f7faab3d370efd35868614ea", null ], + [ "getThermistorResistance", "classThermistorReader.html#a0670b7affeba1f06311c917b0d2fe6f4", null ], + [ "readTemp", "classThermistorReader.html#a61290269ed0011d84d4822d3a60f18cd", null ], + [ "B", "classThermistorReader.html#a456178989d361fcc9ff94ffe5bd29ef7", null ], + [ "pin", "classThermistorReader.html#a87837bcbc9afb3f53dbc21f00b3dc128", null ], + [ "r_inf", "classThermistorReader.html#a013098ce0a6b10cef915d45a0c5d4ce0", null ], + [ "R_series", "classThermistorReader.html#ac26191b6df012ddd53effff94d0c953a", null ], + [ "ref_pin", "classThermistorReader.html#aedb1a119cc42619d9380023ad765ec7f", null ] +]; \ No newline at end of file diff --git a/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.map b/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.map new file mode 100644 index 0000000..d7af008 --- /dev/null +++ b/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.md5 b/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.md5 new file mode 100644 index 0000000..a45167b --- /dev/null +++ b/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.md5 @@ -0,0 +1 @@ +f139dadf86dbf686c0eeb1afd8f7cb1c \ No newline at end of file diff --git a/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.svg b/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.svg new file mode 100644 index 0000000..17aebad --- /dev/null +++ b/classThermistorReader_a0670b7affeba1f06311c917b0d2fe6f4_icgraph.svg @@ -0,0 +1,58 @@ + + + + + + +ThermistorReader::getThermistorResistance + + +Node1 + + +ThermistorReader::getThermistor +Resistance + + + + + +Node2 + + +ThermistorReader::readTemp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +SerialLogger::log + + + + + +Node2->Node3 + + + + + + + + diff --git a/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.map b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.map new file mode 100644 index 0000000..256bef3 --- /dev/null +++ b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.md5 b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.md5 new file mode 100644 index 0000000..f363487 --- /dev/null +++ b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.md5 @@ -0,0 +1 @@ +09870bd8857de08673e1780865da9f3e \ No newline at end of file diff --git a/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.svg b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.svg new file mode 100644 index 0000000..82b4d51 --- /dev/null +++ b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_cgraph.svg @@ -0,0 +1,40 @@ + + + + + + +ThermistorReader::readTemp + + +Node1 + + +ThermistorReader::readTemp + + + + + +Node2 + + +ThermistorReader::getThermistor +Resistance + + + + + +Node1->Node2 + + + + + + + + diff --git a/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.map b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.map new file mode 100644 index 0000000..a00e3dc --- /dev/null +++ b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.md5 b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.md5 new file mode 100644 index 0000000..1df7570 --- /dev/null +++ b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.md5 @@ -0,0 +1 @@ +2b8c03cf2a46f007eb229eebdcbb8162 \ No newline at end of file diff --git a/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.svg b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.svg new file mode 100644 index 0000000..f535760 --- /dev/null +++ b/classThermistorReader_a61290269ed0011d84d4822d3a60f18cd_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +ThermistorReader::readTemp + + +Node1 + + +ThermistorReader::readTemp + + + + + +Node2 + + +SerialLogger::log + + + + + +Node1->Node2 + + + + + + + + diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..01673a5 --- /dev/null +++ b/classes.html @@ -0,0 +1,153 @@ + + + + + + + +Humidistat: Class Index + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Index
+
+
+
B | C | D | E | F | G | H | K | P | S | T | V
+ +
+
+ + + + diff --git a/clipboard.js b/clipboard.js new file mode 100644 index 0000000..42c1fb0 --- /dev/null +++ b/clipboard.js @@ -0,0 +1,61 @@ +/** + +The code below is based on the Doxygen Awesome project, see +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2022 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +let clipboard_title = "Copy to clipboard" +let clipboard_icon = `` +let clipboard_successIcon = `` +let clipboard_successDuration = 1000 + +$(function() { + if(navigator.clipboard) { + const fragments = document.getElementsByClassName("fragment") + for(const fragment of fragments) { + const clipboard_div = document.createElement("div") + clipboard_div.classList.add("clipboard") + clipboard_div.innerHTML = clipboard_icon + clipboard_div.title = clipboard_title + $(clipboard_div).click(function() { + const content = this.parentNode.cloneNode(true) + // filter out line number and folded fragments from file listings + content.querySelectorAll(".lineno, .ttc, .foldclosed").forEach((node) => { node.remove() }) + let text = content.textContent + // remove trailing newlines and trailing spaces from empty lines + text = text.replace(/^\s*\n/gm,'\n').replace(/\n*$/,'') + navigator.clipboard.writeText(text); + this.classList.add("success") + this.innerHTML = clipboard_successIcon + window.setTimeout(() => { // switch back to normal icon after timeout + this.classList.remove("success") + this.innerHTML = clipboard_icon + }, clipboard_successDuration); + }) + fragment.insertBefore(clipboard_div, fragment.firstChild) + } + } +}) diff --git a/closed.png b/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/closed.png differ diff --git a/config_8h.html b/config_8h.html new file mode 100644 index 0000000..9f88866 --- /dev/null +++ b/config_8h.html @@ -0,0 +1,222 @@ + + + + + + + +Humidistat: src/config.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
config.h File Reference
+
+
+
#include <Arduino.h>
+#include <etl/span.h>
+#include "Point.h"
+#include "config_assert.h"
+
+Include dependency graph for config.h:
+
+
+
+
+

Go to the source code of this file.

+ + + + + +

+Namespaces

namespace  config
 Define either HUMIDISTAT_CONTROLLER_SINGLE or HUMIDISTAT_CONTROLLER_CASCADE. In the latter case, flow sensors must be connected to PIN_F1 and PIN_F2.
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Variables

const uint32_t config::serialRate = 115200
 Serial communication symbol rate (baud)
 
const bool config::overrideEEPROM = false
 Set to true to override the values stored in EEPROM and use the default PID parameters defined below.
 
const uint8_t config::EEPROMAddress = 0
 EEPROM address for storing the block.
 
const uint16_t config::dt = 500
 Global interval for PID/logger (based on polling rate of sensor, in millis)
 
const double config::S_lowValue = 0.75
 Minimum solenoid duty cycle (deadband)
 
const double config::HC_totalFlowrate = 2
 Total flowrate (for cascade controller) (L/min)
 
const double config::a = 0.75
 Smoothing factor of EMA filter for derivative.
 
Humidity controller PID parameters
const double config::HC_Kp = 0.01
 
const double config::HC_Ki = 0.001
 
const double config::HC_Kd = 0.01
 
const double config::HC_Kf = 0.01
 
Flow controller PID parameters
const double config::FC_Kp = 0.005
 
const double config::FC_Ki = 0.05
 
const double config::FC_Kd = 0
 
const double config::FC_Kf = 0
 
const uint16_t config::FC_dt = 100
 
Setpoint profiles

Here you can define setpoint profiles (arrays of Points, which are pairs of a time and setpoint value). The Point arrays must be sorted in time. Enter the profiles in profiles, which is an array of SPProfiles (which takes a pair of a label string and span of Points)

+
const uint8_t config::interval = 20
 
const Point config::profile_tuningtest []
 
const SPProfile config::profiles []
 Setpoint profile definitions.
 
UI
const uint16_t config::buttonDebounceInterval = 500
 For debouncing: interval the keypad state must be stable for (in micros)
 
const uint16_t config::inputInterval = 200
 Repeat interval for keypress events (in millis)
 
const uint16_t config::blinkInterval = 500
 Interval for blinking display elements (in millis)
 
const uint16_t config::splashDuration = 2000
 Duration for which to show the splash screen (in millis)
 
const uint16_t config::infoDuration = 0
 Duration for which to show the info screen (in millis)
 
const uint16_t config::refreshInterval = 100
 Interval for updating the display (in millis)
 
const uint8_t config::adjustStep = 10
 Step size by which to in-/de-crement for coarse adjustment.
 
const double config::tolerance = 0.01
 Tolerance in difference between process variable and setpoint outside which the setpoint blinks (in percentage points)
 
For GraphicalDisplayUI:
const uint16_t config::longPressDuration = 500
 Duration for counting a press as 'long' (in millis)
 
const uint8_t config::configSaveCooldown = 20 * 1000 / refreshInterval
 Cooldown on saving the config to EEPROM (in refresh cycles)
 
+
+
+ + + + diff --git a/config_8h.js b/config_8h.js new file mode 100644 index 0000000..e13b68b --- /dev/null +++ b/config_8h.js @@ -0,0 +1,32 @@ +var config_8h = +[ + [ "a", "config_8h.html#adf257822f5649969fadc2f96deb4180d", null ], + [ "adjustStep", "config_8h.html#af15133e1530c8593943f083475426a42", null ], + [ "blinkInterval", "config_8h.html#a1a1598c2b8b9a3d06b6ed571dc0a7a6b", null ], + [ "buttonDebounceInterval", "config_8h.html#a65edde76331e184ebe3faf2d721668de", null ], + [ "configSaveCooldown", "config_8h.html#acdfe1dd31c0f8189cf0a3f64e9460963", null ], + [ "dt", "config_8h.html#a3ec0299a5eb318a3c6045f7f08a8e61f", null ], + [ "EEPROMAddress", "config_8h.html#a37ae42be9e0e824df24c701e66404910", null ], + [ "FC_dt", "config_8h.html#a4289d73bfff6169ecdad5da87d709fbe", null ], + [ "FC_Kd", "config_8h.html#a6eeb27a3b017e6f6318a5db9dd1f3e31", null ], + [ "FC_Kf", "config_8h.html#a3cb43341feacf60c4def05461696e643", null ], + [ "FC_Ki", "config_8h.html#af7a206a5815237178ba961751b7b1a15", null ], + [ "FC_Kp", "config_8h.html#ac5d63000cecbeb4775ae0bfa2c79099e", null ], + [ "HC_Kd", "config_8h.html#a5bd0f455875ca9cb0134379be2ed8580", null ], + [ "HC_Kf", "config_8h.html#a427424d63e7aae495cb45a14afafc6c6", null ], + [ "HC_Ki", "config_8h.html#a5d6409304d96ffa0f508f75546c3275a", null ], + [ "HC_Kp", "config_8h.html#a6c3ad86dbaffb21b8772d6e43fa311fb", null ], + [ "HC_totalFlowrate", "config_8h.html#a7b7632d6da3b6cfc42483203b077876e", null ], + [ "infoDuration", "config_8h.html#a914e73b53167ff24ac7b5eddc8dca459", null ], + [ "inputInterval", "config_8h.html#afb59421e98aca5f4b48d2f4b885416fa", null ], + [ "interval", "config_8h.html#af59ae3897790505c6002f787d7b6ebdc", null ], + [ "longPressDuration", "config_8h.html#a5e2a3a9098245e7373a123dea0517ada", null ], + [ "overrideEEPROM", "config_8h.html#a7645bcfa797e1e40c3231392194ef388", null ], + [ "profile_tuningtest", "config_8h.html#aa72cd1d2d5a5497d8adac4a71a39c5ac", null ], + [ "profiles", "config_8h.html#a6e3be61e05a469505fd17cd61bcd7f51", null ], + [ "refreshInterval", "config_8h.html#a0765bf22e69716c8ec9cb288037598ed", null ], + [ "S_lowValue", "config_8h.html#a989ce330d6d09ee1ec6a61c56d5751b7", null ], + [ "serialRate", "config_8h.html#ad523f1c03fca3954dd9dddddc7bced67", null ], + [ "splashDuration", "config_8h.html#aedbb4aef54ad7841b336871944263821", null ], + [ "tolerance", "config_8h.html#a25d98806cbf0bd49d964a09656e7dfae", null ] +]; \ No newline at end of file diff --git a/config_8h__incl.map b/config_8h__incl.map new file mode 100644 index 0000000..e2df499 --- /dev/null +++ b/config_8h__incl.map @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/config_8h__incl.md5 b/config_8h__incl.md5 new file mode 100644 index 0000000..b277f54 --- /dev/null +++ b/config_8h__incl.md5 @@ -0,0 +1 @@ +67462102d4d60743e2481666dd363278 \ No newline at end of file diff --git a/config_8h__incl.svg b/config_8h__incl.svg new file mode 100644 index 0000000..323b1ba --- /dev/null +++ b/config_8h__incl.svg @@ -0,0 +1,120 @@ + + + + + + +src/config.h + + +Node1 + + +src/config.h + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +etl/span.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +Point.h + + + + + +Node1->Node4 + + + + + + + + +Node6 + + +config_assert.h + + + + + +Node1->Node6 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +stdint.h + + + + + +Node4->Node5 + + + + + + + + diff --git a/config_8h_source.html b/config_8h_source.html new file mode 100644 index 0000000..9a1c998 --- /dev/null +++ b/config_8h_source.html @@ -0,0 +1,280 @@ + + + + + + + +Humidistat: src/config.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
config.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CONFIG_H
+
2#define HUMIDISTAT_CONFIG_H
+
3
+
4#include <Arduino.h>
+
5#include <etl/span.h>
+
6
+
7#include "Point.h"
+
8
+
11//#define HUMIDISTAT_CONTROLLER_SINGLE
+
12//#define HUMIDISTAT_CONTROLLER_CASCADE
+
13
+
17//#define HUMIDISTAT_DHT
+
18//#define HUMIDISTAT_SHT
+
19
+
22//#define HUMIDISTAT_INPUT_KS0256
+
23//#define HUMIDISTAT_INPUT_KS0466
+
24
+
28//#define HUMIDISTAT_UI_CHAR
+
29//#define HUMIDISTAT_UI_GRAPH
+
30
+
+
31namespace config {
+
33 const uint32_t serialRate = 115200;
+
34
+
36 const bool overrideEEPROM = false;
+
37
+
39 const uint8_t EEPROMAddress = 0;
+
40
+
42#ifdef HUMIDISTAT_SHT
+
43 const uint16_t dt = 250;
+
44#else
+
45 const uint16_t dt = 500;
+
46#endif
+
47
+
50 const double HC_Kp = 0.01;
+
51 const double HC_Ki = 0.001;
+
52 const double HC_Kd = 0.01;
+
53 const double HC_Kf = 0.01;
+
55
+
58 const double FC_Kp = 0.005;
+
59 const double FC_Ki = 0.05;
+
60 const double FC_Kd = 0;
+
61 const double FC_Kf = 0;
+
62 const uint16_t FC_dt = 100;
+
64
+
66 const double S_lowValue = 0.75;
+
67
+
69 const double HC_totalFlowrate = 2;
+
70
+
72 const double a = 0.75;
+
73
+
76#ifdef ARDUINO_AVR_UNO
+
77 const uint8_t PIN_DHT = 2;
+
78 const uint8_t PIN_BTN = A0;
+
79 const uint8_t PIN_S1 = 3;
+
80 const uint8_t PIN_S2 = 11;
+
81
+
84 const uint8_t PIN_LCD_RS = 8;
+
85 const uint8_t PIN_LCD_ENABLE = 9;
+
86 const uint8_t PIN_LCD_D0 = 4;
+
87 const uint8_t PIN_LCD_D1 = 5;
+
88 const uint8_t PIN_LCD_D2 = 6;
+
89 const uint8_t PIN_LCD_D3 = 7;
+
91
+
94 const uint8_t PIN_T1 = A1;
+
95 const uint8_t PIN_T2 = A2;
+
96 const uint8_t PIN_T3 = A3;
+
97 const uint8_t PIN_T4 = A4;
+
99#endif
+
100#if defined(ARDUINO_TEENSYLC) || defined(ARDUINO_TEENSY40)
+
101 const uint8_t PIN_DHT = 17;
+
102 const uint8_t PIN_BTN = A0;
+
103 const uint8_t PIN_S1 = 3;
+
104 const uint8_t PIN_S2 = 4;
+
105 const uint8_t PIN_F1 = A1;
+
106 const uint8_t PIN_F2 = A2;
+
107
+
109 const uint8_t PIN_LCD_CS = 10;
+
110 const uint8_t PIN_LCD_MOSI = 11;
+
111 const uint8_t PIN_LCD_SCLK = 13;
+
112
+
115 const uint8_t PIN_T1 = A6;
+
116 const uint8_t PIN_T2 = A7;
+
117 const uint8_t PIN_T3 = A8;
+
118 const uint8_t PIN_T4 = A9;
+
120#endif
+
122
+
129 const uint8_t interval = 20; // seconds
+
+ +
131 {0 * interval, 50},
+
132 {1 * interval, 30},
+
133 {2 * interval, 60},
+
134 {3 * interval, 70},
+
135 {4 * interval, 20},
+
136 };
+
+
137
+
+
139 const SPProfile profiles[] = {
+
140 {"Tuning test", etl::span<const Point>(profile_tuningtest)},
+
141 };
+
+
143
+
146
+
148 const uint16_t buttonDebounceInterval = 500;
+
149
+
151 const uint16_t inputInterval = 200;
+
152
+
154 const uint16_t blinkInterval = 500;
+
155
+
157 const uint16_t splashDuration = 2000;
+
158
+
160 const uint16_t infoDuration = 0;
+
161
+
163 const uint16_t refreshInterval = 100;
+
164
+
166 const uint8_t adjustStep = 10;
+
167
+
170 const double tolerance = 0.01;
+
172
+
175
+
177 const uint16_t longPressDuration = 500;
+
178
+
180 const uint8_t configSaveCooldown = 20 * 1000 / refreshInterval;
+
182}
+
+
183
+
184#include "config_assert.h"
+
185
+
186#endif //HUMIDISTAT_CONFIG_H
+ + +
Define either HUMIDISTAT_CONTROLLER_SINGLE or HUMIDISTAT_CONTROLLER_CASCADE. In the latter case,...
Definition config.h:31
+
const uint16_t refreshInterval
Interval for updating the display (in millis)
Definition config.h:163
+
const uint16_t blinkInterval
Interval for blinking display elements (in millis)
Definition config.h:154
+
const double tolerance
Tolerance in difference between process variable and setpoint outside which the setpoint blinks (in p...
Definition config.h:170
+
const uint8_t EEPROMAddress
EEPROM address for storing the block.
Definition config.h:39
+
const double FC_Kf
Definition config.h:61
+
const uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
Definition config.h:45
+
const double HC_Kf
Definition config.h:53
+
const uint16_t FC_dt
Definition config.h:62
+
const double HC_Kd
Definition config.h:52
+
const double HC_Ki
Definition config.h:51
+
const uint16_t longPressDuration
Duration for counting a press as 'long' (in millis)
Definition config.h:177
+
const uint16_t buttonDebounceInterval
For debouncing: interval the keypad state must be stable for (in micros)
Definition config.h:148
+
const double HC_Kp
Definition config.h:50
+
const SPProfile profiles[]
Setpoint profile definitions.
Definition config.h:139
+
const double FC_Kd
Definition config.h:60
+
const bool overrideEEPROM
Set to true to override the values stored in EEPROM and use the default PID parameters defined below.
Definition config.h:36
+
const double HC_totalFlowrate
Total flowrate (for cascade controller) (L/min)
Definition config.h:69
+
const uint16_t infoDuration
Duration for which to show the info screen (in millis)
Definition config.h:160
+
const double S_lowValue
Minimum solenoid duty cycle (deadband)
Definition config.h:66
+
const Point profile_tuningtest[]
Definition config.h:130
+
const double FC_Kp
Definition config.h:58
+
const uint8_t configSaveCooldown
Cooldown on saving the config to EEPROM (in refresh cycles)
Definition config.h:180
+
const uint32_t serialRate
Serial communication symbol rate (baud)
Definition config.h:33
+
const double a
Smoothing factor of EMA filter for derivative.
Definition config.h:72
+
const uint16_t splashDuration
Duration for which to show the splash screen (in millis)
Definition config.h:157
+
const uint8_t adjustStep
Step size by which to in-/de-crement for coarse adjustment.
Definition config.h:166
+
const uint8_t interval
Definition config.h:129
+
const double FC_Ki
Definition config.h:59
+
const uint16_t inputInterval
Repeat interval for keypress events (in millis)
Definition config.h:151
+
Point: a vector of a time and setpoint value.
Definition Point.h:8
+
Setpoint profile: a label and a span over Points.
Definition Point.h:14
+
+
+ + + + diff --git a/config__assert_8h.html b/config__assert_8h.html new file mode 100644 index 0000000..738a4e2 --- /dev/null +++ b/config__assert_8h.html @@ -0,0 +1,122 @@ + + + + + + + +Humidistat: src/config_assert.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
config_assert.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+
+
+ + + + diff --git a/config__assert_8h__dep__incl.map b/config__assert_8h__dep__incl.map new file mode 100644 index 0000000..a6f6e82 --- /dev/null +++ b/config__assert_8h__dep__incl.map @@ -0,0 +1,5 @@ + + + + + diff --git a/config__assert_8h__dep__incl.md5 b/config__assert_8h__dep__incl.md5 new file mode 100644 index 0000000..d19298d --- /dev/null +++ b/config__assert_8h__dep__incl.md5 @@ -0,0 +1 @@ +4c339df34520ae08288e773f15914cef \ No newline at end of file diff --git a/config__assert_8h__dep__incl.svg b/config__assert_8h__dep__incl.svg new file mode 100644 index 0000000..bdfbf7e --- /dev/null +++ b/config__assert_8h__dep__incl.svg @@ -0,0 +1,39 @@ + + + + + + +src/config_assert.h + + +Node1 + + +src/config_assert.h + + + + + +Node2 + + +src/config.h + + + + + +Node1->Node2 + + + + + + + + diff --git a/config__assert_8h_source.html b/config__assert_8h_source.html new file mode 100644 index 0000000..f8f88ea --- /dev/null +++ b/config__assert_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + +Humidistat: src/config_assert.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
config_assert.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_CONFIG_ASSERT_H
+
2#define HUMIDISTAT_CONFIG_ASSERT_H
+
3
+
4#if !defined(HUMIDISTAT_CONTROLLER_SINGLE) && !defined(HUMIDISTAT_CONTROLLER_CASCADE)
+
5#error No humidistat type defined! Configure the firmware in src/config.h first.
+
6#endif
+
7
+
8#if !defined(HUMIDISTAT_DHT) && !defined(HUMIDISTAT_SHT)
+
9#error No humidity sensor type defined! Configure the firmware in src/config.h first.
+
10#endif
+
11
+
12#if !defined(HUMIDISTAT_INPUT_KS0256) && !defined(HUMIDISTAT_INPUT_KS0466)
+
13#error No keypad type defined! Configure the firmware in src/config.h first.
+
14#endif
+
15
+
16#if !defined(HUMIDISTAT_UI_CHAR) && !defined(HUMIDISTAT_UI_GRAPH)
+
17#error No UI type defined! Configure the firmware in src/config.h first.
+
18#endif
+
19
+
20#endif //HUMIDISTAT_CONFIG_ASSERT_H
+
+
+ + + + diff --git a/cookie.js b/cookie.js new file mode 100644 index 0000000..53ad21d --- /dev/null +++ b/cookie.js @@ -0,0 +1,58 @@ +/*! + Cookie helper functions + Copyright (c) 2023 Dimitri van Heesch + Released under MIT license. +*/ +let Cookie = { + cookie_namespace: 'doxygen_', + + readSetting(cookie,defVal) { + if (window.chrome) { + const val = localStorage.getItem(this.cookie_namespace+cookie) || + sessionStorage.getItem(this.cookie_namespace+cookie); + if (val) return val; + } else { + let myCookie = this.cookie_namespace+cookie+"="; + if (document.cookie) { + const index = document.cookie.indexOf(myCookie); + if (index != -1) { + const valStart = index + myCookie.length; + let valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + return document.cookie.substring(valStart, valEnd); + } + } + } + return defVal; + }, + + writeSetting(cookie,val,days=10*365) { // default days='forever', 0=session cookie, -1=delete + if (window.chrome) { + if (days==0) { + sessionStorage.setItem(this.cookie_namespace+cookie,val); + } else { + localStorage.setItem(this.cookie_namespace+cookie,val); + } + } else { + let date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + const expiration = days!=0 ? "expires="+date.toGMTString()+";" : ""; + document.cookie = this.cookie_namespace + cookie + "=" + + val + "; SameSite=Lax;" + expiration + "path=/"; + } + }, + + eraseSetting(cookie) { + if (window.chrome) { + if (localStorage.getItem(this.cookie_namespace+cookie)) { + localStorage.removeItem(this.cookie_namespace+cookie); + } else if (sessionStorage.getItem(this.cookie_namespace+cookie)) { + sessionStorage.removeItem(this.cookie_namespace+cookie); + } + } else { + this.writeSetting(cookie,'',-1); + } + }, +} diff --git a/dir_000000_000002.html b/dir_000000_000002.html new file mode 100644 index 0000000..7a0e76f --- /dev/null +++ b/dir_000000_000002.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src/control -> sensor Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

control → sensor Relation

File in src/controlIncludes file in src/sensor
CascadeHumidistat.hFlowSensor.h
FlowController.hFlowSensor.h
+
+ + + + diff --git a/dir_000003_000000.html b/dir_000003_000000.html new file mode 100644 index 0000000..c6a1e85 --- /dev/null +++ b/dir_000003_000000.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src -> control Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

src → control Relation

File in srcIncludes file in src/control
SerialLogger.hCascadeHumidistat.h
SerialLogger.hSingleHumidistat.h
SetpointProfileRunner.hHumidistat.h
ui / CharDisplayUI.hSingleHumidistat.h
ui / GraphicalDisplayUI.hSingleHumidistat.h
ui / GraphicalDisplayUI.hCascadeHumidistat.h
+
+ + + + diff --git a/dir_000003_000001.html b/dir_000003_000001.html new file mode 100644 index 0000000..a8b6ba4 --- /dev/null +++ b/dir_000003_000001.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src -> input Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

src → input Relation

File in srcIncludes file in src/input
main.cppButtonReader.h
ui / ControllerUI.hButtonReader.h
+
+ + + + diff --git a/dir_000003_000002.html b/dir_000003_000002.html new file mode 100644 index 0000000..f0550e2 --- /dev/null +++ b/dir_000003_000002.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src -> sensor Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

src → sensor Relation

File in srcIncludes file in src/sensor
control / CascadeHumidistat.hFlowSensor.h
control / FlowController.hFlowSensor.h
main.cppThermistorReader.h
SerialLogger.hThermistorReader.h
ui / ControllerUI.hThermistorReader.h
+
+ + + + diff --git a/dir_000004_000000.html b/dir_000004_000000.html new file mode 100644 index 0000000..4bd80a6 --- /dev/null +++ b/dir_000004_000000.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src/ui -> control Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

ui → control Relation

File in src/uiIncludes file in src/control
CharDisplayUI.hSingleHumidistat.h
GraphicalDisplayUI.hCascadeHumidistat.h
GraphicalDisplayUI.hSingleHumidistat.h
+
+ + + + diff --git a/dir_000004_000001.html b/dir_000004_000001.html new file mode 100644 index 0000000..9b6f1ae --- /dev/null +++ b/dir_000004_000001.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src/ui -> input Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

ui → input Relation

File in src/uiIncludes file in src/input
ControllerUI.hButtonReader.h
+
+ + + + diff --git a/dir_000004_000002.html b/dir_000004_000002.html new file mode 100644 index 0000000..22f25b0 --- /dev/null +++ b/dir_000004_000002.html @@ -0,0 +1,112 @@ + + + + + + + +Humidistat: src/ui -> sensor Relation + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+

ui → sensor Relation

File in src/uiIncludes file in src/sensor
ControllerUI.hThermistorReader.h
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..aa88ad6 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,163 @@ + + + + + + + +Humidistat: src Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
src Directory Reference
+
+
+
+Directory dependency graph for src:
+
+
+
+ + + + + + + + + + +

+Directories

 control
 
 input
 
 sensor
 
 ui
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 advanceEnum.h
 
 aliases.h
 
 asprintf.h
 
 config.h
 
 config_assert.h
 
 EEPROMConfig.cpp
 
 EEPROMConfig.h
 
 imath.h
 
 main.cpp
 
 new.cpp
 
 Point.h
 
 SerialLogger.h
 
 SetpointProfileRunner.cpp
 
 SetpointProfileRunner.h
 
+
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 0000000..eceaac8 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,21 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "control", "dir_b81b067251166617f9d0a8c0cfc3a4a9.html", "dir_b81b067251166617f9d0a8c0cfc3a4a9" ], + [ "input", "dir_d365e15d984c8d0205117ee0c40d6716.html", "dir_d365e15d984c8d0205117ee0c40d6716" ], + [ "sensor", "dir_919653a6098570dc99a63e645d1b29db.html", "dir_919653a6098570dc99a63e645d1b29db" ], + [ "ui", "dir_da5c6b39c0a2f54e57df6799511cd3ab.html", "dir_da5c6b39c0a2f54e57df6799511cd3ab" ], + [ "advanceEnum.h", "advanceEnum_8h.html", "advanceEnum_8h" ], + [ "aliases.h", "aliases_8h.html", null ], + [ "asprintf.h", "asprintf_8h.html", "asprintf_8h" ], + [ "config.h", "config_8h.html", "config_8h" ], + [ "config_assert.h", "config__assert_8h.html", null ], + [ "EEPROMConfig.cpp", "EEPROMConfig_8cpp.html", null ], + [ "EEPROMConfig.h", "EEPROMConfig_8h.html", "EEPROMConfig_8h" ], + [ "imath.h", "imath_8h.html", "imath_8h" ], + [ "main.cpp", "main_8cpp.html", "main_8cpp" ], + [ "new.cpp", "new_8cpp.html", null ], + [ "Point.h", "Point_8h.html", "Point_8h" ], + [ "SerialLogger.h", "SerialLogger_8h.html", "SerialLogger_8h" ], + [ "SetpointProfileRunner.cpp", "SetpointProfileRunner_8cpp.html", null ], + [ "SetpointProfileRunner.h", "SetpointProfileRunner_8h.html", "SetpointProfileRunner_8h" ] +]; \ No newline at end of file diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map new file mode 100644 index 0000000..62eede7 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.map @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 new file mode 100644 index 0000000..95ed499 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.md5 @@ -0,0 +1 @@ +491aa1571f9ed215a732806a8c21c5b6 \ No newline at end of file diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg new file mode 100644 index 0000000..5df586f --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba_dep.svg @@ -0,0 +1,151 @@ + + + + + + +src + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + + + + + + +dir_68267d1309a1af8e8297ef4c3efbcdba +src + + + +dir_b81b067251166617f9d0a8c0cfc3a4a9 + + +control + + + + + +dir_68267d1309a1af8e8297ef4c3efbcdba->dir_b81b067251166617f9d0a8c0cfc3a4a9 + + + + + + +6 + + + + + +dir_d365e15d984c8d0205117ee0c40d6716 + + +input + + + + + +dir_68267d1309a1af8e8297ef4c3efbcdba->dir_d365e15d984c8d0205117ee0c40d6716 + + + + + + +2 + + + + + +dir_919653a6098570dc99a63e645d1b29db + + +sensor + + + + + +dir_68267d1309a1af8e8297ef4c3efbcdba->dir_919653a6098570dc99a63e645d1b29db + + + + + + +5 + + + + + +dir_b81b067251166617f9d0a8c0cfc3a4a9->dir_919653a6098570dc99a63e645d1b29db + + + + + + +2 + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab + + +ui + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab->dir_b81b067251166617f9d0a8c0cfc3a4a9 + + + + + + +3 + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab->dir_d365e15d984c8d0205117ee0c40d6716 + + + + + + +1 + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab->dir_919653a6098570dc99a63e645d1b29db + + + + + + +1 + + + + + diff --git a/dir_919653a6098570dc99a63e645d1b29db.html b/dir_919653a6098570dc99a63e645d1b29db.html new file mode 100644 index 0000000..314aa06 --- /dev/null +++ b/dir_919653a6098570dc99a63e645d1b29db.html @@ -0,0 +1,140 @@ + + + + + + + +Humidistat: src/sensor Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
sensor Directory Reference
+
+
+
+Directory dependency graph for sensor:
+
+
+
+ + + + + + + + + + + + + + + + + + +

+Files

 DHTHumiditySensor.cpp
 
 DHTHumiditySensor.h
 
 FlowSensor.cpp
 
 FlowSensor.h
 
 SHTHumiditySensor.cpp
 
 SHTHumiditySensor.h
 
 ThermistorReader.cpp
 
 ThermistorReader.h
 
+
+
+ + + + diff --git a/dir_919653a6098570dc99a63e645d1b29db.js b/dir_919653a6098570dc99a63e645d1b29db.js new file mode 100644 index 0000000..d13f957 --- /dev/null +++ b/dir_919653a6098570dc99a63e645d1b29db.js @@ -0,0 +1,11 @@ +var dir_919653a6098570dc99a63e645d1b29db = +[ + [ "DHTHumiditySensor.cpp", "DHTHumiditySensor_8cpp.html", null ], + [ "DHTHumiditySensor.h", "DHTHumiditySensor_8h.html", "DHTHumiditySensor_8h" ], + [ "FlowSensor.cpp", "FlowSensor_8cpp.html", null ], + [ "FlowSensor.h", "FlowSensor_8h.html", "FlowSensor_8h" ], + [ "SHTHumiditySensor.cpp", "SHTHumiditySensor_8cpp.html", null ], + [ "SHTHumiditySensor.h", "SHTHumiditySensor_8h.html", "SHTHumiditySensor_8h" ], + [ "ThermistorReader.cpp", "ThermistorReader_8cpp.html", null ], + [ "ThermistorReader.h", "ThermistorReader_8h.html", "ThermistorReader_8h" ] +]; \ No newline at end of file diff --git a/dir_919653a6098570dc99a63e645d1b29db_dep.map b/dir_919653a6098570dc99a63e645d1b29db_dep.map new file mode 100644 index 0000000..6060856 --- /dev/null +++ b/dir_919653a6098570dc99a63e645d1b29db_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_919653a6098570dc99a63e645d1b29db_dep.md5 b/dir_919653a6098570dc99a63e645d1b29db_dep.md5 new file mode 100644 index 0000000..e475a4e --- /dev/null +++ b/dir_919653a6098570dc99a63e645d1b29db_dep.md5 @@ -0,0 +1 @@ +5bc628bf5b8ef95384e8d2f3fdfcaad0 \ No newline at end of file diff --git a/dir_919653a6098570dc99a63e645d1b29db_dep.svg b/dir_919653a6098570dc99a63e645d1b29db_dep.svg new file mode 100644 index 0000000..c3c0af2 --- /dev/null +++ b/dir_919653a6098570dc99a63e645d1b29db_dep.svg @@ -0,0 +1,29 @@ + + + + + + +src/sensor + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + +src + + + + + +dir_919653a6098570dc99a63e645d1b29db + + +sensor + + + + + diff --git a/dir_b81b067251166617f9d0a8c0cfc3a4a9.html b/dir_b81b067251166617f9d0a8c0cfc3a4a9.html new file mode 100644 index 0000000..2a76fbf --- /dev/null +++ b/dir_b81b067251166617f9d0a8c0cfc3a4a9.html @@ -0,0 +1,148 @@ + + + + + + + +Humidistat: src/control Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
control Directory Reference
+
+
+
+Directory dependency graph for control:
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

 CascadeHumidistat.cpp
 
 CascadeHumidistat.h
 
 Controller.cpp
 
 Controller.h
 
 FlowController.cpp
 
 FlowController.h
 
 Humidistat.cpp
 
 Humidistat.h
 
 PID.cpp
 
 PID.h
 
 SingleHumidistat.cpp
 
 SingleHumidistat.h
 
+
+
+ + + + diff --git a/dir_b81b067251166617f9d0a8c0cfc3a4a9.js b/dir_b81b067251166617f9d0a8c0cfc3a4a9.js new file mode 100644 index 0000000..525c576 --- /dev/null +++ b/dir_b81b067251166617f9d0a8c0cfc3a4a9.js @@ -0,0 +1,15 @@ +var dir_b81b067251166617f9d0a8c0cfc3a4a9 = +[ + [ "CascadeHumidistat.cpp", "CascadeHumidistat_8cpp.html", null ], + [ "CascadeHumidistat.h", "CascadeHumidistat_8h.html", "CascadeHumidistat_8h" ], + [ "Controller.cpp", "Controller_8cpp.html", null ], + [ "Controller.h", "Controller_8h.html", "Controller_8h" ], + [ "FlowController.cpp", "FlowController_8cpp.html", null ], + [ "FlowController.h", "FlowController_8h.html", "FlowController_8h" ], + [ "Humidistat.cpp", "Humidistat_8cpp.html", null ], + [ "Humidistat.h", "Humidistat_8h.html", "Humidistat_8h" ], + [ "PID.cpp", "PID_8cpp.html", null ], + [ "PID.h", "PID_8h.html", "PID_8h" ], + [ "SingleHumidistat.cpp", "SingleHumidistat_8cpp.html", null ], + [ "SingleHumidistat.h", "SingleHumidistat_8h.html", "SingleHumidistat_8h" ] +]; \ No newline at end of file diff --git a/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.map b/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.map new file mode 100644 index 0000000..ecefe37 --- /dev/null +++ b/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.md5 b/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.md5 new file mode 100644 index 0000000..68df851 --- /dev/null +++ b/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.md5 @@ -0,0 +1 @@ +7fcd7b4600e3b31595ff491b93f0ae40 \ No newline at end of file diff --git a/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.svg b/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.svg new file mode 100644 index 0000000..b97a880 --- /dev/null +++ b/dir_b81b067251166617f9d0a8c0cfc3a4a9_dep.svg @@ -0,0 +1,51 @@ + + + + + + +src/control + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + +src + + + + + +dir_919653a6098570dc99a63e645d1b29db + + +sensor + + + + + +dir_b81b067251166617f9d0a8c0cfc3a4a9 + + +control + + + + + +dir_b81b067251166617f9d0a8c0cfc3a4a9->dir_919653a6098570dc99a63e645d1b29db + + + + + + +2 + + + + + diff --git a/dir_d365e15d984c8d0205117ee0c40d6716.html b/dir_d365e15d984c8d0205117ee0c40d6716.html new file mode 100644 index 0000000..eab1e89 --- /dev/null +++ b/dir_d365e15d984c8d0205117ee0c40d6716.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/input Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
input Directory Reference
+
+
+
+Directory dependency graph for input:
+
+
+
+ + + + + + + + + + + + + + + + +

+Files

 ButtonReader.cpp
 
 ButtonReader.h
 
 Buttons.h
 
 Ks0256VoltLadder.cpp
 
 Ks0256VoltLadder.h
 
 Ks0466VoltLadder.cpp
 
 Ks0466VoltLadder.h
 
+
+
+ + + + diff --git a/dir_d365e15d984c8d0205117ee0c40d6716.js b/dir_d365e15d984c8d0205117ee0c40d6716.js new file mode 100644 index 0000000..76afc33 --- /dev/null +++ b/dir_d365e15d984c8d0205117ee0c40d6716.js @@ -0,0 +1,10 @@ +var dir_d365e15d984c8d0205117ee0c40d6716 = +[ + [ "ButtonReader.cpp", "ButtonReader_8cpp.html", null ], + [ "ButtonReader.h", "ButtonReader_8h.html", "ButtonReader_8h" ], + [ "Buttons.h", "Buttons_8h.html", "Buttons_8h" ], + [ "Ks0256VoltLadder.cpp", "Ks0256VoltLadder_8cpp.html", null ], + [ "Ks0256VoltLadder.h", "Ks0256VoltLadder_8h.html", "Ks0256VoltLadder_8h" ], + [ "Ks0466VoltLadder.cpp", "Ks0466VoltLadder_8cpp.html", null ], + [ "Ks0466VoltLadder.h", "Ks0466VoltLadder_8h.html", "Ks0466VoltLadder_8h" ] +]; \ No newline at end of file diff --git a/dir_d365e15d984c8d0205117ee0c40d6716_dep.map b/dir_d365e15d984c8d0205117ee0c40d6716_dep.map new file mode 100644 index 0000000..e08aa20 --- /dev/null +++ b/dir_d365e15d984c8d0205117ee0c40d6716_dep.map @@ -0,0 +1,4 @@ + + + + diff --git a/dir_d365e15d984c8d0205117ee0c40d6716_dep.md5 b/dir_d365e15d984c8d0205117ee0c40d6716_dep.md5 new file mode 100644 index 0000000..6002844 --- /dev/null +++ b/dir_d365e15d984c8d0205117ee0c40d6716_dep.md5 @@ -0,0 +1 @@ +4dbdba3ebb164b0ba90116ac37a3109e \ No newline at end of file diff --git a/dir_d365e15d984c8d0205117ee0c40d6716_dep.svg b/dir_d365e15d984c8d0205117ee0c40d6716_dep.svg new file mode 100644 index 0000000..9ab6e07 --- /dev/null +++ b/dir_d365e15d984c8d0205117ee0c40d6716_dep.svg @@ -0,0 +1,29 @@ + + + + + + +src/input + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + +src + + + + + +dir_d365e15d984c8d0205117ee0c40d6716 + + +input + + + + + diff --git a/dir_da5c6b39c0a2f54e57df6799511cd3ab.html b/dir_da5c6b39c0a2f54e57df6799511cd3ab.html new file mode 100644 index 0000000..1c04c2b --- /dev/null +++ b/dir_da5c6b39c0a2f54e57df6799511cd3ab.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/ui Directory Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
ui Directory Reference
+
+
+
+Directory dependency graph for ui:
+
+
+
+ + + + + + + + + + + + + + + + +

+Files

 CharDisplayUI.cpp
 
 CharDisplayUI.h
 
 ConfigPar.cpp
 
 ConfigPar.h
 
 ControllerUI.cpp
 
 ControllerUI.h
 
 GraphicalDisplayUI.h
 
+
+
+ + + + diff --git a/dir_da5c6b39c0a2f54e57df6799511cd3ab.js b/dir_da5c6b39c0a2f54e57df6799511cd3ab.js new file mode 100644 index 0000000..5544064 --- /dev/null +++ b/dir_da5c6b39c0a2f54e57df6799511cd3ab.js @@ -0,0 +1,10 @@ +var dir_da5c6b39c0a2f54e57df6799511cd3ab = +[ + [ "CharDisplayUI.cpp", "CharDisplayUI_8cpp.html", null ], + [ "CharDisplayUI.h", "CharDisplayUI_8h.html", "CharDisplayUI_8h" ], + [ "ConfigPar.cpp", "ConfigPar_8cpp.html", null ], + [ "ConfigPar.h", "ConfigPar_8h.html", "ConfigPar_8h" ], + [ "ControllerUI.cpp", "ControllerUI_8cpp.html", null ], + [ "ControllerUI.h", "ControllerUI_8h.html", "ControllerUI_8h" ], + [ "GraphicalDisplayUI.h", "GraphicalDisplayUI_8h.html", "GraphicalDisplayUI_8h" ] +]; \ No newline at end of file diff --git a/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.map b/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.map new file mode 100644 index 0000000..cdbc3ef --- /dev/null +++ b/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.map @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.md5 b/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.md5 new file mode 100644 index 0000000..64915bf --- /dev/null +++ b/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.md5 @@ -0,0 +1 @@ +1473a103cc2b3b66136d3b7d5b7dacaa \ No newline at end of file diff --git a/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.svg b/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.svg new file mode 100644 index 0000000..86796e5 --- /dev/null +++ b/dir_da5c6b39c0a2f54e57df6799511cd3ab_dep.svg @@ -0,0 +1,95 @@ + + + + + + +src/ui + +clusterdir_68267d1309a1af8e8297ef4c3efbcdba + + +src + + + + + +dir_919653a6098570dc99a63e645d1b29db + + +sensor + + + + + +dir_b81b067251166617f9d0a8c0cfc3a4a9 + + +control + + + + + +dir_d365e15d984c8d0205117ee0c40d6716 + + +input + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab + + +ui + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab->dir_919653a6098570dc99a63e645d1b29db + + + + + + +1 + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab->dir_b81b067251166617f9d0a8c0cfc3a4a9 + + + + + + +3 + + + + + +dir_da5c6b39c0a2f54e57df6799511cd3ab->dir_d365e15d984c8d0205117ee0c40d6716 + + + + + + +1 + + + + + diff --git a/doc.svg b/doc.svg new file mode 100644 index 0000000..0b928a5 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 0000000..ac18b27 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/doxygen-awesome-sidebar-only.css b/doxygen-awesome-sidebar-only.css new file mode 100644 index 0000000..8045497 --- /dev/null +++ b/doxygen-awesome-sidebar-only.css @@ -0,0 +1,107 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +:root { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enought to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 340px; + --menu-display: none; + + --top-height: 120px; +} + + +@media screen and (min-width: 768px) { + :root { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/doxygen-awesome.css b/doxygen-awesome.css new file mode 100644 index 0000000..a3190e3 --- /dev/null +++ b/doxygen-awesome.css @@ -0,0 +1,1465 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #00559f; + --primary-light-color: #7aabd6; + --primary-lighter-color: #cae1f1; + --primary-lightest-color: #e9f1f8; + + /* page base colors */ + --page-background-color: white; + --page-foreground-color: #2c3e50; + --page-secondary-foreground-color: #67727e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most compontest reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, Searchresult, ... */ + --box-shadow: 0 2px 10px 0 rgba(0,0,0,.1); + + --odd-color: rgba(0,0,0,.03); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --code-font-size: 14.4px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 900px; + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #fca49b; + --warning-color-dark: #b61825; + --warning-color-darker: #75070f; + --note-color: rgba(255,229,100,.3); + --note-color-dark: #c39900; + --note-color-darker: #8d7400; + --deprecated-color: rgb(214, 216, 224); + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: rgb(246, 208, 178); + --bug-color-dark: #a53a00; + --bug-color-darker: #5b1d00; + --invariant-color: #b7f8d0; + --invariant-color-dark: #00ba44; + --invariant-color-darker: #008622; + + /* blockquote colors */ + --blockquote-background: #f5f5f5; + --blockquote-foreground: #727272; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #282c34; + --fragment-foreground: #ffffff; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + /* height of an item in any tree / collapsable table */ + --tree-item-height: 30px; + + --darkmode-toggle-button-icon: '☀️' +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + --primary-color: #1982d2; + --primary-dark-color: #5ca8e2; + --primary-light-color: #4779ac; + --primary-lighter-color: #191e21; + --primary-lightest-color: #191a1c; + + --box-shadow: 0 2px 10px 0 rgba(0,0,0,.35); + + --odd-color: rgba(0,0,0,.1); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #000000; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #1f2022; + --blockquote-foreground: #77848a; + + --warning-color: #b61825; + --warning-color-dark: #510a02; + --warning-color-darker: #f5b1aa; + --note-color: rgb(255, 183, 0); + --note-color-dark: #9f7300; + --note-color-darker: #fff6df; + --deprecated-color: rgb(88, 90, 96); + --deprecated-color-dark: #262e37; + --deprecated-color-darker: #a0a5b0; + --bug-color: rgb(248, 113, 0); + --bug-color-dark: #812a00; + --bug-color-darker: #ffd3be; + + --darkmode-toggle-button-icon: '🌛'; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + --primary-color: #1982d2; + --primary-dark-color: #5ca8e2; + --primary-light-color: #4779ac; + --primary-lighter-color: #191e21; + --primary-lightest-color: #191a1c; + + --box-shadow: 0 2px 10px 0 rgba(0,0,0,.35); + + --odd-color: rgba(0,0,0,.1); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #000000; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #1f2022; + --blockquote-foreground: #77848a; + + --warning-color: #b61825; + --warning-color-dark: #510a02; + --warning-color-darker: #f5b1aa; + --note-color: rgb(255, 183, 0); + --note-color-dark: #9f7300; + --note-color-darker: #fff6df; + --deprecated-color: rgb(88, 90, 96); + --deprecated-color-dark: #262e37; + --deprecated-color-darker: #a0a5b0; + --bug-color: rgb(248, 113, 0); + --bug-color-dark: #812a00; + --bug-color-darker: #ffd3be; + + --darkmode-toggle-button-icon: '🌛'; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, .sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, .SelectItem, #MSearchField, .navpath li.navelem a, .navpath li.navelem a:hover { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: .9em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl { + font-size: var(--page-font-size); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-height); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +.left #MSearchSelect { + left: 0; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +.left #MSearchSelect { + padding-left: 8px; +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + height: auto !important; + padding-bottom: calc(2 * var(--spacing-large)); + } +} + +#nav-tree { + background: transparent; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-sync { + top: 12px !important; + right: 12px; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + box-shadow: inset 4px 0 0 0 var(--primary-color); +} + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + background: var(--separator-color); + width: 1px; +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 210%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +.mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background: var(--code-background); +} + +.mdescRight { + color: var(--page-secondary-foreground-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents div.dyncontent iframe { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents div.dyncontent iframe { + filter: hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color); +} + +blockquote { + padding: var(--spacing-small) var(--spacing-medium); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 2px solid var(--blockquote-foreground); + margin: 0; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.glow { + text-shadow: 0 0 15px var(--primary-light-color) !important; +} + +.alphachar a { + color: var(--page-foreground-color); +} + +/* + Table of Contents + */ + +div.toc { + background-color: var(--side-nav-background); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + padding: 0 var(--spacing-large); + margin: 0 0 var(--spacing-medium) var(--spacing-medium); +} + +div.toc h3 { + color: var(--side-nav-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0; +} + +div.toc li { + font-size: var(--navigation-font-size); + padding: 0; + background: none; +} + +div.toc li:before { + content: '↓'; + font-weight: 800; + font-family: var(--font-family); + margin-right: var(--spacing-small); + color: var(--side-nav-foreground); + opacity: .4; +} + +div.toc ul li.level1 { + margin: 0; +} + +div.toc ul li.level2, div.toc ul li.level3 { + margin-top: 0; +} + + +@media screen and (max-width: 767px) { + div.toc { + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: none; + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; + word-break: break-word; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: 14px 16px; + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + .contents > div.fragment, .textblock > div.fragment, .textblock > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + } + + .textblock li > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .memdoc > div.fragment, .memdoc > pre.fragment, dl dd > div.fragment, dl dd pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt { + color: var(--note-color-dark); +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); +} + +div.memproto, h2.memtitle { + background: var(--code-background); + text-shadow: none; +} + +h2.memtitle { + font-weight: 500; + font-family: monospace, fixed; + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +a:target + h2.memtitle { + box-shadow: -3px -3px 3px 0 var(--primary-lightest-color), 3px -3px 3px 0 var(--primary-lightest-color); +} + +a:target + h2.memtitle + div.memitem { + box-shadow: 0 0 10px 0 var(--primary-lighter-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: monospace, fixed; + color: var(--page-foreground-color); +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +table.markdownTable, table.fieldtable { + width: 100%; + border: 1px solid var(--separator-color); + margin: var(--spacing-medium) 0; +} + +table.fieldtable { + box-shadow: none; + border-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +table.markdownTable td, table.markdownTable th, table.fieldtable dt { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); + border-bottom: 1px solid var(--separator-color); +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--separator-color); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: 0 0 15px var(--primary-lighter-color); +} + +table.memberdecls { + display: block; + overflow-x: auto; + overflow-y: hidden; +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + border-top:1px solid var(--separator-color); +} + +.contents hr { + box-shadow: var(--content-maxwidth) 0 0 0 var(--separator-color), calc(0px - var(--content-maxwidth)) 0 0 0 var(--separator-color); +} + +.contents img { + max-width: 100%; +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; +} + +.directory td.entry { + padding: var(--spacing-small); + display: flex; + align-items: center; +} + +.directory tr.even { + background-color: var(--odd-color); +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + width: 18px; + height: 18px; + line-height: 18px; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-medium)); + margin-right: calc(0px - var(--spacing-medium)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +@media screen and (max-width: 767px) { + .classindex { + margin: 0 calc(0px - var(--spacing-small)); + } +} + +/* + Footer and nav-path + */ + +#nav-path { + margin-bottom: -1px; + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + font-size: 23px; + border-radius: var(--border-radius-medium); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); +} + +doxygen-awesome-dark-mode-toggle:hover { + background: var(--separator-color); +} + +doxygen-awesome-dark-mode-toggle:after { + content: var(--darkmode-toggle-button-icon) +} diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..b3e91d3 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,2229 @@ +/* The standard CSS for doxygen 1.12.0*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--fragment-copy-ok-color: #2EC82E; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #f8d1cc; +--warning-color-hl: #b61825; +--warning-color-text: #75070f; +--note-color-bg: #faf3d8; +--note-color-hl: #f3a600; +--note-color-text: #5f4204; +--todo-color-bg: #e4f3ff; +--todo-color-hl: #1879C4; +--todo-color-text: #274a5c; +--test-color-bg: #e8e8ff; +--test-color-hl: #3939C4; +--test-color-text: #1a1a5c; +--deprecated-color-bg: #ecf0f3; +--deprecated-color-hl: #5b6269; +--deprecated-color-text: #43454a; +--bug-color-bg: #e4dafd; +--bug-color-hl: #5b2bdd; +--bug-color-text: #2a0d72; +--invariant-color-bg: #d8f1e3; +--invariant-color-hl: #44b86f; +--invariant-color-text: #265532; +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: #090D16; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--fragment-copy-ok-color: #0EA80E; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +/** special sections */ +--warning-color-bg: #2e1917; +--warning-color-hl: #ad2617; +--warning-color-text: #f5b1aa; +--note-color-bg: #3b2e04; +--note-color-hl: #f1b602; +--note-color-text: #ceb670; +--todo-color-bg: #163750; +--todo-color-hl: #1982D2; +--todo-color-text: #dcf0fa; +--test-color-bg: #121258; +--test-color-hl: #4242cf; +--test-color-text: #c0c0da; +--deprecated-color-bg: #2e323b; +--deprecated-color-hl: #738396; +--deprecated-color-text: #abb0bd; +--bug-color-bg: #2a2536; +--bug-color-hl: #7661b3; +--bug-color-text: #ae9ed6; +--invariant-color-bg: #303a35; +--invariant-color-hl: #76ce96; +--invariant-color-text: #cceed5; +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-family: var(--font-family-normal); + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--glow-color); +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: var(--nav-gradient-active-image); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: var(--index-header-color); +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + +.classindex dl.odd { + background-color: var(--index-odd-item-bg-color); +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: var(--page-link-color); + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: var(--page-visited-link-color); +} + +a:hover { + text-decoration: none; + background: linear-gradient(to bottom, transparent 0,transparent calc(100% - 1px), currentColor 100%); +} + +a:hover > span.arrow { + text-decoration: none; + background : var(--nav-background-color); +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: var(--code-link-color); +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul.check { + list-style:none; + text-indent: -16px; + padding-left: 38px; +} +li.unchecked:before { + content: "\2610\A0"; +} +li.checked:before { + content: "\2611\A0"; +} + +ol { + text-indent: 0px; +} + +ul { + text-indent: 0px; + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; + overflow-y: hidden; + position: relative; + min-height: 12px; + margin: 10px 0px; + padding: 10px 10px; + border: 1px solid var(--fragment-border-color); + border-radius: 4px; + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); +} + +pre.fragment { + word-wrap: break-word; + font-size: 10pt; + line-height: 125%; + font-family: var(--font-family-monospace); +} + +.clipboard { + width: 24px; + height: 24px; + right: 5px; + top: 5px; + opacity: 0; + position: absolute; + display: inline; + overflow: auto; + fill: var(--fragment-foreground-color); + justify-content: center; + align-items: center; + cursor: pointer; +} + +.clipboard.success { + border: 1px solid var(--fragment-foreground-color); + border-radius: 4px; +} + +.fragment:hover .clipboard, .clipboard.success { + opacity: .28; +} + +.clipboard:hover, .clipboard.success { + opacity: 1 !important; +} + +.clipboard:active:not([class~=success]) svg { + transform: scale(.91); +} + +.clipboard.success svg { + fill: var(--fragment-copy-ok-color); +} + +.clipboard.success { + border-color: var(--fragment-copy-ok-color); +} + +div.line { + font-family: var(--font-family-monospace); + font-size: 13px; + min-height: 13px; + line-height: 1.2; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); +} + +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); +} + +span.lineno a:hover { + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: var(--page-foreground-color); + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: var(--code-keyword-color); +} + +span.keywordtype { + color: var(--code-type-keyword-color); +} + +span.keywordflow { + color: var(--code-flow-keyword-color); +} + +span.comment { + color: var(--code-comment-color); +} + +span.preprocessor { + color: var(--code-preprocessor-color); +} + +span.stringliteral { + color: var(--code-string-literal-color); +} + +span.charliteral { + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); +} + +span.vhdldigit { + color: var(--code-vhdl-digit-color); +} + +span.vhdlchar { + color: var(--code-vhdl-char-color); +} + +span.vhdlkeyword { + color: var(--code-vhdl-keyword-color); +} + +span.vhdllogic { + color: var(--code-vhdl-logic-color); +} + +blockquote { + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid var(--table-cell-border-color); +} + +th.dirtab { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid var(--separator-color); +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: var(--memdecl-background-color); + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: var(--memdecl-foreground-color); +} + +.memSeparator { + border-bottom: 1px solid var(--memdecl-separator-color); + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: var(--memdecl-template-color); + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: var(--memdef-title-gradient-image); + background-repeat: repeat-x; + background-color: var(--memdef-title-background-color); + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: var(--memdef-template-color); + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px var(--glow-color); +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 0px 6px 0px; + color: var(--memdef-proto-text-color); + font-weight: bold; + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: var(--font-family-monospace); + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: var(--memdef-doc-background-color); + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; +} + +.paramname { + white-space: nowrap; + padding: 0px; + padding-bottom: 1px; + margin-left: 2px; +} + +.paramname em { + color: var(--memdef-param-name-color); + font-style: normal; + margin-right: 1px; +} + +.paramname .paramdefval { + font-family: var(--font-family-monospace); +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: var(--font-family-monospace); + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); + text-shadow: none; + color: var(--label-foreground-color); + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + +.directory tr.even { + padding-left: 6px; + background-color: var(--index-even-item-bg-color); +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: var(--page-link-color); +} + +.arrow { + color: var(--nav-arrow-color); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: var(--font-family-icon); + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-open-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-folder-closed-image); + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:var(--icon-doc-image); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: var(--footer-foreground-color); +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid var(--memdef-border-color); + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fieldinit { + white-space: nowrap; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fieldinit { + padding-top: 3px; + text-align: right; +} + + +.fieldtable td.fielddoc { + border-bottom: 1px solid var(--memdef-border-color); +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: var(--memdef-title-gradient-image); + background-repeat:repeat-x; + background-color: var(--memdef-title-background-color); + font-size: 90%; + color: var(--memdef-proto-text-color); + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid var(--memdef-border-color); +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: var(--nav-gradient-image); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: var(--nav-gradient-image); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:var(--nav-breadcrumb-image); + background-repeat:no-repeat; + background-position:right; + color: var(--nav-foreground-color); +} + +.navpath li.navelem a +{ + height:32px; + display:block; + outline: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: var(--footer-foreground-color); + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: var(--header-gradient-image); + background-repeat:repeat-x; + background-color: var(--header-background-color); + margin: 0px; + border-bottom: 1px solid var(--header-separator-color); +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* + +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention, dl.important { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +*/ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a, dl.test a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.important, dl.note, dl.deprecated, dl.bug, +dl.invariant, dl.pre, dl.post, dl.todo, dl.test, dl.remark { + padding: 10px; + margin: 10px 0px; + overflow: hidden; + margin-left: 0; + border-radius: 4px; +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention, dl.important { + background: var(--warning-color-bg); + border-left: 8px solid var(--warning-color-hl); + color: var(--warning-color-text); +} + +dl.warning dt, dl.attention dt, dl.important dt { + color: var(--warning-color-hl); +} + +dl.note, dl.remark { + background: var(--note-color-bg); + border-left: 8px solid var(--note-color-hl); + color: var(--note-color-text); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-hl); +} + +dl.todo { + background: var(--todo-color-bg); + border-left: 8px solid var(--todo-color-hl); + color: var(--todo-color-text); +} + +dl.todo dt { + color: var(--todo-color-hl); +} + +dl.test { + background: var(--test-color-bg); + border-left: 8px solid var(--test-color-hl); + color: var(--test-color-text); +} + +dl.test dt { + color: var(--test-color-hl); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.bug { + background: var(--bug-color-bg); + border-left: 8px solid var(--bug-color-hl); + color: var(--bug-color-text); +} + +dl.bug dt a { + color: var(--bug-color-hl) !important; +} + +dl.deprecated { + background: var(--deprecated-color-bg); + border-left: 8px solid var(--deprecated-color-hl); + color: var(--deprecated-color-text); +} + +dl.deprecated dt a { + color: var(--deprecated-color-hl) !important; +} + +dl.note dd, dl.warning dd, dl.pre dd, dl.post dd, +dl.remark dd, dl.attention dd, dl.important dd, dl.invariant dd, +dl.bug dd, dl.deprecated dd, dl.todo dd, dl.test dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color-bg); + border-left: 8px solid var(--invariant-color-hl); + color: var(--invariant-color-text); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-hl); +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: var(--font-family-title); + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% var(--font-family-title); + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:var(--citation-label-color); + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li[class^='level'] { + margin-left: 15px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.empty { + background-image: none; + margin-top: 0px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: var(--inherit-header-color); + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); + border-radius: 4px 4px 4px 4px; + box-shadow: var(--tooltip-shadow); + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: var(--tooltip-doc-color); + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: var(--tooltip-link-color); +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: var(--tooltip-declaration-color); +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: var(--tooltip-background-color); + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: var(--tooltip-border-color); + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: var(--tooltip-border-color); + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: var(--tooltip-border-color); + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid var(--table-cell-border-color); + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + +details>summary { + list-style-type: none; +} + +details > summary::-webkit-details-marker { + display: none; +} + +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; +} + +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + diff --git a/doxygen.svg b/doxygen.svg new file mode 100644 index 0000000..79a7635 --- /dev/null +++ b/doxygen.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doxygen_crawl.html b/doxygen_crawl.html new file mode 100644 index 0000000..eb6e9ae --- /dev/null +++ b/doxygen_crawl.html @@ -0,0 +1,738 @@ + + + +Validator / crawler helper + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..8985f42 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,205 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function toggleVisibility(linkObj) { + return dynsection.toggleVisibility(linkObj); +} + +let dynsection = { + + // helper function + updateStripes : function() { + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); + }, + + toggleVisibility : function(linkObj) { + const base = $(linkObj).attr('id'); + const summary = $('#'+base+'-summary'); + const content = $('#'+base+'-content'); + const trigger = $('#'+base+'-trigger'); + const src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; + }, + + toggleLevel : function(level) { + $('table.directory tr').each(function() { + const l = this.id.split('_').length-1; + const i = $('#img'+this.id.substring(3)); + const a = $('#arr'+this.id.substring(3)); + if (l'); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + const id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + const start = $(this).attr('data-start'); + const end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + const line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',codefold.plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); + }, +}; +/* @license-end */ +$(function() { + $('.code,.codeRef').each(function() { + $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; + $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); + }); +}); diff --git a/files.html b/files.html new file mode 100644 index 0000000..4e826f2 --- /dev/null +++ b/files.html @@ -0,0 +1,171 @@ + + + + + + + +Humidistat: File List + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+
+
Here is a list of all files with brief descriptions:
+
+
+ + + + diff --git a/files_dup.js b/files_dup.js new file mode 100644 index 0000000..c3b39c4 --- /dev/null +++ b/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] +]; \ No newline at end of file diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 0000000..b04bed2 --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 0000000..52f0166 --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 0000000..f6896dd --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 0000000..2d1f06e --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..df6a122 --- /dev/null +++ b/functions.html @@ -0,0 +1,123 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+
+ + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 0000000..14cebc9 --- /dev/null +++ b/functions_b.html @@ -0,0 +1,122 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 0000000..1ff2e9b --- /dev/null +++ b/functions_c.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 0000000..dee46c6 --- /dev/null +++ b/functions_d.html @@ -0,0 +1,129 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+
+ + + + diff --git a/functions_dup.js b/functions_dup.js new file mode 100644 index 0000000..e2687f6 --- /dev/null +++ b/functions_dup.js @@ -0,0 +1,22 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "h", "functions_h.html", null ], + [ "i", "functions_i.html", null ], + [ "k", "functions_k.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "p", "functions_p.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "u", "functions_u.html", null ], + [ "v", "functions_v.html", null ] +]; \ No newline at end of file diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 0000000..167bb82 --- /dev/null +++ b/functions_e.html @@ -0,0 +1,117 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+
+ + + + diff --git a/functions_enum.html b/functions_enum.html new file mode 100644 index 0000000..9f1c71f --- /dev/null +++ b/functions_enum.html @@ -0,0 +1,117 @@ + + + + + + + +Humidistat: Class Members - Enumerations + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the classes they belong to:
+
+
+ + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 0000000..0c8102e --- /dev/null +++ b/functions_f.html @@ -0,0 +1,126 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..7773524 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,251 @@ + + + + + + + +Humidistat: Class Members - Functions + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the classes they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 0000000..624a026 --- /dev/null +++ b/functions_g.html @@ -0,0 +1,126 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 0000000..cafefd6 --- /dev/null +++ b/functions_h.html @@ -0,0 +1,129 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 0000000..26ee8c2 --- /dev/null +++ b/functions_i.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+
+ + + + diff --git a/functions_k.html b/functions_k.html new file mode 100644 index 0000000..c9066ce --- /dev/null +++ b/functions_k.html @@ -0,0 +1,119 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- k -

+
+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 0000000..bdcfa41 --- /dev/null +++ b/functions_l.html @@ -0,0 +1,128 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 0000000..c064939 --- /dev/null +++ b/functions_m.html @@ -0,0 +1,116 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 0000000..e2ea811 --- /dev/null +++ b/functions_n.html @@ -0,0 +1,116 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 0000000..ca5468c --- /dev/null +++ b/functions_p.html @@ -0,0 +1,127 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 0000000..f8a1f60 --- /dev/null +++ b/functions_r.html @@ -0,0 +1,126 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+
+ + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 0000000..2ca2196 --- /dev/null +++ b/functions_s.html @@ -0,0 +1,135 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 0000000..0b56e72 --- /dev/null +++ b/functions_t.html @@ -0,0 +1,124 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+
+ + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 0000000..de7a74a --- /dev/null +++ b/functions_u.html @@ -0,0 +1,120 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 0000000..415ebe3 --- /dev/null +++ b/functions_v.html @@ -0,0 +1,120 @@ + + + + + + + +Humidistat: Class Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..4418d4c --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,285 @@ + + + + + + + +Humidistat: Class Members - Variables + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the classes they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- h -

+ + +

- i -

+ + +

- k -

+ + +

- l -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+
+ + + + diff --git a/globals.html b/globals.html new file mode 100644 index 0000000..0bad67a --- /dev/null +++ b/globals.html @@ -0,0 +1,132 @@ + + + + + + + +Humidistat: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+
+
+ + + + diff --git a/globals_defs.html b/globals_defs.html new file mode 100644 index 0000000..e42e811 --- /dev/null +++ b/globals_defs.html @@ -0,0 +1,118 @@ + + + + + + + +Humidistat: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all macros with links to the files they belong to:
+
+
+ + + + diff --git a/globals_enum.html b/globals_enum.html new file mode 100644 index 0000000..487ab75 --- /dev/null +++ b/globals_enum.html @@ -0,0 +1,114 @@ + + + + + + + +Humidistat: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all enums with links to the files they belong to:
+
+
+ + + + diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 0000000..700aa6e --- /dev/null +++ b/globals_func.html @@ -0,0 +1,120 @@ + + + + + + + +Humidistat: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all functions with links to the files they belong to:
+
+
+ + + + diff --git a/globals_vars.html b/globals_vars.html new file mode 100644 index 0000000..4b81e9d --- /dev/null +++ b/globals_vars.html @@ -0,0 +1,119 @@ + + + + + + + +Humidistat: File Members + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all variables with links to the files they belong to:
+
+
+ + + + diff --git a/graph_legend.html b/graph_legend.html new file mode 100644 index 0000000..2e8b894 --- /dev/null +++ b/graph_legend.html @@ -0,0 +1,174 @@ + + + + + + + +Humidistat: Graph Legend + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Graph Legend
+
+
+

This page explains how to interpret the graphs that are generated by doxygen.

+

Consider the following example:

/*! Invisible class because of truncation */
+
class Invisible { };
+
+
/*! Truncated class, inheritance relation is hidden */
+
class Truncated : public Invisible { };
+
+
/* Class not documented with doxygen comments */
+
class Undocumented { };
+
+
/*! Class that is inherited using public inheritance */
+
class PublicBase : public Truncated { };
+
+
/*! A template class */
+
template<class T> class Templ { };
+
+
/*! Class that is inherited using protected inheritance */
+
class ProtectedBase { };
+
+
/*! Class that is inherited using private inheritance */
+
class PrivateBase { };
+
+
/*! Class that is used by the Inherited class */
+
class Used { };
+
+
/*! Super class that inherits a number of other classes */
+
class Inherited : public PublicBase,
+
protected ProtectedBase,
+
private PrivateBase,
+
public Undocumented,
+
public Templ<int>
+
{
+
private:
+
Used *m_usedClass;
+
};
+

This will result in the following graph:

+

The boxes in the above graph have the following meaning:

+ +

The arrows have the following meaning:

+ +
+
+ + + + diff --git a/graph_legend.md5 b/graph_legend.md5 new file mode 100644 index 0000000..da515da --- /dev/null +++ b/graph_legend.md5 @@ -0,0 +1 @@ +f74606a252eb303675caf37987d0b7af \ No newline at end of file diff --git a/graph_legend.svg b/graph_legend.svg new file mode 100644 index 0000000..6c56580 --- /dev/null +++ b/graph_legend.svg @@ -0,0 +1,167 @@ + + + + + + +Graph Legend + + +Node9 + + +Inherited + + + + + +Node10 + + +PublicBase + + + + + +Node10->Node9 + + + + + + + + +Node11 + + +Truncated + + + + + +Node11->Node10 + + + + + + + + +Node13 + + +ProtectedBase + + + + + +Node13->Node9 + + + + + + + + +Node14 + + +PrivateBase + + + + + +Node14->Node9 + + + + + + + + +Node15 + + +Undocumented + + + + + +Node15->Node9 + + + + + + + + +Node16 + + +Templ< int > + + + + + +Node16->Node9 + + + + + + + + +Node17 + + +Templ< T > + + + + + +Node17->Node16 + + + + + +< int > + + + +Node18 + + +Used + + + + + +Node18->Node9 + + + + + +m_usedClass + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..cb1d894 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,144 @@ + + + + + + + +Humidistat: Class Hierarchy + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
+

Go to the graphical class hierarchy

+This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + +
 CButtonReaderRead button state from a voltage ladder-style keypad
 CConfigParA class for storing references to variables of various types (uint8_t, uint16_t, or double)
 CConfigStoreConfig store containing variables, which can be stored in EEPROM
 CControllerBase class for a controller. Owns a PID instance, and holds a reference to a ConfigStore instance
 CFlowControllerControls flow. Holds a reference to a FlowSensor instance
 CHumidistatBase class for a humidistat. Holds a reference to a HumiditySensor instance
 CCascadeHumidistatControl humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers, which drive a solenoid valve each. Adjust the public setpoint variable and call update()
 CSingleHumidistatControl humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and call update()
 CControllerUIUser interface (display and input) for humidistat. Hold references to ButtonReader for keypad input, and Humidistat for updating the humidity setpoint
 CCharDisplayUITUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display. Displays current mode, PV, SP, and CV the first line of the display, and temperatures on the second line. Use keypad to adjust setpoint (UP/DOWN for fine, LEFT/RIGHT for coarse)
 CGraphicalDisplayUI< Humidistat_t >TUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to display, an EEPROMConfig instance to edit the config, and to a Humidistat instance to show/edit its state
 CDHTHumiditySensorImplementation of the HumiditySensor interface for the DHT22/AM2302 sensor
 CEEPROMConfigLoad/save an (internal) ConfigStore in EEPROM
 CFlowSensorRead flow rate using a Omron D6F-P0010 MEMS flow sensor
 CKs0256VoltLadderImplementation of the VoltLadder interface for the Keyestudio Ks0256 keypad
 CKs0466VoltLadderImplementation of the VoltLadder interface for the Keyestudio Ks0466 keypad
 CPIDPID controller in parallel form implemented in floating-point arithmetic. Features Derivative-on-Measurement, anti-windup through conditional integration, bumpless transfer, and feed-forward
 CPointPoint: a vector of a time and setpoint value
 CSerialLogger< Humidistat_t >Logs humidistat data over serial
 CSetpointProfileRunner'Runs' a setpoint profile
 CSHTHumiditySensorImplementation of the HumiditySensor interface for the Sensirion SHT85 sensor
 CSPProfileSetpoint profile: a label and a span over Points
 CThermistorReaderDriver for thermistor thermometers
 CConfigPar::Var
+
+
+
+ + + + diff --git a/hierarchy.js b/hierarchy.js new file mode 100644 index 0000000..8c996b2 --- /dev/null +++ b/hierarchy.js @@ -0,0 +1,30 @@ +var hierarchy = +[ + [ "ButtonReader", "classButtonReader.html", null ], + [ "ConfigPar", "classConfigPar.html", null ], + [ "ConfigStore", "structConfigStore.html", null ], + [ "Controller", "classController.html", [ + [ "FlowController", "classFlowController.html", null ], + [ "Humidistat", "classHumidistat.html", [ + [ "CascadeHumidistat", "classCascadeHumidistat.html", null ], + [ "SingleHumidistat", "classSingleHumidistat.html", null ] + ] ] + ] ], + [ "ControllerUI", "classControllerUI.html", [ + [ "CharDisplayUI", "classCharDisplayUI.html", null ], + [ "GraphicalDisplayUI< Humidistat_t >", "classGraphicalDisplayUI.html", null ] + ] ], + [ "DHTHumiditySensor", "classDHTHumiditySensor.html", null ], + [ "EEPROMConfig", "classEEPROMConfig.html", null ], + [ "FlowSensor", "classFlowSensor.html", null ], + [ "Ks0256VoltLadder", "classKs0256VoltLadder.html", null ], + [ "Ks0466VoltLadder", "classKs0466VoltLadder.html", null ], + [ "PID", "classPID.html", null ], + [ "Point", "structPoint.html", null ], + [ "SerialLogger< Humidistat_t >", "classSerialLogger.html", null ], + [ "SetpointProfileRunner", "classSetpointProfileRunner.html", null ], + [ "SHTHumiditySensor", "classSHTHumiditySensor.html", null ], + [ "SPProfile", "structSPProfile.html", null ], + [ "ThermistorReader", "classThermistorReader.html", null ], + [ "ConfigPar::Var", "structConfigPar_1_1Var.html", null ] +]; \ No newline at end of file diff --git a/imath_8h.html b/imath_8h.html new file mode 100644 index 0000000..a1c16c7 --- /dev/null +++ b/imath_8h.html @@ -0,0 +1,241 @@ + + + + + + + +Humidistat: src/imath.h File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
imath.h File Reference
+
+
+
+This graph shows which files directly or indirectly include this file:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + + +

+Functions

template<typename T >
constexpr T ipow (T base, unsigned int pow)
 Constexpr function for computing integer power.
 
constexpr unsigned int ilog10 (int n)
 Constexpr integer base-10 logarithm.
 
+

Function Documentation

+ +

◆ ilog10()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int ilog10 (int n)
+
+constexpr
+
+ +

Constexpr integer base-10 logarithm.

+
Parameters
+ + +
n
+
+
+
Returns
10-log(n)
+ +

Definition at line 17 of file imath.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ ipow()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + +
T ipow (T base,
unsigned int pow )
+
+constexpr
+
+ +

Constexpr function for computing integer power.

+
Template Parameters
+ + +
TBase type
+
+
+
Parameters
+ + + +
baseBase
powExponent
+
+
+
Returns
base^pow
+ +

Definition at line 10 of file imath.h.

+
+Here is the call graph for this function:
+
+
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+
+
+ + + + diff --git a/imath_8h.js b/imath_8h.js new file mode 100644 index 0000000..42ebefd --- /dev/null +++ b/imath_8h.js @@ -0,0 +1,5 @@ +var imath_8h = +[ + [ "ilog10", "imath_8h.html#a1b826c7311037e4e89052d8f5d59afe6", null ], + [ "ipow", "imath_8h.html#aa86632c19b4d57acb96ac9e9cd3e13e1", null ] +]; \ No newline at end of file diff --git a/imath_8h__dep__incl.map b/imath_8h__dep__incl.map new file mode 100644 index 0000000..49932b7 --- /dev/null +++ b/imath_8h__dep__incl.map @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/imath_8h__dep__incl.md5 b/imath_8h__dep__incl.md5 new file mode 100644 index 0000000..f91a023 --- /dev/null +++ b/imath_8h__dep__incl.md5 @@ -0,0 +1 @@ +b16875a3b70204bde6f9cde2a64652fb \ No newline at end of file diff --git a/imath_8h__dep__incl.svg b/imath_8h__dep__incl.svg new file mode 100644 index 0000000..8ac08f0 --- /dev/null +++ b/imath_8h__dep__incl.svg @@ -0,0 +1,237 @@ + + + + + + +src/imath.h + + +Node1 + + +src/imath.h + + + + + +Node2 + + +src/control/SingleHumidistat.cpp + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +src/sensor/FlowSensor.cpp + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +src/sensor/FlowSensor.h + + + + + +Node1->Node4 + + + + + + + + +Node12 + + +src/ui/ConfigPar.cpp + + + + + +Node1->Node12 + + + + + + + + +Node4->Node3 + + + + + + + + +Node5 + + +src/control/CascadeHumidistat.h + + + + + +Node4->Node5 + + + + + + + + +Node10 + + +src/control/FlowController.h + + + + + +Node4->Node10 + + + + + + + + +Node6 + + +src/SerialLogger.h + + + + + +Node5->Node6 + + + + + + + + +Node8 + + +src/control/CascadeHumidistat.cpp + + + + + +Node5->Node8 + + + + + + + + +Node9 + + +src/ui/GraphicalDisplayUI.h + + + + + +Node5->Node9 + + + + + + + + +Node7 + + +src/main.cpp + + + + + +Node6->Node7 + + + + + + + + +Node10->Node5 + + + + + + + + +Node11 + + +src/control/FlowController.cpp + + + + + +Node10->Node11 + + + + + + + + diff --git a/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.map b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.map new file mode 100644 index 0000000..cdac75b --- /dev/null +++ b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.md5 b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.md5 new file mode 100644 index 0000000..b05f34b --- /dev/null +++ b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.md5 @@ -0,0 +1 @@ +d98bd67d32c052fb51ac204bcc698c0d \ No newline at end of file diff --git a/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.svg b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.svg new file mode 100644 index 0000000..4684a33 --- /dev/null +++ b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_cgraph.svg @@ -0,0 +1,30 @@ + + + + + + +ilog10 + + +Node1 + + +ilog10 + + + + + +Node1->Node1 + + + + + + + + diff --git a/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.map b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.map new file mode 100644 index 0000000..c6ffa57 --- /dev/null +++ b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.map @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.md5 b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.md5 new file mode 100644 index 0000000..94c2321 --- /dev/null +++ b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.md5 @@ -0,0 +1 @@ +6efce4630e3449545e0f6787b45c598a \ No newline at end of file diff --git a/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.svg b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.svg new file mode 100644 index 0000000..28c9565 --- /dev/null +++ b/imath_8h_a1b826c7311037e4e89052d8f5d59afe6_icgraph.svg @@ -0,0 +1,86 @@ + + + + + + +ilog10 + + +Node1 + + +ilog10 + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +ConfigPar::magnitude + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::drawConfig + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::draw + + + + + +Node3->Node4 + + + + + + + + diff --git a/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.map b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.map new file mode 100644 index 0000000..7e9c553 --- /dev/null +++ b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.map @@ -0,0 +1,4 @@ + + + + diff --git a/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.md5 b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.md5 new file mode 100644 index 0000000..5d877af --- /dev/null +++ b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.md5 @@ -0,0 +1 @@ +6f4def3ab9be2a1cea1a6e44163dbbaf \ No newline at end of file diff --git a/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.svg b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.svg new file mode 100644 index 0000000..0a4dbab --- /dev/null +++ b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_cgraph.svg @@ -0,0 +1,30 @@ + + + + + + +ipow + + +Node1 + + +ipow + + + + + +Node1->Node1 + + + + + + + + diff --git a/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.map b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.map new file mode 100644 index 0000000..afc75d0 --- /dev/null +++ b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.map @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.md5 b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.md5 new file mode 100644 index 0000000..a33a9f0 --- /dev/null +++ b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.md5 @@ -0,0 +1 @@ +c0284c9a2e0427702d7f539405353ed8 \ No newline at end of file diff --git a/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.svg b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.svg new file mode 100644 index 0000000..ef5efb1 --- /dev/null +++ b/imath_8h_aa86632c19b4d57acb96ac9e9cd3e13e1_icgraph.svg @@ -0,0 +1,177 @@ + + + + + + +ipow + + +Node1 + + +ipow + + + + + +Node1->Node1 + + + + + + + + +Node2 + + +ConfigPar::adjust + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +GraphicalDisplayUI +::handleInputConfig + + + + + +Node1->Node3 + + + + + + + + +Node5 + + +FlowSensor::readFlowrate + + + + + +Node1->Node5 + + + + + + + + +Node6 + + +FlowController::update + + + + + +Node1->Node6 + + + + + + + + +Node8 + + +SingleHumidistat::update + + + + + +Node1->Node8 + + + + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +GraphicalDisplayUI +::handleInput + + + + + +Node3->Node4 + + + + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +CascadeHumidistat:: +update + + + + + +Node6->Node7 + + + + + + + + diff --git a/imath_8h_source.html b/imath_8h_source.html new file mode 100644 index 0000000..c024165 --- /dev/null +++ b/imath_8h_source.html @@ -0,0 +1,138 @@ + + + + + + + +Humidistat: src/imath.h Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
imath.h
+
+
+Go to the documentation of this file.
1#ifndef HUMIDISTAT_IMATH_H
+
2#define HUMIDISTAT_IMATH_H
+
3
+
9template<typename T>
+
+
10constexpr T ipow(T base, unsigned int pow) {
+
11 return (pow >= sizeof(unsigned int) * 8) ? 0 : pow == 0 ? 1 : base * ipow(base, pow - 1);
+
12}
+
+
13
+
+
17constexpr unsigned int ilog10(int n) {
+
18 if (n <= 1) {
+
19 return 0;
+
20 } else {
+
21 return ilog10(n / 10) + 1;
+
22 }
+
23}
+
+
24
+
25#endif //HUMIDISTAT_IMATH_H
+
constexpr unsigned int ilog10(int n)
Constexpr integer base-10 logarithm.
Definition imath.h:17
+
constexpr T ipow(T base, unsigned int pow)
Constexpr function for computing integer power.
Definition imath.h:10
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..35f44ee --- /dev/null +++ b/index.html @@ -0,0 +1,115 @@ + + + + + + + +Humidistat: Main Page + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Humidistat Documentation
+
+
+ +
+
+ + + + diff --git a/inherit_graph_0.map b/inherit_graph_0.map new file mode 100644 index 0000000..88ffa1f --- /dev/null +++ b/inherit_graph_0.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_0.md5 b/inherit_graph_0.md5 new file mode 100644 index 0000000..775916a --- /dev/null +++ b/inherit_graph_0.md5 @@ -0,0 +1 @@ +a3a4b973dea60fee13d988fd8ede632e \ No newline at end of file diff --git a/inherit_graph_0.svg b/inherit_graph_0.svg new file mode 100644 index 0000000..13325b6 --- /dev/null +++ b/inherit_graph_0.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +ButtonReader + + + + + diff --git a/inherit_graph_1.map b/inherit_graph_1.map new file mode 100644 index 0000000..1a864b5 --- /dev/null +++ b/inherit_graph_1.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_1.md5 b/inherit_graph_1.md5 new file mode 100644 index 0000000..cdb2a35 --- /dev/null +++ b/inherit_graph_1.md5 @@ -0,0 +1 @@ +d333782ef4d30fe881c56a25206f665c \ No newline at end of file diff --git a/inherit_graph_1.svg b/inherit_graph_1.svg new file mode 100644 index 0000000..502be6f --- /dev/null +++ b/inherit_graph_1.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +ConfigPar + + + + + diff --git a/inherit_graph_10.map b/inherit_graph_10.map new file mode 100644 index 0000000..a7ba351 --- /dev/null +++ b/inherit_graph_10.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_10.md5 b/inherit_graph_10.md5 new file mode 100644 index 0000000..1ff7b66 --- /dev/null +++ b/inherit_graph_10.md5 @@ -0,0 +1 @@ +de7fdbb9c1c5db818c6ca8c80a50bd64 \ No newline at end of file diff --git a/inherit_graph_10.svg b/inherit_graph_10.svg new file mode 100644 index 0000000..0207310 --- /dev/null +++ b/inherit_graph_10.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +Ks0466VoltLadder + + + + + diff --git a/inherit_graph_11.map b/inherit_graph_11.map new file mode 100644 index 0000000..d7988fc --- /dev/null +++ b/inherit_graph_11.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_11.md5 b/inherit_graph_11.md5 new file mode 100644 index 0000000..70d0bf4 --- /dev/null +++ b/inherit_graph_11.md5 @@ -0,0 +1 @@ +f798d304a79b1edd3b58af3fd2cc05c9 \ No newline at end of file diff --git a/inherit_graph_11.svg b/inherit_graph_11.svg new file mode 100644 index 0000000..f139514 --- /dev/null +++ b/inherit_graph_11.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +PID + + + + + diff --git a/inherit_graph_12.map b/inherit_graph_12.map new file mode 100644 index 0000000..4ddca0d --- /dev/null +++ b/inherit_graph_12.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_12.md5 b/inherit_graph_12.md5 new file mode 100644 index 0000000..16f8371 --- /dev/null +++ b/inherit_graph_12.md5 @@ -0,0 +1 @@ +496bb5ccbe8642d447c9f5cb56ef1e43 \ No newline at end of file diff --git a/inherit_graph_12.svg b/inherit_graph_12.svg new file mode 100644 index 0000000..2d052c4 --- /dev/null +++ b/inherit_graph_12.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +Point + + + + + diff --git a/inherit_graph_13.map b/inherit_graph_13.map new file mode 100644 index 0000000..0e30ce8 --- /dev/null +++ b/inherit_graph_13.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_13.md5 b/inherit_graph_13.md5 new file mode 100644 index 0000000..6e2b469 --- /dev/null +++ b/inherit_graph_13.md5 @@ -0,0 +1 @@ +c5bbeca8a4b59ca8a2ab47dc54a8fdfe \ No newline at end of file diff --git a/inherit_graph_13.svg b/inherit_graph_13.svg new file mode 100644 index 0000000..354946e --- /dev/null +++ b/inherit_graph_13.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +SerialLogger< Humidistat_t > + + + + + diff --git a/inherit_graph_14.map b/inherit_graph_14.map new file mode 100644 index 0000000..f7eff4e --- /dev/null +++ b/inherit_graph_14.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_14.md5 b/inherit_graph_14.md5 new file mode 100644 index 0000000..4c7151e --- /dev/null +++ b/inherit_graph_14.md5 @@ -0,0 +1 @@ +78042b768ba85b6cb93f71949a645fb1 \ No newline at end of file diff --git a/inherit_graph_14.svg b/inherit_graph_14.svg new file mode 100644 index 0000000..6065db8 --- /dev/null +++ b/inherit_graph_14.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +SetpointProfileRunner + + + + + diff --git a/inherit_graph_15.map b/inherit_graph_15.map new file mode 100644 index 0000000..bdd0223 --- /dev/null +++ b/inherit_graph_15.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_15.md5 b/inherit_graph_15.md5 new file mode 100644 index 0000000..f09b09d --- /dev/null +++ b/inherit_graph_15.md5 @@ -0,0 +1 @@ +1bd6db1cfec0d2ceb30fa3cb2d8a71bb \ No newline at end of file diff --git a/inherit_graph_15.svg b/inherit_graph_15.svg new file mode 100644 index 0000000..42af8fa --- /dev/null +++ b/inherit_graph_15.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +SHTHumiditySensor + + + + + diff --git a/inherit_graph_16.map b/inherit_graph_16.map new file mode 100644 index 0000000..61b9e7f --- /dev/null +++ b/inherit_graph_16.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_16.md5 b/inherit_graph_16.md5 new file mode 100644 index 0000000..0061292 --- /dev/null +++ b/inherit_graph_16.md5 @@ -0,0 +1 @@ +852d7dd5b5b6a4d85271c95ef0375fa5 \ No newline at end of file diff --git a/inherit_graph_16.svg b/inherit_graph_16.svg new file mode 100644 index 0000000..6daf0eb --- /dev/null +++ b/inherit_graph_16.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +SPProfile + + + + + diff --git a/inherit_graph_17.map b/inherit_graph_17.map new file mode 100644 index 0000000..b5a93b0 --- /dev/null +++ b/inherit_graph_17.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_17.md5 b/inherit_graph_17.md5 new file mode 100644 index 0000000..b74f63d --- /dev/null +++ b/inherit_graph_17.md5 @@ -0,0 +1 @@ +8ab03028603ca8670898802a77942f6b \ No newline at end of file diff --git a/inherit_graph_17.svg b/inherit_graph_17.svg new file mode 100644 index 0000000..39ec1be --- /dev/null +++ b/inherit_graph_17.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +ThermistorReader + + + + + diff --git a/inherit_graph_2.map b/inherit_graph_2.map new file mode 100644 index 0000000..c0bd65d --- /dev/null +++ b/inherit_graph_2.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_2.md5 b/inherit_graph_2.md5 new file mode 100644 index 0000000..aefafd2 --- /dev/null +++ b/inherit_graph_2.md5 @@ -0,0 +1 @@ +21937f630a777cae7828eb3a6273079b \ No newline at end of file diff --git a/inherit_graph_2.svg b/inherit_graph_2.svg new file mode 100644 index 0000000..c1032bf --- /dev/null +++ b/inherit_graph_2.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +ConfigPar::Var + + + + + diff --git a/inherit_graph_3.map b/inherit_graph_3.map new file mode 100644 index 0000000..a732652 --- /dev/null +++ b/inherit_graph_3.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_3.md5 b/inherit_graph_3.md5 new file mode 100644 index 0000000..627fc6c --- /dev/null +++ b/inherit_graph_3.md5 @@ -0,0 +1 @@ +caa85a1579b4ef36503514d1e85f93e2 \ No newline at end of file diff --git a/inherit_graph_3.svg b/inherit_graph_3.svg new file mode 100644 index 0000000..abd9604 --- /dev/null +++ b/inherit_graph_3.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +ConfigStore + + + + + diff --git a/inherit_graph_4.map b/inherit_graph_4.map new file mode 100644 index 0000000..b94b228 --- /dev/null +++ b/inherit_graph_4.map @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/inherit_graph_4.md5 b/inherit_graph_4.md5 new file mode 100644 index 0000000..9c393cf --- /dev/null +++ b/inherit_graph_4.md5 @@ -0,0 +1 @@ +cf011e8b5bd5fab861bcbed470424b96 \ No newline at end of file diff --git a/inherit_graph_4.svg b/inherit_graph_4.svg new file mode 100644 index 0000000..c1253d5 --- /dev/null +++ b/inherit_graph_4.svg @@ -0,0 +1,93 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +Controller + + + + + +Node1 + + +FlowController + + + + + +Node0->Node1 + + + + + + + + +Node2 + + +Humidistat + + + + + +Node0->Node2 + + + + + + + + +Node3 + + +CascadeHumidistat + + + + + +Node2->Node3 + + + + + + + + +Node4 + + +SingleHumidistat + + + + + +Node2->Node4 + + + + + + + + diff --git a/inherit_graph_5.map b/inherit_graph_5.map new file mode 100644 index 0000000..f366794 --- /dev/null +++ b/inherit_graph_5.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/inherit_graph_5.md5 b/inherit_graph_5.md5 new file mode 100644 index 0000000..4ed8d25 --- /dev/null +++ b/inherit_graph_5.md5 @@ -0,0 +1 @@ +91322620ba81a59e555e790e6ba63c79 \ No newline at end of file diff --git a/inherit_graph_5.svg b/inherit_graph_5.svg new file mode 100644 index 0000000..0bc2f42 --- /dev/null +++ b/inherit_graph_5.svg @@ -0,0 +1,58 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +ControllerUI + + + + + +Node1 + + +CharDisplayUI + + + + + +Node0->Node1 + + + + + + + + +Node2 + + +GraphicalDisplayUI +< Humidistat_t > + + + + + +Node0->Node2 + + + + + + + + diff --git a/inherit_graph_6.map b/inherit_graph_6.map new file mode 100644 index 0000000..3ced3e7 --- /dev/null +++ b/inherit_graph_6.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_6.md5 b/inherit_graph_6.md5 new file mode 100644 index 0000000..d62f583 --- /dev/null +++ b/inherit_graph_6.md5 @@ -0,0 +1 @@ +246e7007232a0a8c2fc549812c91aaa2 \ No newline at end of file diff --git a/inherit_graph_6.svg b/inherit_graph_6.svg new file mode 100644 index 0000000..5e6b0d3 --- /dev/null +++ b/inherit_graph_6.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +DHTHumiditySensor + + + + + diff --git a/inherit_graph_7.map b/inherit_graph_7.map new file mode 100644 index 0000000..327cff1 --- /dev/null +++ b/inherit_graph_7.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_7.md5 b/inherit_graph_7.md5 new file mode 100644 index 0000000..8db960d --- /dev/null +++ b/inherit_graph_7.md5 @@ -0,0 +1 @@ +de293782a84abb385c9ddec106bf7127 \ No newline at end of file diff --git a/inherit_graph_7.svg b/inherit_graph_7.svg new file mode 100644 index 0000000..a9265b1 --- /dev/null +++ b/inherit_graph_7.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +EEPROMConfig + + + + + diff --git a/inherit_graph_8.map b/inherit_graph_8.map new file mode 100644 index 0000000..1be3c89 --- /dev/null +++ b/inherit_graph_8.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_8.md5 b/inherit_graph_8.md5 new file mode 100644 index 0000000..9a98a3a --- /dev/null +++ b/inherit_graph_8.md5 @@ -0,0 +1 @@ +2a8e2898867665242d786dcfdf719286 \ No newline at end of file diff --git a/inherit_graph_8.svg b/inherit_graph_8.svg new file mode 100644 index 0000000..391cbdd --- /dev/null +++ b/inherit_graph_8.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +FlowSensor + + + + + diff --git a/inherit_graph_9.map b/inherit_graph_9.map new file mode 100644 index 0000000..1888ae6 --- /dev/null +++ b/inherit_graph_9.map @@ -0,0 +1,3 @@ + + + diff --git a/inherit_graph_9.md5 b/inherit_graph_9.md5 new file mode 100644 index 0000000..759b06a --- /dev/null +++ b/inherit_graph_9.md5 @@ -0,0 +1 @@ +b4d2401fe502797459db1b84dccc63b1 \ No newline at end of file diff --git a/inherit_graph_9.svg b/inherit_graph_9.svg new file mode 100644 index 0000000..05d3c06 --- /dev/null +++ b/inherit_graph_9.svg @@ -0,0 +1,21 @@ + + + + + + +Graphical Class Hierarchy + + +Node0 + + +Ks0256VoltLadder + + + + + diff --git a/inherits.html b/inherits.html new file mode 100644 index 0000000..f472a2d --- /dev/null +++ b/inherits.html @@ -0,0 +1,136 @@ + + + + + + + +Humidistat: Class Hierarchy + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+ + + + + + + + + + + + + + + + + + + +
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..875ada7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,204 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e} +var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp( +"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType +}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c +)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){ +return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll( +":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id") +)&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push( +"\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test( +a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null, +null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne +).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for( +var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n; +return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0, +r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r] +,C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each( +function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r, +"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})} +),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each( +"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t +){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t +]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i}, +getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within, +s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})), +this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t +).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split( +","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add( +this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{ +width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(), +!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){ +this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height +,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e, +i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left +)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e +){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0), +i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth( +)-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e, +function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0 +]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){ +targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se", +"n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if( +session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)} +closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if( +session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE, +function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset); +tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList, +finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight())); +return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")} +function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(), +elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight, +viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b, +"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); +/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)), +mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend( +$.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy( +this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData( +"smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id" +).indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?( +this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for( +var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){ +return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if(( +!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&( +this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0 +]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass( +"highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){ +t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]" +)||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){ +t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"), +a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i, +downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2) +)&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t +)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0), +canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}}, +rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})} +return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1, +bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); diff --git a/main_8cpp.html b/main_8cpp.html new file mode 100644 index 0000000..37cc0ef --- /dev/null +++ b/main_8cpp.html @@ -0,0 +1,313 @@ + + + + + + + +Humidistat: src/main.cpp File Reference + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
main.cpp File Reference
+
+
+
#include <Arduino.h>
+#include "aliases.h"
+#include "EEPROMConfig.h"
+#include "SerialLogger.h"
+#include "input/ButtonReader.h"
+#include "sensor/ThermistorReader.h"
+#include "SetpointProfileRunner.h"
+
+Include dependency graph for main.cpp:
+
+
+
+
+

Go to the source code of this file.

+ + + + + + + + +

+Functions

ButtonReader buttonReader (config::PIN_BTN, &voltLadder)
 
void setup ()
 
void loop ()
 
+ + + + + + + + + + + +

+Variables

ThermistorReader trs []
 
VoltLadder voltLadder
 
EEPROMConfig eepromConfig
 
const uint8_t pwmRes = 8
 
SerialLogger< cHumidistat > serialLogger & humidistat
 
+

Function Documentation

+ +

◆ buttonReader()

+ +
+
+ + + + + + + + + + + +
ButtonReader buttonReader (config::PIN_BTN ,
& voltLadder )
+
+
+Here is the caller graph for this function:
+
+
+
+ +
+
+ +

◆ loop()

+ +
+
+ + + + + + + +
void loop ()
+
+ +

Definition at line 104 of file main.cpp.

+
+Here is the call graph for this function:
+
+
+
+ +
+
+ +

◆ setup()

+ +
+
+ + + + + + + +
void setup ()
+
+ +

Definition at line 86 of file main.cpp.

+ +
+
+

Variable Documentation

+ +

◆ eepromConfig

+ +
+
+ + + + +
EEPROMConfig eepromConfig
+
+ +

Definition at line 36 of file main.cpp.

+ +
+
+ +

◆ humidistat

+ +
+
+ + + + +
SerialLogger<cHumidistat> serialLogger& humidistat
+
+ +

Definition at line 84 of file main.cpp.

+ +
+
+ +

◆ pwmRes

+ +
+
+ + + + +
const uint8_t pwmRes = 8
+
+ +

Definition at line 44 of file main.cpp.

+ +
+
+ +

◆ trs

+ +
+
+ + + + +
ThermistorReader trs[]
+
+Initial value:
= {
+
ThermistorReader(config::PIN_T1),
+
ThermistorReader(config::PIN_T2),
+
ThermistorReader(config::PIN_T3),
+
ThermistorReader(config::PIN_T4)
+
}
+
Driver for thermistor thermometers.
+
+

Definition at line 25 of file main.cpp.

+ +
+
+ +

◆ voltLadder

+ +
+
+ + + + +
VoltLadder voltLadder
+
+ +

Definition at line 33 of file main.cpp.

+ +
+
+
+
+ + + + diff --git a/main_8cpp.js b/main_8cpp.js new file mode 100644 index 0000000..218b0cc --- /dev/null +++ b/main_8cpp.js @@ -0,0 +1,11 @@ +var main_8cpp = +[ + [ "buttonReader", "main_8cpp.html#ac663fd9e4235267a3acfb6529a11c50b", null ], + [ "loop", "main_8cpp.html#afe461d27b9c48d5921c00d521181f12f", null ], + [ "setup", "main_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d", null ], + [ "eepromConfig", "main_8cpp.html#aef36b79588441852b2f26b72d7f0f8d7", null ], + [ "humidistat", "main_8cpp.html#a924a4561b9bbe52ee54465768829a23d", null ], + [ "pwmRes", "main_8cpp.html#a41f053b1299d339ad57156f85bb53d19", null ], + [ "trs", "main_8cpp.html#ad7e2bb812b12b25f98e50f4e29a59587", null ], + [ "voltLadder", "main_8cpp.html#a820fd634f483400397c499f720d20307", null ] +]; \ No newline at end of file diff --git a/main_8cpp__incl.map b/main_8cpp__incl.map new file mode 100644 index 0000000..d2bf626 --- /dev/null +++ b/main_8cpp__incl.map @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/main_8cpp__incl.md5 b/main_8cpp__incl.md5 new file mode 100644 index 0000000..a6fe2ab --- /dev/null +++ b/main_8cpp__incl.md5 @@ -0,0 +1 @@ +b78dc84882e6ba8e403a24dcf5207f21 \ No newline at end of file diff --git a/main_8cpp__incl.svg b/main_8cpp__incl.svg new file mode 100644 index 0000000..0b86513 --- /dev/null +++ b/main_8cpp__incl.svg @@ -0,0 +1,660 @@ + + + + + + +src/main.cpp + + +Node1 + + +src/main.cpp + + + + + +Node2 + + +Arduino.h + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +aliases.h + + + + + +Node1->Node3 + + + + + + + + +Node4 + + +EEPROMConfig.h + + + + + +Node1->Node4 + + + + + + + + +Node5 + + +SerialLogger.h + + + + + +Node1->Node5 + + + + + + + + +Node20 + + +sensor/ThermistorReader.h + + + + + +Node1->Node20 + + + + + + + + +Node21 + + +input/ButtonReader.h + + + + + +Node1->Node21 + + + + + + + + +Node23 + + +SetpointProfileRunner.h + + + + + +Node1->Node23 + + + + + + + + +Node6 + + +stdint.h + + + + + +Node5->Node6 + + + + + + + + +Node7 + + +etl/span.h + + + + + +Node5->Node7 + + + + + + + + +Node8 + + +asprintf.h + + + + + +Node5->Node8 + + + + + + + + +Node11 + + +control/SingleHumidistat.h + + + + + +Node5->Node11 + + + + + + + + +Node16 + + +control/CascadeHumidistat.h + + + + + +Node5->Node16 + + + + + + + + +Node5->Node20 + + + + + + + + +Node9 + + +stdlib.h + + + + + +Node8->Node9 + + + + + + + + +Node10 + + +stdio.h + + + + + +Node8->Node10 + + + + + + + + +Node11->Node3 + + + + + + + + +Node11->Node4 + + + + + + + + +Node11->Node6 + + + + + + + + +Node12 + + +etl/array.h + + + + + +Node11->Node12 + + + + + + + + +Node13 + + +Humidistat.h + + + + + +Node11->Node13 + + + + + + + + +Node13->Node3 + + + + + + + + +Node13->Node4 + + + + + + + + +Node14 + + +Controller.h + + + + + +Node13->Node14 + + + + + + + + +Node14->Node4 + + + + + + + + +Node14->Node6 + + + + + + + + +Node15 + + +PID.h + + + + + +Node14->Node15 + + + + + + + + +Node15->Node6 + + + + + + + + +Node16->Node3 + + + + + + + + +Node16->Node7 + + + + + + + + +Node16->Node12 + + + + + + + + +Node16->Node13 + + + + + + + + +Node17 + + +../sensor/FlowSensor.h + + + + + +Node16->Node17 + + + + + + + + +Node19 + + +FlowController.h + + + + + +Node16->Node19 + + + + + + + + +Node17->Node6 + + + + + + + + +Node18 + + +imath.h + + + + + +Node17->Node18 + + + + + + + + +Node19->Node4 + + + + + + + + +Node19->Node14 + + + + + + + + +Node19->Node15 + + + + + + + + +Node19->Node17 + + + + + + + + +Node20->Node6 + + + + + + + + +Node21->Node3 + + + + + + + + +Node21->Node6 + + + + + + + + +Node22 + + +Buttons.h + + + + + +Node21->Node22 + + + + + + + + +Node23->Node7 + + + + + + + + +Node23->Node13 + + + + + + + + +Node24 + + +Point.h + + + + + +Node23->Node24 + + + + + + + + +Node24->Node6 + + + + + + + + +Node24->Node7 + + + + + + + + diff --git a/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.map b/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.map new file mode 100644 index 0000000..5efaaec --- /dev/null +++ b/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.md5 b/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.md5 new file mode 100644 index 0000000..32dad21 --- /dev/null +++ b/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.md5 @@ -0,0 +1 @@ +bb5824cbe77a8a9b7c7da1442c855b5c \ No newline at end of file diff --git a/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.svg b/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.svg new file mode 100644 index 0000000..db06450 --- /dev/null +++ b/main_8cpp_ac663fd9e4235267a3acfb6529a11c50b_icgraph.svg @@ -0,0 +1,39 @@ + + + + + + +buttonReader + + +Node1 + + +buttonReader + + + + + +Node2 + + +loop + + + + + +Node1->Node2 + + + + + + + + diff --git a/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.map b/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.map new file mode 100644 index 0000000..43286a6 --- /dev/null +++ b/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.map @@ -0,0 +1,7 @@ + + + + + + + diff --git a/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 b/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 new file mode 100644 index 0000000..2c6d219 --- /dev/null +++ b/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.md5 @@ -0,0 +1 @@ +8f368c462e58800480f90bd01feda193 \ No newline at end of file diff --git a/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.svg b/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.svg new file mode 100644 index 0000000..421be28 --- /dev/null +++ b/main_8cpp_afe461d27b9c48d5921c00d521181f12f_cgraph.svg @@ -0,0 +1,57 @@ + + + + + + +loop + + +Node1 + + +loop + + + + + +Node2 + + +buttonReader + + + + + +Node1->Node2 + + + + + + + + +Node3 + + +ButtonReader::sample + + + + + +Node1->Node3 + + + + + + + + diff --git a/main_8cpp_source.html b/main_8cpp_source.html new file mode 100644 index 0000000..9a8ac76 --- /dev/null +++ b/main_8cpp_source.html @@ -0,0 +1,268 @@ + + + + + + + +Humidistat: src/main.cpp Source File + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
Humidistat +
+
Arduino firmware for a humidistat (humidity controller)
+
+
+ + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
main.cpp
+
+
+Go to the documentation of this file.
1#include <Arduino.h>
+
2
+
3#include CONFIG_HEADER
+
4#include "aliases.h"
+
5
+
6#include "EEPROMConfig.h"
+
7#include "SerialLogger.h"
+ + + +
11
+
12// Beware: Lots of preprocessor fuckery to get conditional compilation based on config settings below
+
13
+
14// Humidity sensor
+
15#ifdef HUMIDISTAT_DHT
+
16DHT dht(config::PIN_DHT, DHT22);
+
17DHTHumiditySensor hs(&dht);
+
18#endif
+
19#ifdef HUMIDISTAT_SHT
+
20SHTSensor sht;
+
21SHTHumiditySensor hs(&sht);
+
22#endif
+
23
+
24// Thermistors
+
+ +
26 ThermistorReader(config::PIN_T1),
+
27 ThermistorReader(config::PIN_T2),
+
28 ThermistorReader(config::PIN_T3),
+
29 ThermistorReader(config::PIN_T4)
+
30};
+
+
31
+
32// Input
+
33VoltLadder voltLadder;
+ +
35
+ +
37
+
38// PWM frequency and resolution: MCU-dependent
+
39#if defined(ARDUINO_TEENSYLC)
+
40const uint8_t pwmRes = 16;
+
41#elif defined(ARDUINO_TEENSY40)
+
42const uint8_t pwmRes = 15;
+
43#else
+
44const uint8_t pwmRes = 8;
+
45#endif
+
46
+
47// Humidity controller
+
48#ifdef HUMIDISTAT_CONTROLLER_SINGLE
+ +
50SingleHumidistat humidistat(&hs, &eepromConfig.configStore, {{config::PIN_S1, config::PIN_S2}}, pwmRes);
+
51using cHumidistat = SingleHumidistat;
+
52#endif
+
53#ifdef HUMIDISTAT_CONTROLLER_CASCADE
+
54#include "sensor/FlowSensor.h"
+ +
56FlowSensor flowSensors[] = {FlowSensor(config::PIN_F1), FlowSensor(config::PIN_F2)};
+
57CascadeHumidistat humidistat(&hs, &eepromConfig.configStore, flowSensors, {config::PIN_S1, config::PIN_S2}, pwmRes);
+
58using cHumidistat = CascadeHumidistat;
+
59#endif
+
60
+
61// UI
+
62#ifdef HUMIDISTAT_UI_CHAR
+
63#include <LiquidCrystal.h>
+
64#include "ui/CharDisplayUI.h"
+
65LiquidCrystal liquidCrystal(config::PIN_LCD_RS, config::PIN_LCD_ENABLE, config::PIN_LCD_D0, config::PIN_LCD_D1,
+
66 config::PIN_LCD_D2, config::PIN_LCD_D3);
+
67CharDisplayUI ui(&liquidCrystal, &buttonReader, &humidistat, trs);
+
68#endif
+
69#ifdef HUMIDISTAT_UI_GRAPH
+
70#include <U8g2lib.h>
+ +
72
+ +
74
+
75#ifdef ARDUINO_TEENSYLC
+
76U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, config::PIN_LCD_CS);
+
77#endif
+
78#ifdef ARDUINO_TEENSY40
+
79U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, config::PIN_LCD_SCLK, config::PIN_LCD_MOSI, config::PIN_LCD_CS);
+
80#endif
+ +
82#endif
+
83
+ +
85
+
+
86void setup() {
+
87#ifdef ARDUINO_AVR_UNO
+
88 // Set PWM frequency on D3 and D11 to 490.20 Hz
+
89 // See: https://arduinoinfo.mywikis.net/wiki/Arduino-PWM-Frequency
+
90 TCCR2B = TCCR2B & B11111000 | B00000100;
+
91#endif
+
92#if defined(ARDUINO_TEENSYLC) || defined(ARDUINO_TEENSY40)
+
93 // Set PWM frequency to 250 Hz
+
94 analogWriteFrequency(config::PIN_S1, 500);
+
95 // Increase PWM resolution from default 8-bits
+
96 analogWriteResolution(pwmRes);
+
97#endif
+
98
+
99 hs.begin();
+
100 serialLogger.begin(config::serialRate);
+
101 ui.begin();
+
102}
+
+
103
+
+
104void loop() {
+ +
106 ui.update();
+
107 humidistat.update();
+
108 serialLogger.update();
+
109#ifdef HUMIDISTAT_UI_GRAPH
+
110 spr.update();
+
111#endif
+
112}
+
+ + + + + + + + + + + +
Read button state from a voltage ladder-style keypad.
+
void sample()
Sample the button signal. Call this in the main loop.
+
Control humidity using cascade PID: outer PID loop sets setpoints of two inner flow controllers,...
+
TUI for 16x2 character LCD. Holds a reference to a LiquidCrystal instance for writing to display....
+
Implementation of the HumiditySensor interface for the DHT22/AM2302 sensor.
+
Load/save an (internal) ConfigStore in EEPROM.
+
ConfigStore configStore
+
Read flow rate using a Omron D6F-P0010 MEMS flow sensor.
Definition FlowSensor.h:9
+
TUI for 128*64 px graphical display using U8g2. Holds references to a U8g2lib instance for writing to...
+
Implementation of the HumiditySensor interface for the Sensirion SHT85 sensor.
+
Logs humidistat data over serial.
+
'Runs' a setpoint profile.
+
Control humidity using PID by driving two solenoid valves. Adjust the public setpoint variable and ca...
+
Driver for thermistor thermometers.
+
const uint8_t pwmRes
Definition main.cpp:44
+
void setup()
Definition main.cpp:86
+
VoltLadder voltLadder
Definition main.cpp:33
+
SerialLogger< cHumidistat > serialLogger & humidistat
Definition main.cpp:84
+
ButtonReader buttonReader(config::PIN_BTN, &voltLadder)
+
ThermistorReader trs[]
Definition main.cpp:25
+
EEPROMConfig eepromConfig
Definition main.cpp:36
+
void loop()
Definition main.cpp:104
+
const uint32_t serialRate
Serial communication symbol rate (baud)
Definition config.h:33
+
uint16_t dt
Global interval for PID/logger (based on polling rate of sensor, in millis)
+
+
+ + + + diff --git a/menu.js b/menu.js new file mode 100644 index 0000000..0fd1e99 --- /dev/null +++ b/menu.js @@ -0,0 +1,134 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search,treeview) { + function makeTree(data,relPath) { + let result=''; + if ('children' in data) { + result+='
    '; + for (let i in data.children) { + let url; + const link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + let searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + const $mainMenuState = $('#main-menu-state'); + let prevWidth = 0; + if ($mainMenuState.length) { + const initResizableIfExists = function() { + if (typeof initResizable==='function') initResizable(treeview); + } + // animate mobile menu + $mainMenuState.change(function() { + const $menu = $('#main-menu'); + let options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = () => $menu.css('display', 'block'); + $menu.hide().slideDown(options); + } else { + options['complete'] = () => $menu.css('display', 'none'); + $menu.show().slideUp(options); + } + }); + // set default menu visibility + const resetState = function() { + const $menu = $('#main-menu'); + const newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/menudata.js b/menudata.js new file mode 100644 index 0000000..eb282b3 --- /dev/null +++ b/menudata.js @@ -0,0 +1,101 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Variables",url:"namespacemembers_vars.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"inherits.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions_b.html#index_b"}, +{text:"c",url:"functions_c.html#index_c"}, +{text:"d",url:"functions_d.html#index_d"}, +{text:"e",url:"functions_e.html#index_e"}, +{text:"f",url:"functions_f.html#index_f"}, +{text:"g",url:"functions_g.html#index_g"}, +{text:"h",url:"functions_h.html#index_h"}, +{text:"i",url:"functions_i.html#index_i"}, +{text:"k",url:"functions_k.html#index_k"}, +{text:"l",url:"functions_l.html#index_l"}, +{text:"m",url:"functions_m.html#index_m"}, +{text:"n",url:"functions_n.html#index_n"}, +{text:"p",url:"functions_p.html#index_p"}, +{text:"r",url:"functions_r.html#index_r"}, +{text:"s",url:"functions_s.html#index_s"}, +{text:"t",url:"functions_t.html#index_t"}, +{text:"u",url:"functions_u.html#index_u"}, +{text:"v",url:"functions_v.html#index_v"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"v",url:"functions_func.html#index_v"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"v",url:"functions_vars.html#index_v"}]}, +{text:"Enumerations",url:"functions_enum.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Functions",url:"globals_func.html"}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Enumerations",url:"globals_enum.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/minus.svg b/minus.svg new file mode 100644 index 0000000..f70d0c1 --- /dev/null +++ b/minus.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/minusd.svg b/minusd.svg new file mode 100644 index 0000000..5f8e879 --- /dev/null +++ b/minusd.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/namespaceconfig.html b/namespaceconfig.html new file mode 100644 index 0000000..daaa994 --- /dev/null +++ b/namespaceconfig.html @@ -0,0 +1,722 @@ + + + + + + + +Humidistat: config Namespace Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    config Namespace Reference
    +
    +
    + +

    Define either HUMIDISTAT_CONTROLLER_SINGLE or HUMIDISTAT_CONTROLLER_CASCADE. In the latter case, flow sensors must be connected to PIN_F1 and PIN_F2. +More...

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    const uint32_t serialRate = 115200
     Serial communication symbol rate (baud)
     
    const bool overrideEEPROM = false
     Set to true to override the values stored in EEPROM and use the default PID parameters defined below.
     
    const uint8_t EEPROMAddress = 0
     EEPROM address for storing the block.
     
    const uint16_t dt = 500
     Global interval for PID/logger (based on polling rate of sensor, in millis)
     
    const double S_lowValue = 0.75
     Minimum solenoid duty cycle (deadband)
     
    const double HC_totalFlowrate = 2
     Total flowrate (for cascade controller) (L/min)
     
    const double a = 0.75
     Smoothing factor of EMA filter for derivative.
     
    Humidity controller PID parameters
    const double HC_Kp = 0.01
     
    const double HC_Ki = 0.001
     
    const double HC_Kd = 0.01
     
    const double HC_Kf = 0.01
     
    Flow controller PID parameters
    const double FC_Kp = 0.005
     
    const double FC_Ki = 0.05
     
    const double FC_Kd = 0
     
    const double FC_Kf = 0
     
    const uint16_t FC_dt = 100
     
    Setpoint profiles

    Here you can define setpoint profiles (arrays of Points, which are pairs of a time and setpoint value). The Point arrays must be sorted in time. Enter the profiles in profiles, which is an array of SPProfiles (which takes a pair of a label string and span of Points)

    +
    const uint8_t interval = 20
     
    const Point profile_tuningtest []
     
    const SPProfile profiles []
     Setpoint profile definitions.
     
    UI
    const uint16_t buttonDebounceInterval = 500
     For debouncing: interval the keypad state must be stable for (in micros)
     
    const uint16_t inputInterval = 200
     Repeat interval for keypress events (in millis)
     
    const uint16_t blinkInterval = 500
     Interval for blinking display elements (in millis)
     
    const uint16_t splashDuration = 2000
     Duration for which to show the splash screen (in millis)
     
    const uint16_t infoDuration = 0
     Duration for which to show the info screen (in millis)
     
    const uint16_t refreshInterval = 100
     Interval for updating the display (in millis)
     
    const uint8_t adjustStep = 10
     Step size by which to in-/de-crement for coarse adjustment.
     
    const double tolerance = 0.01
     Tolerance in difference between process variable and setpoint outside which the setpoint blinks (in percentage points)
     
    For GraphicalDisplayUI:
    const uint16_t longPressDuration = 500
     Duration for counting a press as 'long' (in millis)
     
    const uint8_t configSaveCooldown = 20 * 1000 / refreshInterval
     Cooldown on saving the config to EEPROM (in refresh cycles)
     
    +

    Detailed Description

    +

    Define either HUMIDISTAT_CONTROLLER_SINGLE or HUMIDISTAT_CONTROLLER_CASCADE. In the latter case, flow sensors must be connected to PIN_F1 and PIN_F2.

    +

    Define either HUMIDISTAT_DHT (for DHT22/AM2302 sensors) or HUMIDISTAT_SHT (for Sensirion SHT85 sensors). In the former case, the data pin of the sensor should be connected to PIN_DHT. In the latter case, the sensor should be connected to the I2C bus. On the Arduino Uno, these pins (SDA and SCL) are shared with A4 and A5. Define either HUMIDISTAT_INPUT_KS0256 or HUMIDISTAT_INPUT_KS0466. In either case, the keypad must be connected to PIN_BTN specified below. Define either HUMIDISTAT_UI_CHAR HUMIDISTAT_UI_GRAPH for a HD44780 16x02 character display, or a ST7920 graphical display respectively. In the former case, the display must be connected to the pins specified below (PIN_LCD_x). in the latter case, the display must be connected to the hardware SPI bus.

    +

    Variable Documentation

    + +

    ◆ a

    + +
    +
    + + + + +
    const double config::a = 0.75
    +
    + +

    Smoothing factor of EMA filter for derivative.

    + +

    Definition at line 72 of file config.h.

    + +
    +
    + +

    ◆ adjustStep

    + +
    +
    + + + + +
    const uint8_t config::adjustStep = 10
    +
    + +

    Step size by which to in-/de-crement for coarse adjustment.

    + +

    Definition at line 166 of file config.h.

    + +
    +
    + +

    ◆ blinkInterval

    + +
    +
    + + + + +
    const uint16_t config::blinkInterval = 500
    +
    + +

    Interval for blinking display elements (in millis)

    + +

    Definition at line 154 of file config.h.

    + +
    +
    + +

    ◆ buttonDebounceInterval

    + +
    +
    + + + + +
    const uint16_t config::buttonDebounceInterval = 500
    +
    + +

    For debouncing: interval the keypad state must be stable for (in micros)

    + +

    Definition at line 148 of file config.h.

    + +
    +
    + +

    ◆ configSaveCooldown

    + +
    +
    + + + + +
    const uint8_t config::configSaveCooldown = 20 * 1000 / refreshInterval
    +
    + +

    Cooldown on saving the config to EEPROM (in refresh cycles)

    + +

    Definition at line 180 of file config.h.

    + +
    +
    + +

    ◆ dt

    + +
    +
    + + + + +
    const uint16_t config::dt = 500
    +
    + +

    Global interval for PID/logger (based on polling rate of sensor, in millis)

    + +

    Definition at line 45 of file config.h.

    + +
    +
    + +

    ◆ EEPROMAddress

    + +
    +
    + + + + +
    const uint8_t config::EEPROMAddress = 0
    +
    + +

    EEPROM address for storing the block.

    + +

    Definition at line 39 of file config.h.

    + +
    +
    + +

    ◆ FC_dt

    + +
    +
    + + + + +
    const uint16_t config::FC_dt = 100
    +
    + +

    Definition at line 62 of file config.h.

    + +
    +
    + +

    ◆ FC_Kd

    + +
    +
    + + + + +
    const double config::FC_Kd = 0
    +
    + +

    Definition at line 60 of file config.h.

    + +
    +
    + +

    ◆ FC_Kf

    + +
    +
    + + + + +
    const double config::FC_Kf = 0
    +
    + +

    Definition at line 61 of file config.h.

    + +
    +
    + +

    ◆ FC_Ki

    + +
    +
    + + + + +
    const double config::FC_Ki = 0.05
    +
    + +

    Definition at line 59 of file config.h.

    + +
    +
    + +

    ◆ FC_Kp

    + +
    +
    + + + + +
    const double config::FC_Kp = 0.005
    +
    + +

    Definition at line 58 of file config.h.

    + +
    +
    + +

    ◆ HC_Kd

    + +
    +
    + + + + +
    const double config::HC_Kd = 0.01
    +
    + +

    Definition at line 52 of file config.h.

    + +
    +
    + +

    ◆ HC_Kf

    + +
    +
    + + + + +
    const double config::HC_Kf = 0.01
    +
    + +

    Definition at line 53 of file config.h.

    + +
    +
    + +

    ◆ HC_Ki

    + +
    +
    + + + + +
    const double config::HC_Ki = 0.001
    +
    + +

    Definition at line 51 of file config.h.

    + +
    +
    + +

    ◆ HC_Kp

    + +
    +
    + + + + +
    const double config::HC_Kp = 0.01
    +
    + +

    Definition at line 50 of file config.h.

    + +
    +
    + +

    ◆ HC_totalFlowrate

    + +
    +
    + + + + +
    const double config::HC_totalFlowrate = 2
    +
    + +

    Total flowrate (for cascade controller) (L/min)

    + +

    Definition at line 69 of file config.h.

    + +
    +
    + +

    ◆ infoDuration

    + +
    +
    + + + + +
    const uint16_t config::infoDuration = 0
    +
    + +

    Duration for which to show the info screen (in millis)

    + +

    Definition at line 160 of file config.h.

    + +
    +
    + +

    ◆ inputInterval

    + +
    +
    + + + + +
    const uint16_t config::inputInterval = 200
    +
    + +

    Repeat interval for keypress events (in millis)

    + +

    Definition at line 151 of file config.h.

    + +
    +
    + +

    ◆ interval

    + +
    +
    + + + + +
    const uint8_t config::interval = 20
    +
    + +

    Definition at line 129 of file config.h.

    + +
    +
    + +

    ◆ longPressDuration

    + +
    +
    + + + + +
    const uint16_t config::longPressDuration = 500
    +
    + +

    Duration for counting a press as 'long' (in millis)

    + +

    Definition at line 177 of file config.h.

    + +
    +
    + +

    ◆ overrideEEPROM

    + +
    +
    + + + + +
    const bool config::overrideEEPROM = false
    +
    + +

    Set to true to override the values stored in EEPROM and use the default PID parameters defined below.

    + +

    Definition at line 36 of file config.h.

    + +
    +
    + +

    ◆ profile_tuningtest

    + +
    +
    + + + + +
    const Point config::profile_tuningtest[]
    +
    +Initial value:
    = {
    +
    {0 * interval, 50},
    +
    {1 * interval, 30},
    +
    {2 * interval, 60},
    +
    {3 * interval, 70},
    +
    {4 * interval, 20},
    +
    }
    +
    const uint8_t interval
    Definition config.h:129
    +
    +

    Definition at line 130 of file config.h.

    + +
    +
    + +

    ◆ profiles

    + +
    +
    + + + + +
    const SPProfile config::profiles[]
    +
    +Initial value:
    = {
    +
    {"Tuning test", etl::span<const Point>(profile_tuningtest)},
    +
    }
    +
    +

    Setpoint profile definitions.

    + +

    Definition at line 139 of file config.h.

    + +
    +
    + +

    ◆ refreshInterval

    + +
    +
    + + + + +
    const uint16_t config::refreshInterval = 100
    +
    + +

    Interval for updating the display (in millis)

    + +

    Definition at line 163 of file config.h.

    + +
    +
    + +

    ◆ S_lowValue

    + +
    +
    + + + + +
    const double config::S_lowValue = 0.75
    +
    + +

    Minimum solenoid duty cycle (deadband)

    + +

    Definition at line 66 of file config.h.

    + +
    +
    + +

    ◆ serialRate

    + +
    +
    + + + + +
    const uint32_t config::serialRate = 115200
    +
    + +

    Serial communication symbol rate (baud)

    + +

    Definition at line 33 of file config.h.

    + +
    +
    + +

    ◆ splashDuration

    + +
    +
    + + + + +
    const uint16_t config::splashDuration = 2000
    +
    + +

    Duration for which to show the splash screen (in millis)

    + +

    Definition at line 157 of file config.h.

    + +
    +
    + +

    ◆ tolerance

    + +
    +
    + + + + +
    const double config::tolerance = 0.01
    +
    + +

    Tolerance in difference between process variable and setpoint outside which the setpoint blinks (in percentage points)

    + +

    Definition at line 170 of file config.h.

    + +
    +
    +
    +
    + + + + diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 0000000..db4d672 --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: Namespace Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    +
    +
    + + + + diff --git a/namespacemembers_vars.html b/namespacemembers_vars.html new file mode 100644 index 0000000..9df2d98 --- /dev/null +++ b/namespacemembers_vars.html @@ -0,0 +1,142 @@ + + + + + + + +Humidistat: Namespace Members + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace variables with links to the namespace documentation for each variable:
    +
    +
    + + + + diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 0000000..03545cd --- /dev/null +++ b/namespaces.html @@ -0,0 +1,119 @@ + + + + + + + +Humidistat: Namespace List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    + + +
     NconfigDefine either HUMIDISTAT_CONTROLLER_SINGLE or HUMIDISTAT_CONTROLLER_CASCADE. In the latter case, flow sensors must be connected to PIN_F1 and PIN_F2
    +
    +
    +
    + + + + diff --git a/namespaces_dup.js b/namespaces_dup.js new file mode 100644 index 0000000..edc9437 --- /dev/null +++ b/namespaces_dup.js @@ -0,0 +1,34 @@ +var namespaces_dup = +[ + [ "config", "namespaceconfig.html", [ + [ "a", "namespaceconfig.html#adf257822f5649969fadc2f96deb4180d", null ], + [ "adjustStep", "namespaceconfig.html#af15133e1530c8593943f083475426a42", null ], + [ "blinkInterval", "namespaceconfig.html#a1a1598c2b8b9a3d06b6ed571dc0a7a6b", null ], + [ "buttonDebounceInterval", "namespaceconfig.html#a65edde76331e184ebe3faf2d721668de", null ], + [ "configSaveCooldown", "namespaceconfig.html#acdfe1dd31c0f8189cf0a3f64e9460963", null ], + [ "dt", "namespaceconfig.html#a3ec0299a5eb318a3c6045f7f08a8e61f", null ], + [ "EEPROMAddress", "namespaceconfig.html#a37ae42be9e0e824df24c701e66404910", null ], + [ "FC_dt", "namespaceconfig.html#a4289d73bfff6169ecdad5da87d709fbe", null ], + [ "FC_Kd", "namespaceconfig.html#a6eeb27a3b017e6f6318a5db9dd1f3e31", null ], + [ "FC_Kf", "namespaceconfig.html#a3cb43341feacf60c4def05461696e643", null ], + [ "FC_Ki", "namespaceconfig.html#af7a206a5815237178ba961751b7b1a15", null ], + [ "FC_Kp", "namespaceconfig.html#ac5d63000cecbeb4775ae0bfa2c79099e", null ], + [ "HC_Kd", "namespaceconfig.html#a5bd0f455875ca9cb0134379be2ed8580", null ], + [ "HC_Kf", "namespaceconfig.html#a427424d63e7aae495cb45a14afafc6c6", null ], + [ "HC_Ki", "namespaceconfig.html#a5d6409304d96ffa0f508f75546c3275a", null ], + [ "HC_Kp", "namespaceconfig.html#a6c3ad86dbaffb21b8772d6e43fa311fb", null ], + [ "HC_totalFlowrate", "namespaceconfig.html#a7b7632d6da3b6cfc42483203b077876e", null ], + [ "infoDuration", "namespaceconfig.html#a914e73b53167ff24ac7b5eddc8dca459", null ], + [ "inputInterval", "namespaceconfig.html#afb59421e98aca5f4b48d2f4b885416fa", null ], + [ "interval", "namespaceconfig.html#af59ae3897790505c6002f787d7b6ebdc", null ], + [ "longPressDuration", "namespaceconfig.html#a5e2a3a9098245e7373a123dea0517ada", null ], + [ "overrideEEPROM", "namespaceconfig.html#a7645bcfa797e1e40c3231392194ef388", null ], + [ "profile_tuningtest", "namespaceconfig.html#aa72cd1d2d5a5497d8adac4a71a39c5ac", null ], + [ "profiles", "namespaceconfig.html#a6e3be61e05a469505fd17cd61bcd7f51", null ], + [ "refreshInterval", "namespaceconfig.html#a0765bf22e69716c8ec9cb288037598ed", null ], + [ "S_lowValue", "namespaceconfig.html#a989ce330d6d09ee1ec6a61c56d5751b7", null ], + [ "serialRate", "namespaceconfig.html#ad523f1c03fca3954dd9dddddc7bced67", null ], + [ "splashDuration", "namespaceconfig.html#aedbb4aef54ad7841b336871944263821", null ], + [ "tolerance", "namespaceconfig.html#a25d98806cbf0bd49d964a09656e7dfae", null ] + ] ] +]; \ No newline at end of file diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_fd.png b/nav_fd.png new file mode 100644 index 0000000..032fbdd Binary files /dev/null and b/nav_fd.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/nav_h.png differ diff --git a/nav_hd.png b/nav_hd.png new file mode 100644 index 0000000..de80f18 Binary files /dev/null and b/nav_hd.png differ diff --git a/navtree.css b/navtree.css new file mode 100644 index 0000000..69211d4 --- /dev/null +++ b/navtree.css @@ -0,0 +1,149 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: var(--nav-text-active-color); + text-shadow: var(--nav-text-active-shadow); +} + +#nav-tree .selected .arrow { + color: var(--nav-arrow-selected-color); + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px var(--font-family-nav); +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:var(--nav-text-active-color); +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:var(--nav-splitbar-image); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: var(--nav-background-color); + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/navtree.js b/navtree.js new file mode 100644 index 0000000..9027ce6 --- /dev/null +++ b/navtree.js @@ -0,0 +1,483 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initNavTree(toroot,relpath) { + let navTreeSubIndices = []; + const ARROW_DOWN = '▼'; + const ARROW_RIGHT = '►'; + const NAVPATH_COOKIE_NAME = ''+'navpath'; + + const getData = function(varName) { + const i = varName.lastIndexOf('/'); + const n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/-/g,'_')); + } + + const stripPath = function(uri) { + return uri.substring(uri.lastIndexOf('/')+1); + } + + const stripPath2 = function(uri) { + const i = uri.lastIndexOf('/'); + const s = uri.substring(i+1); + const m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; + } + + const hashValue = function() { + return $(location).attr('hash').substring(1).replace(/[^\w-]/g,''); + } + + const hashUrl = function() { + return '#'+hashValue(); + } + + const pathName = function() { + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;()]/g, ''); + } + + const storeLink = function(link) { + if (!$("#nav-sync").hasClass('sync')) { + Cookie.writeSetting(NAVPATH_COOKIE_NAME,link,0); + } + } + + const deleteLink = function() { + Cookie.eraseSetting(NAVPATH_COOKIE_NAME); + } + + const cachedLink = function() { + return Cookie.readSetting(NAVPATH_COOKIE_NAME,''); + } + + const getScript = function(scriptName,func) { + const head = document.getElementsByTagName("head")[0]; + const script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); + } + + const createIndent = function(o,domNode,node) { + let level=-1; + let n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + const imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=ARROW_RIGHT; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=ARROW_RIGHT; + node.expanded = false; + } else { + expandNode(o, node, false, true); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + let span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } + } + + let animationInProgress = false; + + const gotoAnchor = function(anchor,aname) { + let pos, docContent = $('#doc-content'); + let ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || ancParent.hasClass('fieldtype') || + ancParent.is(':header')) { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + const dcOffset = docContent.offset().top; + const dcHeight = docContent.height(); + const dcScrHeight = docContent[0].scrollHeight + const dcScrTop = docContent.scrollTop(); + let dist = Math.abs(Math.min(pos-dcOffset,dcScrHeight-dcHeight-dcScrTop)); + animationInProgress = true; + docContent.animate({ + scrollTop: pos + dcScrTop - dcOffset + },Math.max(50,Math.min(500,dist)),function() { + animationInProgress=false; + if (anchor.parent().attr('class')=='memItemLeft') { + let rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname') { + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype') { + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + }); + } + } + + const newNode = function(o, po, text, link, childrenData, lastNode) { + const node = { + children : [], + childrenData : childrenData, + depth : po.depth + 1, + relpath : po.relpath, + isLast : lastNode, + li : document.createElement("li"), + parentNode : po, + itemDiv : document.createElement("div"), + labelSpan : document.createElement("span"), + label : document.createTextNode(text), + expanded : false, + childrenUL : null, + getChildrenUL : function() { + if (!this.childrenUL) { + this.childrenUL = document.createElement("ul"); + this.childrenUL.className = "children_ul"; + this.childrenUL.style.display = "none"; + this.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }, + }; + + node.itemDiv.className = "item"; + node.labelSpan.className = "label"; + createIndent(o,node.itemDiv,node); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + const a = document.createElement("a"); + node.labelSpan.appendChild(a); + po.getChildrenUL().appendChild(node.li); + a.appendChild(node.label); + if (link) { + let url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + const aname = '#'+link.split('#')[1]; + const srcPage = stripPath(pathName()); + const targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : aname; + a.onclick = function() { + storeLink(link); + aPPar = $(a).parent().parent(); + if (!aPPar.hasClass('selected')) { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + aPPar.addClass('selected'); + aPPar.attr('id','selected'); + } + const anchor = $(aname); + gotoAnchor(anchor,aname); + }; + } else { + a.href = url; + a.onclick = () => storeLink(link); + } + } else if (childrenData != null) { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + return node; + } + + const showRoot = function() { + const headerHeight = $("#top").height(); + const footerHeight = $("#nav-path").height(); + const windowHeight = $(window).height() - headerHeight - footerHeight; + (function() { // retry until we can scroll to the selected item + try { + const navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); + } + + const expandNode = function(o, node, imm, setFocus) { + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + expandNode(o, node, imm, setFocus); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + if (setFocus) { + $(node.expandToggle).focus(); + } + } + } + } + + const glowEffect = function(n,duration) { + n.addClass('glow').delay(duration).queue(function(next) { + $(this).removeClass('glow');next(); + }); + } + + const highlightAnchor = function() { + const aname = hashUrl(); + const anchor = $(aname); + gotoAnchor(anchor,aname); + } + + const selectAndHighlight = function(hash,n) { + let a; + if (hash) { + const link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + let topOffset=5; + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); + } + + const showNode = function(o, node, index, hash) { + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + const varName = node.childrenData; + getScript(node.relpath+varName,function() { + node.childrenData = getData(varName); + showNode(o,node,index,hash); + }); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = ARROW_DOWN; + node.expanded = true; + const n = node.children[o.breadcrumbs[index]]; + if (index+11 ? '#'+parts[1].replace(/[^\w-]/g,'') : ''; + } + if (hash.match(/^#l\d+$/)) { + const anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + const url=root+hash; + let i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function() { + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + }); + } + } + + const showSyncOff = function(n,relpath) { + n.html(''); + } + + const showSyncOn = function(n,relpath) { + n.html(''); + } + + const o = { + toroot : toroot, + node : { + childrenData : NAVTREE, + children : [], + childrenUL : document.createElement("ul"), + getChildrenUL : function() { return this.childrenUL }, + li : document.getElementById("nav-tree-contents"), + depth : 0, + relpath : relpath, + expanded : false, + isLast : true, + plus_img : document.createElement("span"), + }, + }; + o.node.li.appendChild(o.node.childrenUL); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = ARROW_RIGHT; + + const navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + + navSync.click(() => { + const navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } + }); + + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + + $(window).bind('hashchange', () => { + if (!animationInProgress) { + if (window.location.hash && window.location.hash.length>1) { + let a; + if ($(location).attr('hash')) { + const clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +Humidistat: src/new.cpp File Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    new.cpp File Reference
    +
    + +
    + + + + diff --git a/new_8cpp_source.html b/new_8cpp_source.html new file mode 100644 index 0000000..da2eb0d --- /dev/null +++ b/new_8cpp_source.html @@ -0,0 +1,125 @@ + + + + + + + +Humidistat: src/new.cpp Source File + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    new.cpp
    +
    +
    +Go to the documentation of this file.
    1#if __cplusplus >= 201402L && ARDUINO_AVR_UNO
    +
    2#include <stdlib.h>
    +
    3
    +
    4void operator delete(void* ptr, size_t size) noexcept {
    +
    5 operator delete(ptr);
    +
    6}
    +
    7void operator delete[](void * ptr, size_t size) noexcept {
    +
    8 operator delete[](ptr);
    +
    9}
    +
    10#endif
    +
    +
    + + + + diff --git a/open.png b/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/open.png differ diff --git a/plus.svg b/plus.svg new file mode 100644 index 0000000..0752016 --- /dev/null +++ b/plus.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plusd.svg b/plusd.svg new file mode 100644 index 0000000..0c65bfe --- /dev/null +++ b/plusd.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resize.js b/resize.js new file mode 100644 index 0000000..178d03b --- /dev/null +++ b/resize.js @@ -0,0 +1,147 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ + +function initResizable(treeview) { + let sidenav,navtree,content,header,footer,barWidth=6; + const RESIZE_COOKIE_NAME = ''+'width'; + + function resizeWidth() { + const sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) { + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight(treeview) { + const headerHeight = header.outerHeight(); + const windowHeight = $(window).height(); + let contentHeight; + if (treeview) + { + const footerHeight = footer.outerHeight(); + let navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + } + else + { + contentHeight = windowHeight - headerHeight; + } + content.css({height:contentHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() { + let newWidth; + if (sidenav.width()>0) { + newWidth=0; + } else { + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + const sidenavWidth = $(sidenav).outerWidth(); + Cookie.writeSetting(RESIZE_COOKIE_NAME,sidenavWidth-barWidth); + } + + header = $("#top"); + content = $("#doc-content"); + footer = $("#nav-path"); + sidenav = $("#side-nav"); + if (!treeview) { +// title = $("#titlearea"); +// titleH = $(title).height(); +// let animating = false; +// content.on("scroll", function() { +// slideOpts = { duration: 200, +// step: function() { +// contentHeight = $(window).height() - header.outerHeight(); +// content.css({ height : contentHeight + "px" }); +// }, +// done: function() { animating=false; } +// }; +// if (content.scrollTop()>titleH && title.css('display')!='none' && !animating) { +// title.slideUp(slideOpts); +// animating=true; +// } else if (content.scrollTop()<=titleH && title.css('display')=='none' && !animating) { +// title.slideDown(slideOpts); +// animating=true; +// } +// }); + } else { + navtree = $("#nav-tree"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + } + $(window).resize(function() { resizeHeight(treeview); }); + if (treeview) + { + const device = navigator.userAgent.toLowerCase(); + const touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + const width = Cookie.readSetting(RESIZE_COOKIE_NAME,250); + if (width) { restoreWidth(width); } else { resizeWidth(); } + } + resizeHeight(treeview); + const url = location.href; + const i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + const _preventDefault = function(evt) { evt.preventDefault(); }; + if (treeview) + { + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + // workaround for firefox + $("body").css({overflow: "hidden"}); + } + $(window).on('load',function() { resizeHeight(treeview); }); +} +/* @license-end */ diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..994cdbe --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5flast_0',['_last',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8ad07362c156b2478a01d62dad95e24f14',1,'GraphicalDisplayUI::_last'],['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199dad07362c156b2478a01d62dad95e24f14',1,'GraphicalDisplayUI::_last']]] +]; diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..21f0381 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['a_0',['a',['../classPID.html#a40ab14751ced39a55d8d0a1ce269bd70',1,'PID::a'],['../structConfigStore.html#aa4b29fc96154023c2ecb267ccbccd319',1,'ConfigStore::a'],['../namespaceconfig.html#adf257822f5649969fadc2f96deb4180d',1,'config::a']]], + ['action_1',['Action',['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199d',1,'GraphicalDisplayUI']]], + ['actions_2',['actions',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66caebb67a4271abe715344471b0f16321f6',1,'GraphicalDisplayUI']]], + ['active_3',['active',['../classController.html#a1eca9e56ad3f890647583a38321862f7',1,'Controller']]], + ['address_4',['address',['../classEEPROMConfig.html#a272a99cab90d4d57be569ed1d603a530',1,'EEPROMConfig']]], + ['adjust_5',['adjust',['../classConfigPar.html#aab5ed0b09b040eba98bc05d76e89c4ca',1,'ConfigPar']]], + ['adjuststep_6',['adjustStep',['../classControllerUI.html#ae6fd57f1c87678a082fd5b16ee898153',1,'ControllerUI::adjustStep'],['../namespaceconfig.html#af15133e1530c8593943f083475426a42',1,'config::adjustStep']]], + ['adjustvalue_7',['adjustValue',['../classControllerUI.html#a227e9eb131da08502bf707ac33bccab3',1,'ControllerUI']]], + ['advanceenum_8',['advanceEnum',['../advanceEnum_8h.html#a4c6cbb4b80fa575a2819ca1d5e7cc1a2',1,'advanceEnum.h']]], + ['advanceenum_2eh_9',['advanceEnum.h',['../advanceEnum_8h.html',1,'']]], + ['aliases_2eh_10',['aliases.h',['../aliases_8h.html',1,'']]], + ['asprint_11',['asprint',['../classConfigPar.html#a0bece1a8613c7c8ba8d87e28acf2cb34',1,'ConfigPar']]], + ['asprintf_12',['asprintf',['../asprintf_8h.html#a8e2a40be4816c793857112b1960e912b',1,'asprintf.h']]], + ['asprintf_2eh_13',['asprintf.h',['../asprintf_8h.html',1,'']]] +]; diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 0000000..5fb9c27 --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['r_5finf_0',['r_inf',['../classThermistorReader.html#a013098ce0a6b10cef915d45a0c5d4ce0',1,'ThermistorReader']]], + ['r_5fseries_1',['R_series',['../classThermistorReader.html#ac26191b6df012ddd53effff94d0c953a',1,'ThermistorReader']]], + ['readflowrate_2',['readFlowrate',['../classFlowSensor.html#af13c74f7fd6fed9e163292e2b840ca8e',1,'FlowSensor']]], + ['readsample_3',['readSample',['../classDHTHumiditySensor.html#a00eb12e6e2bc051bea1d82992fe96ec2',1,'DHTHumiditySensor::readSample()'],['../classSHTHumiditySensor.html#ad6e81ab1ca1183180dac12e563567e44',1,'SHTHumiditySensor::readSample()']]], + ['readtemp_4',['readTemp',['../classThermistorReader.html#a61290269ed0011d84d4822d3a60f18cd',1,'ThermistorReader']]], + ['ready_5',['ready',['../classSerialLogger.html#a3a9426a4363db61fa75787bb447757c9',1,'SerialLogger']]], + ['ref_5fpin_6',['ref_pin',['../classThermistorReader.html#aedb1a119cc42619d9380023ad765ec7f',1,'ThermistorReader']]], + ['refreshinterval_7',['refreshInterval',['../classControllerUI.html#a01c0f462c8b59d42de64289508f1cd79',1,'ControllerUI::refreshInterval'],['../namespaceconfig.html#a0765bf22e69716c8ec9cb288037598ed',1,'config::refreshInterval']]], + ['reset_8',['reset',['../classEEPROMConfig.html#a389d1170c790427a9d5fb6643c340b21',1,'EEPROMConfig::reset()'],['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199da86266ee937d97f812a8e57d22b62ee29',1,'GraphicalDisplayUI::reset']]], + ['right_9',['RIGHT',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a21507b40c80068eda19865706fdc2403',1,'Buttons.h']]], + ['runcycle_10',['runCycle',['../classHumidistat.html#ae30511d6477f5996de05996bdf221730',1,'Humidistat']]], + ['running_11',['running',['../classSetpointProfileRunner.html#a226c7cee855976afd07e012862c09730',1,'SetpointProfileRunner']]] +]; diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 0000000..3be8628 --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,35 @@ +var searchData= +[ + ['s_5flowvalue_0',['S_lowValue',['../structConfigStore.html#ae800aac617d54b57945800ce46014aa7',1,'ConfigStore::S_lowValue'],['../namespaceconfig.html#a989ce330d6d09ee1ec6a61c56d5751b7',1,'config::S_lowValue']]], + ['sample_1',['sample',['../classButtonReader.html#ab1b6d6805373ba677510075fa2aaf013',1,'ButtonReader']]], + ['save_2',['save',['../classEEPROMConfig.html#a3ccccd29dcfe0a56152c2d9382fa2f0d',1,'EEPROMConfig::save()'],['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199da43781db5c40ecc39fd718685594f0956',1,'GraphicalDisplayUI::save']]], + ['screencleared_3',['screenCleared',['../classControllerUI.html#a679408f8daf31bd34e8a762012e96207',1,'ControllerUI']]], + ['select_4',['SELECT',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a63225f19fccb18e7c709f1fa11bc738e',1,'Buttons.h']]], + ['selection_5',['Selection',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66c',1,'GraphicalDisplayUI']]], + ['sensorlastread_6',['sensorLastRead',['../classController.html#ae9b9237c5a1e3ec9146d6aeed7fc4a44',1,'Controller']]], + ['seriallogger_7',['SerialLogger',['../classSerialLogger.html',1,'SerialLogger< Humidistat_t >'],['../classSerialLogger.html#a49cb903243a25d8fe058c5d3fbd0af27',1,'SerialLogger::SerialLogger()']]], + ['seriallogger_2eh_8',['SerialLogger.h',['../SerialLogger_8h.html',1,'']]], + ['serialrate_9',['serialRate',['../namespaceconfig.html#ad523f1c03fca3954dd9dddddc7bced67',1,'config']]], + ['setauto_10',['setAuto',['../classPID.html#a05e62644ef9b7c0f3b1bb34631150ab4',1,'PID']]], + ['setcursor_11',['setCursor',['../classCharDisplayUI.html#a64b178a64267a4d9ba59793196c803ad',1,'CharDisplayUI::setCursor()'],['../classControllerUI.html#a94aed853c67197d32434244f8941c21e',1,'ControllerUI::setCursor()'],['../classGraphicalDisplayUI.html#a036a55e339ff591d1fa70c1baa474e52',1,'GraphicalDisplayUI::setCursor()']]], + ['setgains_12',['setGains',['../classPID.html#ae3f4eed49d68435cc1b77e137ac31920',1,'PID']]], + ['setpointprofilerunner_13',['SetpointProfileRunner',['../classSetpointProfileRunner.html',1,'SetpointProfileRunner'],['../classSetpointProfileRunner.html#af79fdf3a056f30d3a56ba2902bde9f55',1,'SetpointProfileRunner::SetpointProfileRunner()']]], + ['setpointprofilerunner_2ecpp_14',['SetpointProfileRunner.cpp',['../SetpointProfileRunner_8cpp.html',1,'']]], + ['setpointprofilerunner_2eh_15',['SetpointProfileRunner.h',['../SetpointProfileRunner_8h.html',1,'']]], + ['setprofile_16',['setProfile',['../classSetpointProfileRunner.html#a1c11d6fe1d34db313e8bc78cc08ab19f',1,'SetpointProfileRunner']]], + ['setup_17',['setup',['../main_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'main.cpp']]], + ['sht_18',['sht',['../classSHTHumiditySensor.html#ad2aee2628bec41099d35e0c252e8d08c',1,'SHTHumiditySensor']]], + ['shthumiditysensor_19',['SHTHumiditySensor',['../classSHTHumiditySensor.html',1,'SHTHumiditySensor'],['../classSHTHumiditySensor.html#a1039b7f325744746e33a2de35a979807',1,'SHTHumiditySensor::SHTHumiditySensor()']]], + ['shthumiditysensor_2ecpp_20',['SHTHumiditySensor.cpp',['../SHTHumiditySensor_8cpp.html',1,'']]], + ['shthumiditysensor_2eh_21',['SHTHumiditySensor.h',['../SHTHumiditySensor_8h.html',1,'']]], + ['singlehumidistat_22',['SingleHumidistat',['../classSingleHumidistat.html',1,'SingleHumidistat'],['../classSingleHumidistat.html#a342a291cc9a950ecd47399f87c873908',1,'SingleHumidistat::SingleHumidistat()']]], + ['singlehumidistat_2ecpp_23',['SingleHumidistat.cpp',['../SingleHumidistat_8cpp.html',1,'']]], + ['singlehumidistat_2eh_24',['SingleHumidistat.h',['../SingleHumidistat_8h.html',1,'']]], + ['solenoidpin_25',['solenoidPin',['../classFlowController.html#afa75463316137685eea0754df2b98a71',1,'FlowController']]], + ['sp_26',['sp',['../classController.html#a01fdd32bacee0e5650ac63a8889eae6e',1,'Controller::sp'],['../classPID.html#a4014610045793c81f58cddf1cd00312d',1,'PID::sp'],['../structPoint.html#ab85fd496384909563acfdc9cb15f9702',1,'Point::sp']]], + ['splashdrawn_27',['splashDrawn',['../classControllerUI.html#a8747a103ef10c55194c284e3cdeabb97',1,'ControllerUI']]], + ['splashduration_28',['splashDuration',['../classControllerUI.html#a62a73bcc94bfc46e1f8a844ee38c0357',1,'ControllerUI::splashDuration'],['../namespaceconfig.html#aedbb4aef54ad7841b336871944263821',1,'config::splashDuration']]], + ['spprofile_29',['SPProfile',['../structSPProfile.html',1,'']]], + ['spr_30',['spr',['../classGraphicalDisplayUI.html#ab89bfe682717e76208ce72dc56c6a343',1,'GraphicalDisplayUI']]], + ['str_31',['STR',['../ConfigPar_8h.html#a6388870e639eee9c0a69446876f1f8cc',1,'ConfigPar.h']]] +]; diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 0000000..6988a70 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['t_0',['t',['../classSHTHumiditySensor.html#a6f0a4e485f55ac5069cefbab4f0b7d02',1,'SHTHumiditySensor']]], + ['tab_1',['Tab',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8',1,'GraphicalDisplayUI']]], + ['thermistorreader_2',['ThermistorReader',['../classThermistorReader.html',1,'ThermistorReader'],['../classThermistorReader.html#afad2e0f1f7faab3d370efd35868614ea',1,'ThermistorReader::ThermistorReader()']]], + ['thermistorreader_2ecpp_3',['ThermistorReader.cpp',['../ThermistorReader_8cpp.html',1,'']]], + ['thermistorreader_2eh_4',['ThermistorReader.h',['../ThermistorReader_8h.html',1,'']]], + ['time_5',['time',['../structPoint.html#a4f0d0b6e159127d018d5af6f1e9891c7',1,'Point']]], + ['timestart_6',['timeStart',['../classSetpointProfileRunner.html#a82788238a2cf6c4d625d003e9d35022f',1,'SetpointProfileRunner']]], + ['toggle_7',['toggle',['../classSetpointProfileRunner.html#ace14da515f49645e5901523d0864dd23',1,'SetpointProfileRunner']]], + ['tolerance_8',['tolerance',['../classControllerUI.html#a12ac90cf5a6ae47d1325a058e17bbb48',1,'ControllerUI::tolerance'],['../namespaceconfig.html#a25d98806cbf0bd49d964a09656e7dfae',1,'config::tolerance']]], + ['trs_9',['trs',['../classSerialLogger.html#aaea6bb97bd8ebd7a55931585e9ab2bdb',1,'SerialLogger::trs'],['../classControllerUI.html#a2cceb103c052a6943acc6ac458cf8717',1,'ControllerUI::trs'],['../main_8cpp.html#ad7e2bb812b12b25f98e50f4e29a59587',1,'trs: main.cpp']]], + ['type_10',['type',['../structConfigPar_1_1Var.html#a880f0673b8c0ce9b5f2543740a8bec60',1,'ConfigPar::Var']]] +]; diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 0000000..e54fd74 --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['u8g2_0',['u8g2',['../classGraphicalDisplayUI.html#ada718a9e797fbf338ce4e49ae1eef1f1',1,'GraphicalDisplayUI']]], + ['ui16_1',['ui16',['../structConfigPar_1_1Var.html#abcc3abfd8781c34cb074f73417ebec96',1,'ConfigPar::Var::ui16'],['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96ab60074c2198659a6c7e8f46acb7d4bc1',1,'ConfigPar::ui16']]], + ['ui8_2',['ui8',['../structConfigPar_1_1Var.html#ac4c3692666145b0feffbad2548642685',1,'ConfigPar::Var::ui8'],['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96ab9dbe04bd906ef585047055b88ed6aa9',1,'ConfigPar::ui8']]], + ['up_3',['UP',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034afbaedde498cdead4f2780217646e9ba1',1,'Buttons.h']]], + ['update_4',['update',['../classCascadeHumidistat.html#a5a4f6ad4f30f5f033462af46d47cf959',1,'CascadeHumidistat::update()'],['../classController.html#a7d04c17913f04f99429aa29fa8505484',1,'Controller::update()'],['../classFlowController.html#a67e791323a0cd95c97266135ba2ecde2',1,'FlowController::update()'],['../classSingleHumidistat.html#af667a97d9c89b5801dab0956f88acd70',1,'SingleHumidistat::update()'],['../classSerialLogger.html#a2c4b7a2678b3742894d61739949f9c9d',1,'SerialLogger::update()'],['../classSetpointProfileRunner.html#a076b63e4aea6e1ba45c7b28ff714d6b6',1,'SetpointProfileRunner::update()'],['../classControllerUI.html#a6f2d7f517a98e9ed393fdded07bbc454',1,'ControllerUI::update()']]], + ['updatepidparameters_5',['updatePIDParameters',['../classCascadeHumidistat.html#ad3b4c342c985955ba465a1ee85249eee',1,'CascadeHumidistat::updatePIDParameters()'],['../classController.html#ab63fde8bc51d57a153f8db1258ed6d36',1,'Controller::updatePIDParameters()'],['../classFlowController.html#a20a5cb870095042fc47e60866675bc07',1,'FlowController::updatePIDParameters()'],['../classSingleHumidistat.html#ae8f19856e617b83e1cf21e72e5b9f1d9',1,'SingleHumidistat::updatePIDParameters()']]] +]; diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 0000000..9b6406c --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['var_0',['Var',['../structConfigPar_1_1Var.html',1,'ConfigPar::Var'],['../structConfigPar_1_1Var.html#afab7e72cb763fbaf429cb5ac6ee2ab8d',1,'ConfigPar::Var::Var(uint8_t *par)'],['../structConfigPar_1_1Var.html#a69353bfa22040ecc5f0e9eb848936121',1,'ConfigPar::Var::Var(uint16_t *par)'],['../structConfigPar_1_1Var.html#a43f2a94e6cc162b8e3dae17a6bc78dc4',1,'ConfigPar::Var::Var(double *par)'],['../structConfigPar_1_1Var.html#ad08177ae1a60f8148663707c8585444a',1,'ConfigPar::Var::Var()']]], + ['var_1',['var',['../classConfigPar.html#ad855012b143f0f6e02e2f611799f5ea5',1,'ConfigPar']]], + ['version_2',['version',['../structConfigStore.html#a8296af0f6cca3f3a9abace89068be190',1,'ConfigStore']]], + ['voltagetobutton_3',['voltageToButton',['../classKs0256VoltLadder.html#a5dfd77e1d57a8ad0ada2629d862df81d',1,'Ks0256VoltLadder::voltageToButton()'],['../classKs0466VoltLadder.html#a620f1eab2fdb7c12cae97c5fa432eb97',1,'Ks0466VoltLadder::voltageToButton()']]], + ['voltladder_4',['voltLadder',['../classButtonReader.html#add104c458e6b8a49946537ae9f079b08',1,'ButtonReader::voltLadder'],['../main_8cpp.html#a820fd634f483400397c499f720d20307',1,'voltLadder: main.cpp']]] +]; diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 0000000..99815b8 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['width_0',['WIDTH',['../ConfigPar_8h.html#a241aeeb764887ae5e3de58b98f04b16d',1,'ConfigPar.h']]] +]; diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 0000000..6b97927 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xstr_0',['XSTR',['../ConfigPar_8h.html#a03943706e48069237cd57f2d35ca987e',1,'ConfigPar.h']]] +]; diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..3a6fdf8 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['b_0',['B',['../classThermistorReader.html#a456178989d361fcc9ff94ffe5bd29ef7',1,'ThermistorReader']]], + ['begin_1',['begin',['../classDHTHumiditySensor.html#a6f3c44549a548da9e10d0e9320935132',1,'DHTHumiditySensor::begin()'],['../classSHTHumiditySensor.html#af7637bc2b5b2f4b7d638a526f0eb4533',1,'SHTHumiditySensor::begin()'],['../classSerialLogger.html#a7f48d0c123bae376f761db3b5f23efe9',1,'SerialLogger::begin()'],['../classCharDisplayUI.html#afa5c69d65c9bf645c9569112f542e9d6',1,'CharDisplayUI::begin()'],['../classControllerUI.html#a999978b071e8a4c42751948e3324fb03',1,'ControllerUI::begin()'],['../classGraphicalDisplayUI.html#a8d23dbf1a27faef393f8976e0f0d4532',1,'GraphicalDisplayUI::begin()']]], + ['blink_2',['blink',['../classControllerUI.html#af385bdf29e1075733d91b845fb771506',1,'ControllerUI']]], + ['blinkinterval_3',['blinkInterval',['../classControllerUI.html#aa471dcc18ed6efe07dc2e5871ce8d8b0',1,'ControllerUI::blinkInterval'],['../namespaceconfig.html#a1a1598c2b8b9a3d06b6ed571dc0a7a6b',1,'config::blinkInterval']]], + ['buttondebounceinterval_4',['buttonDebounceInterval',['../classControllerUI.html#ab16183c3b414be8bfb358ca4b7ee91f7',1,'ControllerUI::buttonDebounceInterval'],['../namespaceconfig.html#a65edde76331e184ebe3faf2d721668de',1,'config::buttonDebounceInterval']]], + ['buttonreader_5',['ButtonReader',['../classButtonReader.html',1,'ButtonReader'],['../classButtonReader.html#a4a760bc3e3910b187da66283e43db72a',1,'ButtonReader::ButtonReader()']]], + ['buttonreader_6',['buttonReader',['../classControllerUI.html#abf84f563826a7c8f77d600d96bdbca97',1,'ControllerUI::buttonReader'],['../main_8cpp.html#ac663fd9e4235267a3acfb6529a11c50b',1,'buttonReader(config::PIN_BTN, &voltLadder): main.cpp']]], + ['buttonreader_2ecpp_7',['ButtonReader.cpp',['../ButtonReader_8cpp.html',1,'']]], + ['buttonreader_2eh_8',['ButtonReader.h',['../ButtonReader_8h.html',1,'']]], + ['buttons_9',['Buttons',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034',1,'Buttons.h']]], + ['buttons_2eh_10',['Buttons.h',['../Buttons_8h.html',1,'']]] +]; diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..85914e5 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,41 @@ +var searchData= +[ + ['cascadehumidistat_0',['CascadeHumidistat',['../classCascadeHumidistat.html',1,'CascadeHumidistat'],['../classCascadeHumidistat.html#aba1e29f588bbd230605a0220df3de162',1,'CascadeHumidistat::CascadeHumidistat()']]], + ['cascadehumidistat_2ecpp_1',['CascadeHumidistat.cpp',['../CascadeHumidistat_8cpp.html',1,'']]], + ['cascadehumidistat_2eh_2',['CascadeHumidistat.h',['../CascadeHumidistat_8h.html',1,'']]], + ['chardisplayui_3',['CharDisplayUI',['../classCharDisplayUI.html',1,'CharDisplayUI'],['../classCharDisplayUI.html#a88d7e9e270bab8d87e52d9f3e08e17dc',1,'CharDisplayUI::CharDisplayUI()']]], + ['chardisplayui_2ecpp_4',['CharDisplayUI.cpp',['../CharDisplayUI_8cpp.html',1,'']]], + ['chardisplayui_2eh_5',['CharDisplayUI.h',['../CharDisplayUI_8h.html',1,'']]], + ['clear_6',['clear',['../classCharDisplayUI.html#afd179d1f20c0dbab854a2b5e574606d1',1,'CharDisplayUI::clear()'],['../classControllerUI.html#af0365e8a34ddcc4b00985fa0c95a5d65',1,'ControllerUI::clear()'],['../classGraphicalDisplayUI.html#a10119a1a93c9c72e60a5ae309041900d',1,'GraphicalDisplayUI::clear()']]], + ['clip_7',['clip',['../classPID.html#a0e64deb10d189ef873ec4e672a1c79f2',1,'PID']]], + ['coeffs_8',['coeffs',['../classFlowSensor.html#a0a564c7e779a09d198748307bb36d47d',1,'FlowSensor']]], + ['compute_9',['compute',['../classPID.html#a742098de1dc845731f9bc86ebf01fb01',1,'PID']]], + ['config_10',['config',['../namespaceconfig.html',1,'config'],['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8a2245023265ae4cf87d02c8b6ba991139',1,'GraphicalDisplayUI::config']]], + ['config_2eh_11',['config.h',['../config_8h.html',1,'']]], + ['config_5fassert_2eh_12',['config_assert.h',['../config__assert_8h.html',1,'']]], + ['configpar_13',['ConfigPar',['../classConfigPar.html',1,'']]], + ['configpar_2ecpp_14',['ConfigPar.cpp',['../ConfigPar_8cpp.html',1,'']]], + ['configpar_2eh_15',['ConfigPar.h',['../ConfigPar_8h.html',1,'']]], + ['configpars_16',['configPars',['../classGraphicalDisplayUI.html#ada8e89861f782213d31580a46a161e58',1,'GraphicalDisplayUI']]], + ['configpartype_17',['ConfigParType',['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96',1,'ConfigPar']]], + ['configsavecooldown_18',['configSaveCooldown',['../classGraphicalDisplayUI.html#a5594bad98dbbcce925c0851e1eeaade8',1,'GraphicalDisplayUI::configSaveCooldown'],['../namespaceconfig.html#acdfe1dd31c0f8189cf0a3f64e9460963',1,'config::configSaveCooldown']]], + ['configsavetimer_19',['configSaveTimer',['../classGraphicalDisplayUI.html#a08621f13717e9cc5289f9927c63806a2',1,'GraphicalDisplayUI']]], + ['configstore_20',['ConfigStore',['../structConfigStore.html',1,'']]], + ['configstore_21',['configStore',['../classEEPROMConfig.html#ae252948f13098dbb66d19758d1fcb400',1,'EEPROMConfig']]], + ['controller_22',['Controller',['../classController.html',1,'Controller'],['../classController.html#a2cac802179f6b45250a3e6205c6836a6',1,'Controller::Controller()']]], + ['controller_2ecpp_23',['Controller.cpp',['../Controller_8cpp.html',1,'']]], + ['controller_2eh_24',['Controller.h',['../Controller_8h.html',1,'']]], + ['controllerui_25',['ControllerUI',['../classControllerUI.html',1,'ControllerUI'],['../classControllerUI.html#ab48d932cb3b88a93736120e23aaade09',1,'ControllerUI::ControllerUI()']]], + ['controllerui_2ecpp_26',['ControllerUI.cpp',['../ControllerUI_8cpp.html',1,'']]], + ['controllerui_2eh_27',['ControllerUI.h',['../ControllerUI_8h.html',1,'']]], + ['cs_28',['cs',['../classController.html#aa2de62d9e5712de3cf51505de645933a',1,'Controller']]], + ['currentaction_29',['currentAction',['../classGraphicalDisplayUI.html#ac3a272f9a07f057a9830aed3064586c4',1,'GraphicalDisplayUI']]], + ['currentdigit_30',['currentDigit',['../classGraphicalDisplayUI.html#ab2ff1d6587f3a7fdd1c217f8d43939c2',1,'GraphicalDisplayUI']]], + ['currentpar_31',['currentPar',['../classGraphicalDisplayUI.html#a6d11cdf9dd64f51998691333c398eade',1,'GraphicalDisplayUI']]], + ['currentselection_32',['currentSelection',['../classGraphicalDisplayUI.html#af715277009197361fcfc48995e33f7ff',1,'GraphicalDisplayUI']]], + ['currentspprofile_33',['currentSPProfile',['../classGraphicalDisplayUI.html#ae43fcaf3c2bcf534553cac7aad76ac37',1,'GraphicalDisplayUI']]], + ['currenttab_34',['currentTab',['../classGraphicalDisplayUI.html#a9923b8c1e5347d97de32f6eba5affec9',1,'GraphicalDisplayUI']]], + ['cv_35',['cv',['../classController.html#aabe82f70dad1da06669d57616f08fbc1',1,'Controller::cv'],['../classPID.html#a04b6efec6a104611f59dbbe2d90826e2',1,'PID::cv']]], + ['cvmax_36',['cvMax',['../classPID.html#a9b7414bf88b134e31199b041954720a4',1,'PID']]], + ['cvmin_37',['cvMin',['../classPID.html#ad35190486e64101d3643f5d504be525a',1,'PID']]] +]; diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..73e5c93 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['d_0',['d',['../structConfigPar_1_1Var.html#a4bfbf40f70f7e0e0d90f1db203abb88c',1,'ConfigPar::Var::d'],['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96a8277e0910d750195b448797616e091ad',1,'ConfigPar::d']]], + ['defaultconfigstore_1',['defaultConfigStore',['../EEPROMConfig_8h.html#ae38c45f16a5034202cd080e6ca4760a9',1,'EEPROMConfig.h']]], + ['dht_2',['dht',['../classDHTHumiditySensor.html#a5bccc6e4e21824cf2c37bdbb23507280',1,'DHTHumiditySensor']]], + ['dhthumiditysensor_3',['DHTHumiditySensor',['../classDHTHumiditySensor.html',1,'DHTHumiditySensor'],['../classDHTHumiditySensor.html#a674bbed48b7526897e578557c203ccd0',1,'DHTHumiditySensor::DHTHumiditySensor()']]], + ['dhthumiditysensor_2ecpp_4',['DHTHumiditySensor.cpp',['../DHTHumiditySensor_8cpp.html',1,'']]], + ['dhthumiditysensor_2eh_5',['DHTHumiditySensor.h',['../DHTHumiditySensor_8h.html',1,'']]], + ['display_6',['display',['../classControllerUI.html#a177e261dc869404d798a6f1c7d6f688c',1,'ControllerUI']]], + ['down_7',['DOWN',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034ac4e0e4e3118472beeb2ae75827450f1f',1,'Buttons.h']]], + ['draw_8',['draw',['../classCharDisplayUI.html#aef739ad8856b975fdd25ffdf9fa86601',1,'CharDisplayUI::draw()'],['../classControllerUI.html#ad4f4f22b7282e9aacf04f7847f543f04',1,'ControllerUI::draw()'],['../classGraphicalDisplayUI.html#aa73a9c30736b609bcef2b75c7aed1970',1,'GraphicalDisplayUI::draw() override']]], + ['drawconfig_9',['drawConfig',['../classGraphicalDisplayUI.html#aa1797798b407f534ccaddf6304ce1a7d',1,'GraphicalDisplayUI']]], + ['drawinfo_10',['drawInfo',['../classCharDisplayUI.html#ae63b61a0868ed1e42d48567a0621a13a',1,'CharDisplayUI::drawInfo()'],['../classControllerUI.html#acb114d7cbe1d691028fa3d349728c91e',1,'ControllerUI::drawInfo()'],['../classGraphicalDisplayUI.html#abbdc687a1a27167309340e9caa81eda5',1,'GraphicalDisplayUI::drawInfo() override']]], + ['drawmain_11',['drawMain',['../classGraphicalDisplayUI.html#a1c6ba21cf53a2ec496723904101fb05c',1,'GraphicalDisplayUI::drawMain()'],['../classGraphicalDisplayUI.html#a3bb8b1b254ff8ed7af679a72b1c2e5ac',1,'GraphicalDisplayUI::drawMain()'],['../classGraphicalDisplayUI.html#a3a5b689c690f167afb4e0ff4c5973ab4',1,'GraphicalDisplayUI::drawMain()']]], + ['drawmaincommon_12',['DrawMainCommon',['../classGraphicalDisplayUI.html#af69808890fcfb2bd088ac73aa6f7563c',1,'GraphicalDisplayUI']]], + ['drawsplash_13',['drawSplash',['../classCharDisplayUI.html#a4e7ae804daf5ee3ee96f61e717dfcd13',1,'CharDisplayUI::drawSplash()'],['../classControllerUI.html#a79527907045a0ac131fb7e1044c4eca4',1,'ControllerUI::drawSplash()'],['../classGraphicalDisplayUI.html#aae6489707bbdc171057692effb3d7081',1,'GraphicalDisplayUI::drawSplash() override']]], + ['drawtabbar_14',['drawTabBar',['../classGraphicalDisplayUI.html#a85c871a16eaa3b27f170305ae0eb8ea1',1,'GraphicalDisplayUI']]], + ['drawtabinfo_15',['drawTabInfo',['../classGraphicalDisplayUI.html#a41ae47f8e4d0bd909b6d2be9765cdbc4',1,'GraphicalDisplayUI']]], + ['dt_16',['dt',['../classPID.html#ab142c5c4854b2f52d21f5f935aaf7e92',1,'PID::dt'],['../structConfigStore.html#af92ecc9715773d50948aac6cf5aa46fb',1,'ConfigStore::dt'],['../namespaceconfig.html#a3ec0299a5eb318a3c6045f7f08a8e61f',1,'config::dt']]], + ['dterm_17',['dTerm',['../classPID.html#a7c3316e239a4c5983a75d65db59b4d0b',1,'PID']]] +]; diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..6cf1ed5 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['eepromaddress_0',['EEPROMAddress',['../namespaceconfig.html#a37ae42be9e0e824df24c701e66404910',1,'config']]], + ['eepromconfig_1',['EEPROMConfig',['../classEEPROMConfig.html',1,'EEPROMConfig'],['../classEEPROMConfig.html#af870a201def01a3ac797f240a8e96188',1,'EEPROMConfig::EEPROMConfig()']]], + ['eepromconfig_2',['eepromConfig',['../classGraphicalDisplayUI.html#a90ea3cc65ce081ff1b2b37f6ac9e04ee',1,'GraphicalDisplayUI::eepromConfig'],['../main_8cpp.html#aef36b79588441852b2f26b72d7f0f8d7',1,'eepromConfig: main.cpp']]], + ['eepromconfig_2ecpp_3',['EEPROMConfig.cpp',['../EEPROMConfig_8cpp.html',1,'']]], + ['eepromconfig_2eh_4',['EEPROMConfig.h',['../EEPROMConfig_8h.html',1,'']]] +]; diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..c311036 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['fc_5fdt_0',['FC_dt',['../structConfigStore.html#a7722c2f75b9bb715bce04df085ae1400',1,'ConfigStore::FC_dt'],['../namespaceconfig.html#a4289d73bfff6169ecdad5da87d709fbe',1,'config::FC_dt']]], + ['fc_5fkd_1',['FC_Kd',['../structConfigStore.html#a67b522f7cb2abd2cebc8ce1d067ff6fd',1,'ConfigStore::FC_Kd'],['../namespaceconfig.html#a6eeb27a3b017e6f6318a5db9dd1f3e31',1,'config::FC_Kd']]], + ['fc_5fkf_2',['FC_Kf',['../structConfigStore.html#aabbc9c8133b8371b52bf1293604af2c8',1,'ConfigStore::FC_Kf'],['../namespaceconfig.html#a3cb43341feacf60c4def05461696e643',1,'config::FC_Kf']]], + ['fc_5fki_3',['FC_Ki',['../structConfigStore.html#afc63e359908776d68da59c717451cfaa',1,'ConfigStore::FC_Ki'],['../namespaceconfig.html#af7a206a5815237178ba961751b7b1a15',1,'config::FC_Ki']]], + ['fc_5fkp_4',['FC_Kp',['../structConfigStore.html#adac97fc9791f9b2cdfdb43a5b7b4ce69',1,'ConfigStore::FC_Kp'],['../namespaceconfig.html#ac5d63000cecbeb4775ae0bfa2c79099e',1,'config::FC_Kp']]], + ['fcs_5',['fcs',['../classCascadeHumidistat.html#acf6b5ee72f4a9ed3b14438ba4452c6ca',1,'CascadeHumidistat']]], + ['flowcontroller_6',['FlowController',['../classFlowController.html',1,'FlowController'],['../classFlowController.html#a9b73926698854665b106b25b1aeceb4c',1,'FlowController::FlowController()']]], + ['flowcontroller_2ecpp_7',['FlowController.cpp',['../FlowController_8cpp.html',1,'']]], + ['flowcontroller_2eh_8',['FlowController.h',['../FlowController_8h.html',1,'']]], + ['flowsensor_9',['FlowSensor',['../classFlowSensor.html',1,'FlowSensor'],['../classFlowSensor.html#a9dbf60ea4661fb10c01916e604d2e79a',1,'FlowSensor::FlowSensor()']]], + ['flowsensor_2ecpp_10',['FlowSensor.cpp',['../FlowSensor_8cpp.html',1,'']]], + ['flowsensor_2eh_11',['FlowSensor.h',['../FlowSensor_8h.html',1,'']]], + ['frame_12',['frame',['../classGraphicalDisplayUI.html#ae439cedf8ccb67f32aa277bbdd9e9510',1,'GraphicalDisplayUI']]], + ['fs_13',['fs',['../classFlowController.html#a897b25ddd823a6019955a3787ec94a0e',1,'FlowController']]], + ['fterm_14',['fTerm',['../classPID.html#af702fc5420c1ffba6f0dd3d8caccd2b4',1,'PID']]] +]; diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..a62d349 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['getconfigstore_0',['getConfigStore',['../classController.html#a097a40310e7beb937f7cdcabb2246877',1,'Controller']]], + ['getcurrentpoint_1',['getCurrentPoint',['../classSetpointProfileRunner.html#a8806af9c619d794383b477693485858b',1,'SetpointProfileRunner']]], + ['getcvmax_2',['getCvMax',['../classHumidistat.html#a4bf25f4c2465e52423379ff99aae2960',1,'Humidistat']]], + ['getcvmin_3',['getCvMin',['../classHumidistat.html#a14b5fa1effc029cfb6afc43de5a44712',1,'Humidistat']]], + ['gethumidity_4',['getHumidity',['../classHumidistat.html#a12c137dcc4218eabce1c78b328bc48b0',1,'Humidistat::getHumidity()'],['../classDHTHumiditySensor.html#a0a3cbf12af517882be5661014bd92e7b',1,'DHTHumiditySensor::getHumidity()'],['../classSHTHumiditySensor.html#abe46e9f9311a24954fad0d3f164b8df4',1,'SHTHumiditySensor::getHumidity()']]], + ['getinner_5',['getInner',['../classCascadeHumidistat.html#a43b2ec8732d8204ea3ac6b41001deaa9',1,'CascadeHumidistat']]], + ['getpressedfor_6',['getPressedFor',['../classButtonReader.html#a2e169071482d9544ae92156fc5c0d087',1,'ButtonReader']]], + ['gettemperature_7',['getTemperature',['../classHumidistat.html#add5923a18abdee988d59e3411d12ba04',1,'Humidistat::getTemperature()'],['../classDHTHumiditySensor.html#a0dc4854afba7cff9a8145afc2cc68c81',1,'DHTHumiditySensor::getTemperature()'],['../classSHTHumiditySensor.html#a926804010b705e62908d0c91273944d6',1,'SHTHumiditySensor::getTemperature()']]], + ['getterms_8',['getTerms',['../classController.html#ab5192313a391930820531bf265700887',1,'Controller']]], + ['getthermistorresistance_9',['getThermistorResistance',['../classThermistorReader.html#a0670b7affeba1f06311c917b0d2fe6f4',1,'ThermistorReader']]], + ['graphicaldisplayui_10',['GraphicalDisplayUI',['../classGraphicalDisplayUI.html',1,'GraphicalDisplayUI< Humidistat_t >'],['../classGraphicalDisplayUI.html#a14488d9aa73089c9b4529babe077a2a9',1,'GraphicalDisplayUI::GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)'],['../classGraphicalDisplayUI.html#a5a2e08fb0a787befcd52984ed0948d71',1,'GraphicalDisplayUI::GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, CascadeHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)']]], + ['graphicaldisplayui_2eh_11',['GraphicalDisplayUI.h',['../GraphicalDisplayUI_8h.html',1,'']]] +]; diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..73e8021 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['h_0',['h',['../classSHTHumiditySensor.html#a5fdec69b16d437af66152c881c3d23f0',1,'SHTHumiditySensor']]], + ['handleinput_1',['handleInput',['../classCharDisplayUI.html#a4fef4976bbeb2197ab3d8bcedc25c2dc',1,'CharDisplayUI::handleInput()'],['../classControllerUI.html#ab101f4fc3a16ccdac7fb80e3af1a22ac',1,'ControllerUI::handleInput()'],['../classGraphicalDisplayUI.html#a3e340b5f072ed6a4251069f4a408e4b0',1,'GraphicalDisplayUI::handleInput(Buttons state, uint16_t pressedFor) override']]], + ['handleinputconfig_2',['handleInputConfig',['../classGraphicalDisplayUI.html#a17cd12ba983e77b6f766bac994b09f49',1,'GraphicalDisplayUI']]], + ['handleinputinfo_3',['handleInputInfo',['../classGraphicalDisplayUI.html#a8f0f20c1ddf3b647f42ed92492fc959c',1,'GraphicalDisplayUI']]], + ['handleinputmain_4',['handleInputMain',['../classGraphicalDisplayUI.html#a948cf32243a585b1a88c0989efd9d474',1,'GraphicalDisplayUI']]], + ['hc_5fkd_5',['HC_Kd',['../structConfigStore.html#aa513fa31d61ae573fb6082e8a0141e89',1,'ConfigStore::HC_Kd'],['../namespaceconfig.html#a5bd0f455875ca9cb0134379be2ed8580',1,'config::HC_Kd']]], + ['hc_5fkf_6',['HC_Kf',['../structConfigStore.html#ab2f012d152cdeaacc299370e40464a01',1,'ConfigStore::HC_Kf'],['../namespaceconfig.html#a427424d63e7aae495cb45a14afafc6c6',1,'config::HC_Kf']]], + ['hc_5fki_7',['HC_Ki',['../structConfigStore.html#a325c2de9c2d46ddf739a873d504958ce',1,'ConfigStore::HC_Ki'],['../namespaceconfig.html#a5d6409304d96ffa0f508f75546c3275a',1,'config::HC_Ki']]], + ['hc_5fkp_8',['HC_Kp',['../structConfigStore.html#aaf9fe757d62c9875a0a00c4046c5e645',1,'ConfigStore::HC_Kp'],['../namespaceconfig.html#a6c3ad86dbaffb21b8772d6e43fa311fb',1,'config::HC_Kp']]], + ['hc_5ftotalflowrate_9',['HC_totalFlowrate',['../structConfigStore.html#a98f79ec24949ba7c9ad366f42041c9ab',1,'ConfigStore::HC_totalFlowrate'],['../namespaceconfig.html#a7b7632d6da3b6cfc42483203b077876e',1,'config::HC_totalFlowrate']]], + ['header_10',['header',['../classSerialLogger.html#a6675ab020b655f85c80200b8b0bc7344',1,'SerialLogger::header'],['../classSerialLogger.html#af692abf860fcae4f90adf812326ee769',1,'SerialLogger::header[]'],['../classSerialLogger.html#ab42b8168047db63bda010a9d5e5fe8fb',1,'SerialLogger::header[]']]], + ['hs_11',['hs',['../classHumidistat.html#aea5e648f567fdb2e15b64c1a575aca6c',1,'Humidistat']]], + ['humidistat_12',['Humidistat',['../classHumidistat.html',1,'Humidistat'],['../classHumidistat.html#a3f8890823bcf559d2698d058efaebf27',1,'Humidistat::Humidistat()']]], + ['humidistat_13',['humidistat',['../classSerialLogger.html#aa5b4f636f15572e24878259174b51f1a',1,'SerialLogger::humidistat'],['../classSetpointProfileRunner.html#a2e9ed471d72a3577a3eea3f12e1fe368',1,'SetpointProfileRunner::humidistat'],['../classCharDisplayUI.html#afa54a928a5781df3f60a854195a6d7e1',1,'CharDisplayUI::humidistat'],['../classGraphicalDisplayUI.html#a35f22a63b9e44359c0d85e705bf2e176',1,'GraphicalDisplayUI::humidistat'],['../main_8cpp.html#a924a4561b9bbe52ee54465768829a23d',1,'humidistat: main.cpp']]], + ['humidistat_2ecpp_14',['Humidistat.cpp',['../Humidistat_8cpp.html',1,'']]], + ['humidistat_2eh_15',['Humidistat.h',['../Humidistat_8h.html',1,'']]] +]; diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..5e56249 --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['ilog10_0',['ilog10',['../imath_8h.html#a1b826c7311037e4e89052d8f5d59afe6',1,'imath.h']]], + ['imath_2eh_1',['imath.h',['../imath_8h.html',1,'']]], + ['inauto_2',['inAuto',['../classPID.html#ab23e7d74b5f147c7e4bd7a9c2cdf0b52',1,'PID']]], + ['info_3',['info',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8acaf9b6b99962bf5c2264824231d7a40c',1,'GraphicalDisplayUI']]], + ['infodrawn_4',['infoDrawn',['../classControllerUI.html#aeebcc0fa5ec0f2b66b01998056b0f6ee',1,'ControllerUI']]], + ['infoduration_5',['infoDuration',['../classControllerUI.html#a96a4191e26241182ffc01df2dc11710c',1,'ControllerUI::infoDuration'],['../namespaceconfig.html#a914e73b53167ff24ac7b5eddc8dca459',1,'config::infoDuration']]], + ['init_6',['init',['../classPID.html#a0ccd3a3e6e64a2560077ea76bf71e417',1,'PID']]], + ['inputinterval_7',['inputInterval',['../classControllerUI.html#a71927809cdf71c2fecfe560519e017a8',1,'ControllerUI::inputInterval'],['../namespaceconfig.html#afb59421e98aca5f4b48d2f4b885416fa',1,'config::inputInterval']]], + ['integral_8',['integral',['../classPID.html#a7792de52992d0c0362f12df93a7abb28',1,'PID']]], + ['interval_9',['interval',['../classSerialLogger.html#ad9d67933341260c9184d709531714561',1,'SerialLogger::interval'],['../namespaceconfig.html#af59ae3897790505c6002f787d7b6ebdc',1,'config::interval']]], + ['ipow_10',['ipow',['../imath_8h.html#aa86632c19b4d57acb96ac9e9cd3e13e1',1,'imath.h']]], + ['ispressed_11',['isPressed',['../classButtonReader.html#a3ced9ddb05791cb1b9d29175f39d91fd',1,'ButtonReader']]], + ['isrunning_12',['isRunning',['../classSetpointProfileRunner.html#a346e9b34c7c2e23b46bc51446ddd1947',1,'SetpointProfileRunner']]], + ['iterm_13',['iTerm',['../classPID.html#a697801bbe20f01695246aad75aa5a205',1,'PID']]] +]; diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..e71e3af --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['kd_0',['Kd',['../classPID.html#ae5dabe1953dd6c4aa28e5cb03f71b9e3',1,'PID']]], + ['kf_1',['Kf',['../classPID.html#a1cc61882053e1946cd8211495543fdeb',1,'PID']]], + ['ki_2',['Ki',['../classPID.html#a78d1833549e5c05ca4e94d07129ac4e7',1,'PID']]], + ['kp_3',['Kp',['../classPID.html#a482d124af49dcabfa1d9542066ead626',1,'PID']]], + ['ks0256voltladder_4',['Ks0256VoltLadder',['../classKs0256VoltLadder.html',1,'']]], + ['ks0256voltladder_2ecpp_5',['Ks0256VoltLadder.cpp',['../Ks0256VoltLadder_8cpp.html',1,'']]], + ['ks0256voltladder_2eh_6',['Ks0256VoltLadder.h',['../Ks0256VoltLadder_8h.html',1,'']]], + ['ks0466voltladder_7',['Ks0466VoltLadder',['../classKs0466VoltLadder.html',1,'']]], + ['ks0466voltladder_2ecpp_8',['Ks0466VoltLadder.cpp',['../Ks0466VoltLadder_8cpp.html',1,'']]], + ['ks0466voltladder_2eh_9',['Ks0466VoltLadder.h',['../Ks0466VoltLadder_8h.html',1,'']]] +]; diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..1904210 --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['label_0',['label',['../structSPProfile.html#a3940eb64b9df758a3e3f21a300ebf768',1,'SPProfile::label'],['../classConfigPar.html#ae1d7fe751a2649604e35bc2853859e87',1,'ConfigPar::label']]], + ['lastdpv_1',['lastDPV',['../classPID.html#a9a1655ddef1bd2e530e332de419a9500',1,'PID']]], + ['laste_2',['lastE',['../classPID.html#a4c18ef8aca833bc546ea32d5f17090ba',1,'PID']]], + ['lastpressed_3',['lastPressed',['../classControllerUI.html#ae4f9f38425d216647f2e5810452c49f1',1,'ControllerUI']]], + ['lastpv_4',['lastPv',['../classPID.html#a91c30112ee14980270c99d5938efdf58',1,'PID']]], + ['lastrefreshed_5',['lastRefreshed',['../classControllerUI.html#a5d4288a2902e132b1b6010c0666fad95',1,'ControllerUI']]], + ['laststate_6',['lastState',['../classButtonReader.html#aed2de00bad4bb57ec073b99532bb660b',1,'ButtonReader']]], + ['lasttime_7',['lastTime',['../classSerialLogger.html#aba0e388e124ce116cb6d66b749bfc80f',1,'SerialLogger']]], + ['left_8',['LEFT',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a684d325a7303f52e64011467ff5c5758',1,'Buttons.h']]], + ['liquidcrystal_9',['liquidCrystal',['../classCharDisplayUI.html#a18c98eb62bbe05dca9e163a65d75769b',1,'CharDisplayUI']]], + ['load_10',['load',['../classEEPROMConfig.html#a88ca7504a4c1d8ed44e3c37ed2764ba3',1,'EEPROMConfig']]], + ['loadedfromeeprom_11',['loadedFromEEPROM',['../structConfigStore.html#ac4104564325caf7989d736da4ad26972',1,'ConfigStore']]], + ['log_12',['log',['../classSerialLogger.html#a1ea6568a47741b504452e921382ef04e',1,'SerialLogger::log()'],['../classSerialLogger.html#a19892d82447f8504faf4ddace7a56877',1,'SerialLogger::log()'],['../classSerialLogger.html#a4951b602e6c18f7f2a6a13e9ca3a111a',1,'SerialLogger::log()']]], + ['longpressduration_13',['longPressDuration',['../classGraphicalDisplayUI.html#a32058d1aa48eba3465cd69a37cf1aaa7',1,'GraphicalDisplayUI::longPressDuration'],['../namespaceconfig.html#a5e2a3a9098245e7373a123dea0517ada',1,'config::longPressDuration']]], + ['loop_14',['loop',['../main_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'main.cpp']]] +]; diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000..67dd51d --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['magnitude_0',['magnitude',['../classConfigPar.html#a099b55d3836247dc0ebbe2609d3809cd',1,'ConfigPar']]], + ['main_1',['main',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8afad58de7366495db4650cfefac2fcd61',1,'GraphicalDisplayUI']]], + ['main_2ecpp_2',['main.cpp',['../main_8cpp.html',1,'']]] +]; diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000..a8a49ec --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['nconfigpars_0',['nConfigPars',['../classGraphicalDisplayUI.html#a5f9366e2fd469d786226cd5906cd2d03',1,'GraphicalDisplayUI']]], + ['new_2ecpp_1',['new.cpp',['../new_8cpp.html',1,'']]], + ['none_2',['NONE',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034ab50339a10e1de285ac99d4c3990b8693',1,'Buttons.h']]], + ['num_5fdecimals_3',['NUM_DECIMALS',['../ConfigPar_8h.html#ab105e459be047d1c57e048a2ce0820ac',1,'ConfigPar.h']]], + ['num_5fdigits_4',['NUM_DIGITS',['../ConfigPar_8h.html#a0b79fa1bdb1363440df485691386a74c',1,'ConfigPar.h']]], + ['number_5',['number',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66cab1bc248a7ff2b2e95569f56de68615df',1,'GraphicalDisplayUI']]] +]; diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000..fcf4025 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['overrideeeprom_0',['overrideEEPROM',['../namespaceconfig.html#a7645bcfa797e1e40c3231392194ef388',1,'config']]] +]; diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000..5aba896 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['par_0',['par',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66cad018268506e2868537a478629b59e7c1',1,'GraphicalDisplayUI']]], + ['pid_1',['PID',['../classPID.html',1,'PID'],['../classPID.html#a5cc06605b7c3778f132838314136f292',1,'PID::PID()']]], + ['pid_2',['pid',['../classController.html#a9e1a527079b696a527331435cc89106f',1,'Controller']]], + ['pid_2ecpp_3',['PID.cpp',['../PID_8cpp.html',1,'']]], + ['pid_2eh_4',['PID.h',['../PID_8h.html',1,'']]], + ['pin_5',['pin',['../classFlowSensor.html#a7a85d59fc135a3eaa46b33d09e1e828c',1,'FlowSensor::pin'],['../classThermistorReader.html#a87837bcbc9afb3f53dbc21f00b3dc128',1,'ThermistorReader::pin']]], + ['pin_5fbtn_6',['pin_btn',['../classButtonReader.html#a25f7ebb6a86ac2fe7036ea41a63fccb9',1,'ButtonReader']]], + ['pins_5fsolenoid_7',['pins_solenoid',['../classSingleHumidistat.html#af43d7a513d8a467f7360caedb93378b5',1,'SingleHumidistat']]], + ['point_8',['Point',['../structPoint.html',1,'']]], + ['point_2eh_9',['Point.h',['../Point_8h.html',1,'']]], + ['pressedsince_10',['pressedSince',['../classButtonReader.html#a86de0ab4d47231844c86c7ce38a4bea2',1,'ButtonReader']]], + ['printf_11',['printf',['../classControllerUI.html#aa14a64631f7993d6e22ac9e6f5bf4b44',1,'ControllerUI']]], + ['printntc_12',['printNTC',['../classControllerUI.html#abfabf4c49c12dcb8ee5e8b5a899cc920',1,'ControllerUI']]], + ['profile_13',['profile',['../structSPProfile.html#ae9e6f484e6a7345987cae483293de21e',1,'SPProfile::profile'],['../classSetpointProfileRunner.html#af9d89b4b7b869aa70fae6e1cf635d988',1,'SetpointProfileRunner::profile']]], + ['profile_5ftuningtest_14',['profile_tuningtest',['../namespaceconfig.html#aa72cd1d2d5a5497d8adac4a71a39c5ac',1,'config']]], + ['profiles_15',['profiles',['../namespaceconfig.html#a6e3be61e05a469505fd17cd61bcd7f51',1,'config']]], + ['pterm_16',['pTerm',['../classPID.html#af931212cc8de18013248e364ee7f6e26',1,'PID']]], + ['pv_17',['pv',['../classController.html#a44f6461d98584eef29ae71383dda0c10',1,'Controller::pv'],['../classPID.html#ae27acb223f8ce894a6d0ecda4914ded0',1,'PID::pv']]], + ['pwmres_18',['pwmRes',['../classFlowController.html#a3fb3606bf4cd3df8a65291a347e33179',1,'FlowController::pwmRes'],['../classSingleHumidistat.html#a93abacea3cc14849656431d1c67a44d7',1,'SingleHumidistat::pwmRes'],['../main_8cpp.html#a41f053b1299d339ad57156f85bb53d19',1,'pwmRes: main.cpp']]] +]; diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..13b959f --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buttonreader_0',['ButtonReader',['../classButtonReader.html',1,'']]] +]; diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..183b483 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cascadehumidistat_0',['CascadeHumidistat',['../classCascadeHumidistat.html',1,'']]], + ['chardisplayui_1',['CharDisplayUI',['../classCharDisplayUI.html',1,'']]], + ['configpar_2',['ConfigPar',['../classConfigPar.html',1,'']]], + ['configstore_3',['ConfigStore',['../structConfigStore.html',1,'']]], + ['controller_4',['Controller',['../classController.html',1,'']]], + ['controllerui_5',['ControllerUI',['../classControllerUI.html',1,'']]] +]; diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..eae32d3 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dhthumiditysensor_0',['DHTHumiditySensor',['../classDHTHumiditySensor.html',1,'']]] +]; diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000..7d28cc6 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eepromconfig_0',['EEPROMConfig',['../classEEPROMConfig.html',1,'']]] +]; diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 0000000..9876ae3 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flowcontroller_0',['FlowController',['../classFlowController.html',1,'']]], + ['flowsensor_1',['FlowSensor',['../classFlowSensor.html',1,'']]] +]; diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 0000000..f39ca1a --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['graphicaldisplayui_0',['GraphicalDisplayUI',['../classGraphicalDisplayUI.html',1,'']]] +]; diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 0000000..d37efe7 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['humidistat_0',['Humidistat',['../classHumidistat.html',1,'']]] +]; diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 0000000..75d6b86 --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ks0256voltladder_0',['Ks0256VoltLadder',['../classKs0256VoltLadder.html',1,'']]], + ['ks0466voltladder_1',['Ks0466VoltLadder',['../classKs0466VoltLadder.html',1,'']]] +]; diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 0000000..32488bc --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['pid_0',['PID',['../classPID.html',1,'']]], + ['point_1',['Point',['../structPoint.html',1,'']]] +]; diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 0000000..0cc5b3f --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['seriallogger_0',['SerialLogger',['../classSerialLogger.html',1,'']]], + ['setpointprofilerunner_1',['SetpointProfileRunner',['../classSetpointProfileRunner.html',1,'']]], + ['shthumiditysensor_2',['SHTHumiditySensor',['../classSHTHumiditySensor.html',1,'']]], + ['singlehumidistat_3',['SingleHumidistat',['../classSingleHumidistat.html',1,'']]], + ['spprofile_4',['SPProfile',['../structSPProfile.html',1,'']]] +]; diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 0000000..92d0cc6 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['thermistorreader_0',['ThermistorReader',['../classThermistorReader.html',1,'']]] +]; diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 0000000..908e411 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['var_0',['Var',['../structConfigPar_1_1Var.html',1,'ConfigPar']]] +]; diff --git a/search/close.svg b/search/close.svg new file mode 100644 index 0000000..337d6cc --- /dev/null +++ b/search/close.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/search/defines_0.js b/search/defines_0.js new file mode 100644 index 0000000..c2fd038 --- /dev/null +++ b/search/defines_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['num_5fdecimals_0',['NUM_DECIMALS',['../ConfigPar_8h.html#ab105e459be047d1c57e048a2ce0820ac',1,'ConfigPar.h']]], + ['num_5fdigits_1',['NUM_DIGITS',['../ConfigPar_8h.html#a0b79fa1bdb1363440df485691386a74c',1,'ConfigPar.h']]] +]; diff --git a/search/defines_1.js b/search/defines_1.js new file mode 100644 index 0000000..d1c6779 --- /dev/null +++ b/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['str_0',['STR',['../ConfigPar_8h.html#a6388870e639eee9c0a69446876f1f8cc',1,'ConfigPar.h']]] +]; diff --git a/search/defines_2.js b/search/defines_2.js new file mode 100644 index 0000000..99815b8 --- /dev/null +++ b/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['width_0',['WIDTH',['../ConfigPar_8h.html#a241aeeb764887ae5e3de58b98f04b16d',1,'ConfigPar.h']]] +]; diff --git a/search/defines_3.js b/search/defines_3.js new file mode 100644 index 0000000..6b97927 --- /dev/null +++ b/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['xstr_0',['XSTR',['../ConfigPar_8h.html#a03943706e48069237cd57f2d35ca987e',1,'ConfigPar.h']]] +]; diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 0000000..d9bac02 --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['action_0',['Action',['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199d',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 0000000..9485d39 --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['buttons_0',['Buttons',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034',1,'Buttons.h']]] +]; diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 0000000..9efc5a3 --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['configpartype_0',['ConfigParType',['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96',1,'ConfigPar']]] +]; diff --git a/search/enums_3.js b/search/enums_3.js new file mode 100644 index 0000000..5d2e866 --- /dev/null +++ b/search/enums_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['selection_0',['Selection',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66c',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enums_4.js b/search/enums_4.js new file mode 100644 index 0000000..d2049f2 --- /dev/null +++ b/search/enums_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['tab_0',['Tab',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 0000000..994cdbe --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5flast_0',['_last',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8ad07362c156b2478a01d62dad95e24f14',1,'GraphicalDisplayUI::_last'],['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199dad07362c156b2478a01d62dad95e24f14',1,'GraphicalDisplayUI::_last']]] +]; diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 0000000..37c141c --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['actions_0',['actions',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66caebb67a4271abe715344471b0f16321f6',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 0000000..289e767 --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['config_0',['config',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8a2245023265ae4cf87d02c8b6ba991139',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 0000000..54ff170 --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['d_0',['d',['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96a8277e0910d750195b448797616e091ad',1,'ConfigPar']]], + ['down_1',['DOWN',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034ac4e0e4e3118472beeb2ae75827450f1f',1,'Buttons.h']]] +]; diff --git a/search/enumvalues_4.js b/search/enumvalues_4.js new file mode 100644 index 0000000..edc5ca7 --- /dev/null +++ b/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['info_0',['info',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8acaf9b6b99962bf5c2264824231d7a40c',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_5.js b/search/enumvalues_5.js new file mode 100644 index 0000000..e35e460 --- /dev/null +++ b/search/enumvalues_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['left_0',['LEFT',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a684d325a7303f52e64011467ff5c5758',1,'Buttons.h']]] +]; diff --git a/search/enumvalues_6.js b/search/enumvalues_6.js new file mode 100644 index 0000000..2e91e7c --- /dev/null +++ b/search/enumvalues_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_0',['main',['../classGraphicalDisplayUI.html#a783dac1a176295e0521228c5906afcb8afad58de7366495db4650cfefac2fcd61',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_7.js b/search/enumvalues_7.js new file mode 100644 index 0000000..ccc2dd3 --- /dev/null +++ b/search/enumvalues_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['none_0',['NONE',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034ab50339a10e1de285ac99d4c3990b8693',1,'Buttons.h']]], + ['number_1',['number',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66cab1bc248a7ff2b2e95569f56de68615df',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_8.js b/search/enumvalues_8.js new file mode 100644 index 0000000..9951df0 --- /dev/null +++ b/search/enumvalues_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['par_0',['par',['../classGraphicalDisplayUI.html#a25239e14e02e475fcd4b3c093961a66cad018268506e2868537a478629b59e7c1',1,'GraphicalDisplayUI']]] +]; diff --git a/search/enumvalues_9.js b/search/enumvalues_9.js new file mode 100644 index 0000000..0b0f908 --- /dev/null +++ b/search/enumvalues_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['reset_0',['reset',['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199da86266ee937d97f812a8e57d22b62ee29',1,'GraphicalDisplayUI']]], + ['right_1',['RIGHT',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a21507b40c80068eda19865706fdc2403',1,'Buttons.h']]] +]; diff --git a/search/enumvalues_a.js b/search/enumvalues_a.js new file mode 100644 index 0000000..cfad59e --- /dev/null +++ b/search/enumvalues_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['save_0',['save',['../classGraphicalDisplayUI.html#a0d42c65107b256538f4297652d5c199da43781db5c40ecc39fd718685594f0956',1,'GraphicalDisplayUI']]], + ['select_1',['SELECT',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034a63225f19fccb18e7c709f1fa11bc738e',1,'Buttons.h']]] +]; diff --git a/search/enumvalues_b.js b/search/enumvalues_b.js new file mode 100644 index 0000000..d2ab13e --- /dev/null +++ b/search/enumvalues_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['ui16_0',['ui16',['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96ab60074c2198659a6c7e8f46acb7d4bc1',1,'ConfigPar']]], + ['ui8_1',['ui8',['../classConfigPar.html#ab1cfb1d8540d367cc7eaf36351029b96ab9dbe04bd906ef585047055b88ed6aa9',1,'ConfigPar']]], + ['up_2',['UP',['../Buttons_8h.html#a2200c9a3564da59c1160338587ecb034afbaedde498cdead4f2780217646e9ba1',1,'Buttons.h']]] +]; diff --git a/search/files_0.js b/search/files_0.js new file mode 100644 index 0000000..f27068c --- /dev/null +++ b/search/files_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['advanceenum_2eh_0',['advanceEnum.h',['../advanceEnum_8h.html',1,'']]], + ['aliases_2eh_1',['aliases.h',['../aliases_8h.html',1,'']]], + ['asprintf_2eh_2',['asprintf.h',['../asprintf_8h.html',1,'']]] +]; diff --git a/search/files_1.js b/search/files_1.js new file mode 100644 index 0000000..e15fa17 --- /dev/null +++ b/search/files_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['buttonreader_2ecpp_0',['ButtonReader.cpp',['../ButtonReader_8cpp.html',1,'']]], + ['buttonreader_2eh_1',['ButtonReader.h',['../ButtonReader_8h.html',1,'']]], + ['buttons_2eh_2',['Buttons.h',['../Buttons_8h.html',1,'']]] +]; diff --git a/search/files_2.js b/search/files_2.js new file mode 100644 index 0000000..621e401 --- /dev/null +++ b/search/files_2.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['cascadehumidistat_2ecpp_0',['CascadeHumidistat.cpp',['../CascadeHumidistat_8cpp.html',1,'']]], + ['cascadehumidistat_2eh_1',['CascadeHumidistat.h',['../CascadeHumidistat_8h.html',1,'']]], + ['chardisplayui_2ecpp_2',['CharDisplayUI.cpp',['../CharDisplayUI_8cpp.html',1,'']]], + ['chardisplayui_2eh_3',['CharDisplayUI.h',['../CharDisplayUI_8h.html',1,'']]], + ['config_2eh_4',['config.h',['../config_8h.html',1,'']]], + ['config_5fassert_2eh_5',['config_assert.h',['../config__assert_8h.html',1,'']]], + ['configpar_2ecpp_6',['ConfigPar.cpp',['../ConfigPar_8cpp.html',1,'']]], + ['configpar_2eh_7',['ConfigPar.h',['../ConfigPar_8h.html',1,'']]], + ['controller_2ecpp_8',['Controller.cpp',['../Controller_8cpp.html',1,'']]], + ['controller_2eh_9',['Controller.h',['../Controller_8h.html',1,'']]], + ['controllerui_2ecpp_10',['ControllerUI.cpp',['../ControllerUI_8cpp.html',1,'']]], + ['controllerui_2eh_11',['ControllerUI.h',['../ControllerUI_8h.html',1,'']]] +]; diff --git a/search/files_3.js b/search/files_3.js new file mode 100644 index 0000000..502dbe4 --- /dev/null +++ b/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dhthumiditysensor_2ecpp_0',['DHTHumiditySensor.cpp',['../DHTHumiditySensor_8cpp.html',1,'']]], + ['dhthumiditysensor_2eh_1',['DHTHumiditySensor.h',['../DHTHumiditySensor_8h.html',1,'']]] +]; diff --git a/search/files_4.js b/search/files_4.js new file mode 100644 index 0000000..897a3dd --- /dev/null +++ b/search/files_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['eepromconfig_2ecpp_0',['EEPROMConfig.cpp',['../EEPROMConfig_8cpp.html',1,'']]], + ['eepromconfig_2eh_1',['EEPROMConfig.h',['../EEPROMConfig_8h.html',1,'']]] +]; diff --git a/search/files_5.js b/search/files_5.js new file mode 100644 index 0000000..f48be1e --- /dev/null +++ b/search/files_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['flowcontroller_2ecpp_0',['FlowController.cpp',['../FlowController_8cpp.html',1,'']]], + ['flowcontroller_2eh_1',['FlowController.h',['../FlowController_8h.html',1,'']]], + ['flowsensor_2ecpp_2',['FlowSensor.cpp',['../FlowSensor_8cpp.html',1,'']]], + ['flowsensor_2eh_3',['FlowSensor.h',['../FlowSensor_8h.html',1,'']]] +]; diff --git a/search/files_6.js b/search/files_6.js new file mode 100644 index 0000000..24775e8 --- /dev/null +++ b/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['graphicaldisplayui_2eh_0',['GraphicalDisplayUI.h',['../GraphicalDisplayUI_8h.html',1,'']]] +]; diff --git a/search/files_7.js b/search/files_7.js new file mode 100644 index 0000000..19e3d56 --- /dev/null +++ b/search/files_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['humidistat_2ecpp_0',['Humidistat.cpp',['../Humidistat_8cpp.html',1,'']]], + ['humidistat_2eh_1',['Humidistat.h',['../Humidistat_8h.html',1,'']]] +]; diff --git a/search/files_8.js b/search/files_8.js new file mode 100644 index 0000000..13e8bdf --- /dev/null +++ b/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['imath_2eh_0',['imath.h',['../imath_8h.html',1,'']]] +]; diff --git a/search/files_9.js b/search/files_9.js new file mode 100644 index 0000000..eb64e6d --- /dev/null +++ b/search/files_9.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['ks0256voltladder_2ecpp_0',['Ks0256VoltLadder.cpp',['../Ks0256VoltLadder_8cpp.html',1,'']]], + ['ks0256voltladder_2eh_1',['Ks0256VoltLadder.h',['../Ks0256VoltLadder_8h.html',1,'']]], + ['ks0466voltladder_2ecpp_2',['Ks0466VoltLadder.cpp',['../Ks0466VoltLadder_8cpp.html',1,'']]], + ['ks0466voltladder_2eh_3',['Ks0466VoltLadder.h',['../Ks0466VoltLadder_8h.html',1,'']]] +]; diff --git a/search/files_a.js b/search/files_a.js new file mode 100644 index 0000000..695b4fd --- /dev/null +++ b/search/files_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['main_2ecpp_0',['main.cpp',['../main_8cpp.html',1,'']]] +]; diff --git a/search/files_b.js b/search/files_b.js new file mode 100644 index 0000000..73d9724 --- /dev/null +++ b/search/files_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['new_2ecpp_0',['new.cpp',['../new_8cpp.html',1,'']]] +]; diff --git a/search/files_c.js b/search/files_c.js new file mode 100644 index 0000000..9ae4d16 --- /dev/null +++ b/search/files_c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['pid_2ecpp_0',['PID.cpp',['../PID_8cpp.html',1,'']]], + ['pid_2eh_1',['PID.h',['../PID_8h.html',1,'']]], + ['point_2eh_2',['Point.h',['../Point_8h.html',1,'']]] +]; diff --git a/search/files_d.js b/search/files_d.js new file mode 100644 index 0000000..727122e --- /dev/null +++ b/search/files_d.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['seriallogger_2eh_0',['SerialLogger.h',['../SerialLogger_8h.html',1,'']]], + ['setpointprofilerunner_2ecpp_1',['SetpointProfileRunner.cpp',['../SetpointProfileRunner_8cpp.html',1,'']]], + ['setpointprofilerunner_2eh_2',['SetpointProfileRunner.h',['../SetpointProfileRunner_8h.html',1,'']]], + ['shthumiditysensor_2ecpp_3',['SHTHumiditySensor.cpp',['../SHTHumiditySensor_8cpp.html',1,'']]], + ['shthumiditysensor_2eh_4',['SHTHumiditySensor.h',['../SHTHumiditySensor_8h.html',1,'']]], + ['singlehumidistat_2ecpp_5',['SingleHumidistat.cpp',['../SingleHumidistat_8cpp.html',1,'']]], + ['singlehumidistat_2eh_6',['SingleHumidistat.h',['../SingleHumidistat_8h.html',1,'']]] +]; diff --git a/search/files_e.js b/search/files_e.js new file mode 100644 index 0000000..1ca63a9 --- /dev/null +++ b/search/files_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['thermistorreader_2ecpp_0',['ThermistorReader.cpp',['../ThermistorReader_8cpp.html',1,'']]], + ['thermistorreader_2eh_1',['ThermistorReader.h',['../ThermistorReader_8h.html',1,'']]] +]; diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..4a325a4 --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['adjust_0',['adjust',['../classConfigPar.html#aab5ed0b09b040eba98bc05d76e89c4ca',1,'ConfigPar']]], + ['adjustvalue_1',['adjustValue',['../classControllerUI.html#a227e9eb131da08502bf707ac33bccab3',1,'ControllerUI']]], + ['advanceenum_2',['advanceEnum',['../advanceEnum_8h.html#a4c6cbb4b80fa575a2819ca1d5e7cc1a2',1,'advanceEnum.h']]], + ['asprint_3',['asprint',['../classConfigPar.html#a0bece1a8613c7c8ba8d87e28acf2cb34',1,'ConfigPar']]], + ['asprintf_4',['asprintf',['../asprintf_8h.html#a8e2a40be4816c793857112b1960e912b',1,'asprintf.h']]] +]; diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..42d687a --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['begin_0',['begin',['../classDHTHumiditySensor.html#a6f3c44549a548da9e10d0e9320935132',1,'DHTHumiditySensor::begin()'],['../classSHTHumiditySensor.html#af7637bc2b5b2f4b7d638a526f0eb4533',1,'SHTHumiditySensor::begin()'],['../classSerialLogger.html#a7f48d0c123bae376f761db3b5f23efe9',1,'SerialLogger::begin()'],['../classCharDisplayUI.html#afa5c69d65c9bf645c9569112f542e9d6',1,'CharDisplayUI::begin()'],['../classControllerUI.html#a999978b071e8a4c42751948e3324fb03',1,'ControllerUI::begin()'],['../classGraphicalDisplayUI.html#a8d23dbf1a27faef393f8976e0f0d4532',1,'GraphicalDisplayUI::begin()']]], + ['blink_1',['blink',['../classControllerUI.html#af385bdf29e1075733d91b845fb771506',1,'ControllerUI']]], + ['buttonreader_2',['ButtonReader',['../classButtonReader.html#a4a760bc3e3910b187da66283e43db72a',1,'ButtonReader']]], + ['buttonreader_3',['buttonReader',['../main_8cpp.html#ac663fd9e4235267a3acfb6529a11c50b',1,'main.cpp']]] +]; diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 0000000..ba78907 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['var_0',['Var',['../structConfigPar_1_1Var.html#afab7e72cb763fbaf429cb5ac6ee2ab8d',1,'ConfigPar::Var::Var(uint8_t *par)'],['../structConfigPar_1_1Var.html#a69353bfa22040ecc5f0e9eb848936121',1,'ConfigPar::Var::Var(uint16_t *par)'],['../structConfigPar_1_1Var.html#a43f2a94e6cc162b8e3dae17a6bc78dc4',1,'ConfigPar::Var::Var(double *par)'],['../structConfigPar_1_1Var.html#ad08177ae1a60f8148663707c8585444a',1,'ConfigPar::Var::Var()']]], + ['voltagetobutton_1',['voltageToButton',['../classKs0256VoltLadder.html#a5dfd77e1d57a8ad0ada2629d862df81d',1,'Ks0256VoltLadder::voltageToButton()'],['../classKs0466VoltLadder.html#a620f1eab2fdb7c12cae97c5fa432eb97',1,'Ks0466VoltLadder::voltageToButton()']]] +]; diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..73f5933 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cascadehumidistat_0',['CascadeHumidistat',['../classCascadeHumidistat.html#aba1e29f588bbd230605a0220df3de162',1,'CascadeHumidistat']]], + ['chardisplayui_1',['CharDisplayUI',['../classCharDisplayUI.html#a88d7e9e270bab8d87e52d9f3e08e17dc',1,'CharDisplayUI']]], + ['clear_2',['clear',['../classCharDisplayUI.html#afd179d1f20c0dbab854a2b5e574606d1',1,'CharDisplayUI::clear()'],['../classControllerUI.html#af0365e8a34ddcc4b00985fa0c95a5d65',1,'ControllerUI::clear()'],['../classGraphicalDisplayUI.html#a10119a1a93c9c72e60a5ae309041900d',1,'GraphicalDisplayUI::clear()']]], + ['clip_3',['clip',['../classPID.html#a0e64deb10d189ef873ec4e672a1c79f2',1,'PID']]], + ['compute_4',['compute',['../classPID.html#a742098de1dc845731f9bc86ebf01fb01',1,'PID']]], + ['controller_5',['Controller',['../classController.html#a2cac802179f6b45250a3e6205c6836a6',1,'Controller']]], + ['controllerui_6',['ControllerUI',['../classControllerUI.html#ab48d932cb3b88a93736120e23aaade09',1,'ControllerUI']]] +]; diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..144d95a --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['dhthumiditysensor_0',['DHTHumiditySensor',['../classDHTHumiditySensor.html#a674bbed48b7526897e578557c203ccd0',1,'DHTHumiditySensor']]], + ['draw_1',['draw',['../classCharDisplayUI.html#aef739ad8856b975fdd25ffdf9fa86601',1,'CharDisplayUI::draw()'],['../classControllerUI.html#ad4f4f22b7282e9aacf04f7847f543f04',1,'ControllerUI::draw()'],['../classGraphicalDisplayUI.html#aa73a9c30736b609bcef2b75c7aed1970',1,'GraphicalDisplayUI::draw() override']]], + ['drawconfig_2',['drawConfig',['../classGraphicalDisplayUI.html#aa1797798b407f534ccaddf6304ce1a7d',1,'GraphicalDisplayUI']]], + ['drawinfo_3',['drawInfo',['../classCharDisplayUI.html#ae63b61a0868ed1e42d48567a0621a13a',1,'CharDisplayUI::drawInfo()'],['../classControllerUI.html#acb114d7cbe1d691028fa3d349728c91e',1,'ControllerUI::drawInfo()'],['../classGraphicalDisplayUI.html#abbdc687a1a27167309340e9caa81eda5',1,'GraphicalDisplayUI::drawInfo() override']]], + ['drawmain_4',['drawMain',['../classGraphicalDisplayUI.html#a1c6ba21cf53a2ec496723904101fb05c',1,'GraphicalDisplayUI::drawMain()'],['../classGraphicalDisplayUI.html#a3bb8b1b254ff8ed7af679a72b1c2e5ac',1,'GraphicalDisplayUI::drawMain()'],['../classGraphicalDisplayUI.html#a3a5b689c690f167afb4e0ff4c5973ab4',1,'GraphicalDisplayUI::drawMain()']]], + ['drawmaincommon_5',['DrawMainCommon',['../classGraphicalDisplayUI.html#af69808890fcfb2bd088ac73aa6f7563c',1,'GraphicalDisplayUI']]], + ['drawsplash_6',['drawSplash',['../classCharDisplayUI.html#a4e7ae804daf5ee3ee96f61e717dfcd13',1,'CharDisplayUI::drawSplash()'],['../classControllerUI.html#a79527907045a0ac131fb7e1044c4eca4',1,'ControllerUI::drawSplash()'],['../classGraphicalDisplayUI.html#aae6489707bbdc171057692effb3d7081',1,'GraphicalDisplayUI::drawSplash() override']]], + ['drawtabbar_7',['drawTabBar',['../classGraphicalDisplayUI.html#a85c871a16eaa3b27f170305ae0eb8ea1',1,'GraphicalDisplayUI']]], + ['drawtabinfo_8',['drawTabInfo',['../classGraphicalDisplayUI.html#a41ae47f8e4d0bd909b6d2be9765cdbc4',1,'GraphicalDisplayUI']]] +]; diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..6c26655 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eepromconfig_0',['EEPROMConfig',['../classEEPROMConfig.html#af870a201def01a3ac797f240a8e96188',1,'EEPROMConfig']]] +]; diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..9ca572c --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flowcontroller_0',['FlowController',['../classFlowController.html#a9b73926698854665b106b25b1aeceb4c',1,'FlowController']]], + ['flowsensor_1',['FlowSensor',['../classFlowSensor.html#a9dbf60ea4661fb10c01916e604d2e79a',1,'FlowSensor']]] +]; diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000..d473b8b --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['getconfigstore_0',['getConfigStore',['../classController.html#a097a40310e7beb937f7cdcabb2246877',1,'Controller']]], + ['getcurrentpoint_1',['getCurrentPoint',['../classSetpointProfileRunner.html#a8806af9c619d794383b477693485858b',1,'SetpointProfileRunner']]], + ['getcvmax_2',['getCvMax',['../classHumidistat.html#a4bf25f4c2465e52423379ff99aae2960',1,'Humidistat']]], + ['getcvmin_3',['getCvMin',['../classHumidistat.html#a14b5fa1effc029cfb6afc43de5a44712',1,'Humidistat']]], + ['gethumidity_4',['getHumidity',['../classHumidistat.html#a12c137dcc4218eabce1c78b328bc48b0',1,'Humidistat::getHumidity()'],['../classDHTHumiditySensor.html#a0a3cbf12af517882be5661014bd92e7b',1,'DHTHumiditySensor::getHumidity()'],['../classSHTHumiditySensor.html#abe46e9f9311a24954fad0d3f164b8df4',1,'SHTHumiditySensor::getHumidity()']]], + ['getinner_5',['getInner',['../classCascadeHumidistat.html#a43b2ec8732d8204ea3ac6b41001deaa9',1,'CascadeHumidistat']]], + ['getpressedfor_6',['getPressedFor',['../classButtonReader.html#a2e169071482d9544ae92156fc5c0d087',1,'ButtonReader']]], + ['gettemperature_7',['getTemperature',['../classHumidistat.html#add5923a18abdee988d59e3411d12ba04',1,'Humidistat::getTemperature()'],['../classDHTHumiditySensor.html#a0dc4854afba7cff9a8145afc2cc68c81',1,'DHTHumiditySensor::getTemperature()'],['../classSHTHumiditySensor.html#a926804010b705e62908d0c91273944d6',1,'SHTHumiditySensor::getTemperature()']]], + ['getterms_8',['getTerms',['../classController.html#ab5192313a391930820531bf265700887',1,'Controller']]], + ['getthermistorresistance_9',['getThermistorResistance',['../classThermistorReader.html#a0670b7affeba1f06311c917b0d2fe6f4',1,'ThermistorReader']]], + ['graphicaldisplayui_10',['GraphicalDisplayUI',['../classGraphicalDisplayUI.html#a14488d9aa73089c9b4529babe077a2a9',1,'GraphicalDisplayUI::GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, SingleHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)'],['../classGraphicalDisplayUI.html#a5a2e08fb0a787befcd52984ed0948d71',1,'GraphicalDisplayUI::GraphicalDisplayUI(U8G2 *u8g2, const ButtonReader *buttonReader, CascadeHumidistat *humidistat, etl::span< const ThermistorReader, 4 > trs, EEPROMConfig *eepromConfig, SetpointProfileRunner *spr)']]] +]; diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 0000000..d786220 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['handleinput_0',['handleInput',['../classCharDisplayUI.html#a4fef4976bbeb2197ab3d8bcedc25c2dc',1,'CharDisplayUI::handleInput()'],['../classControllerUI.html#ab101f4fc3a16ccdac7fb80e3af1a22ac',1,'ControllerUI::handleInput()'],['../classGraphicalDisplayUI.html#a3e340b5f072ed6a4251069f4a408e4b0',1,'GraphicalDisplayUI::handleInput(Buttons state, uint16_t pressedFor) override']]], + ['handleinputconfig_1',['handleInputConfig',['../classGraphicalDisplayUI.html#a17cd12ba983e77b6f766bac994b09f49',1,'GraphicalDisplayUI']]], + ['handleinputinfo_2',['handleInputInfo',['../classGraphicalDisplayUI.html#a8f0f20c1ddf3b647f42ed92492fc959c',1,'GraphicalDisplayUI']]], + ['handleinputmain_3',['handleInputMain',['../classGraphicalDisplayUI.html#a948cf32243a585b1a88c0989efd9d474',1,'GraphicalDisplayUI']]], + ['header_4',['header',['../classSerialLogger.html#af692abf860fcae4f90adf812326ee769',1,'SerialLogger::header[]'],['../classSerialLogger.html#ab42b8168047db63bda010a9d5e5fe8fb',1,'SerialLogger::header[]']]], + ['humidistat_5',['Humidistat',['../classHumidistat.html#a3f8890823bcf559d2698d058efaebf27',1,'Humidistat']]] +]; diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 0000000..7106636 --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['ilog10_0',['ilog10',['../imath_8h.html#a1b826c7311037e4e89052d8f5d59afe6',1,'imath.h']]], + ['init_1',['init',['../classPID.html#a0ccd3a3e6e64a2560077ea76bf71e417',1,'PID']]], + ['ipow_2',['ipow',['../imath_8h.html#aa86632c19b4d57acb96ac9e9cd3e13e1',1,'imath.h']]], + ['ispressed_3',['isPressed',['../classButtonReader.html#a3ced9ddb05791cb1b9d29175f39d91fd',1,'ButtonReader']]], + ['isrunning_4',['isRunning',['../classSetpointProfileRunner.html#a346e9b34c7c2e23b46bc51446ddd1947',1,'SetpointProfileRunner']]] +]; diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 0000000..7c6ff82 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['load_0',['load',['../classEEPROMConfig.html#a88ca7504a4c1d8ed44e3c37ed2764ba3',1,'EEPROMConfig']]], + ['log_1',['log',['../classSerialLogger.html#a1ea6568a47741b504452e921382ef04e',1,'SerialLogger::log()'],['../classSerialLogger.html#a19892d82447f8504faf4ddace7a56877',1,'SerialLogger::log()'],['../classSerialLogger.html#a4951b602e6c18f7f2a6a13e9ca3a111a',1,'SerialLogger::log()']]], + ['loop_2',['loop',['../main_8cpp.html#afe461d27b9c48d5921c00d521181f12f',1,'main.cpp']]] +]; diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 0000000..0aaa137 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['magnitude_0',['magnitude',['../classConfigPar.html#a099b55d3836247dc0ebbe2609d3809cd',1,'ConfigPar']]] +]; diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 0000000..bd7c5bb --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['pid_0',['PID',['../classPID.html#a5cc06605b7c3778f132838314136f292',1,'PID']]], + ['printf_1',['printf',['../classControllerUI.html#aa14a64631f7993d6e22ac9e6f5bf4b44',1,'ControllerUI']]], + ['printntc_2',['printNTC',['../classControllerUI.html#abfabf4c49c12dcb8ee5e8b5a899cc920',1,'ControllerUI']]] +]; diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 0000000..401af7e --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['readflowrate_0',['readFlowrate',['../classFlowSensor.html#af13c74f7fd6fed9e163292e2b840ca8e',1,'FlowSensor']]], + ['readsample_1',['readSample',['../classDHTHumiditySensor.html#a00eb12e6e2bc051bea1d82992fe96ec2',1,'DHTHumiditySensor::readSample()'],['../classSHTHumiditySensor.html#ad6e81ab1ca1183180dac12e563567e44',1,'SHTHumiditySensor::readSample()']]], + ['readtemp_2',['readTemp',['../classThermistorReader.html#a61290269ed0011d84d4822d3a60f18cd',1,'ThermistorReader']]], + ['reset_3',['reset',['../classEEPROMConfig.html#a389d1170c790427a9d5fb6643c340b21',1,'EEPROMConfig']]], + ['runcycle_4',['runCycle',['../classHumidistat.html#ae30511d6477f5996de05996bdf221730',1,'Humidistat']]] +]; diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 0000000..6bb9408 --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['sample_0',['sample',['../classButtonReader.html#ab1b6d6805373ba677510075fa2aaf013',1,'ButtonReader']]], + ['save_1',['save',['../classEEPROMConfig.html#a3ccccd29dcfe0a56152c2d9382fa2f0d',1,'EEPROMConfig']]], + ['seriallogger_2',['SerialLogger',['../classSerialLogger.html#a49cb903243a25d8fe058c5d3fbd0af27',1,'SerialLogger']]], + ['setauto_3',['setAuto',['../classPID.html#a05e62644ef9b7c0f3b1bb34631150ab4',1,'PID']]], + ['setcursor_4',['setCursor',['../classCharDisplayUI.html#a64b178a64267a4d9ba59793196c803ad',1,'CharDisplayUI::setCursor()'],['../classControllerUI.html#a94aed853c67197d32434244f8941c21e',1,'ControllerUI::setCursor()'],['../classGraphicalDisplayUI.html#a036a55e339ff591d1fa70c1baa474e52',1,'GraphicalDisplayUI::setCursor()']]], + ['setgains_5',['setGains',['../classPID.html#ae3f4eed49d68435cc1b77e137ac31920',1,'PID']]], + ['setpointprofilerunner_6',['SetpointProfileRunner',['../classSetpointProfileRunner.html#af79fdf3a056f30d3a56ba2902bde9f55',1,'SetpointProfileRunner']]], + ['setprofile_7',['setProfile',['../classSetpointProfileRunner.html#a1c11d6fe1d34db313e8bc78cc08ab19f',1,'SetpointProfileRunner']]], + ['setup_8',['setup',['../main_8cpp.html#a4fc01d736fe50cf5b977f755b675f11d',1,'main.cpp']]], + ['shthumiditysensor_9',['SHTHumiditySensor',['../classSHTHumiditySensor.html#a1039b7f325744746e33a2de35a979807',1,'SHTHumiditySensor']]], + ['singlehumidistat_10',['SingleHumidistat',['../classSingleHumidistat.html#a342a291cc9a950ecd47399f87c873908',1,'SingleHumidistat']]] +]; diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 0000000..61de31f --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['thermistorreader_0',['ThermistorReader',['../classThermistorReader.html#afad2e0f1f7faab3d370efd35868614ea',1,'ThermistorReader']]], + ['toggle_1',['toggle',['../classSetpointProfileRunner.html#ace14da515f49645e5901523d0864dd23',1,'SetpointProfileRunner']]] +]; diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 0000000..cb1658e --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['update_0',['update',['../classCascadeHumidistat.html#a5a4f6ad4f30f5f033462af46d47cf959',1,'CascadeHumidistat::update()'],['../classController.html#a7d04c17913f04f99429aa29fa8505484',1,'Controller::update()'],['../classFlowController.html#a67e791323a0cd95c97266135ba2ecde2',1,'FlowController::update()'],['../classSingleHumidistat.html#af667a97d9c89b5801dab0956f88acd70',1,'SingleHumidistat::update()'],['../classSerialLogger.html#a2c4b7a2678b3742894d61739949f9c9d',1,'SerialLogger::update()'],['../classSetpointProfileRunner.html#a076b63e4aea6e1ba45c7b28ff714d6b6',1,'SetpointProfileRunner::update()'],['../classControllerUI.html#a6f2d7f517a98e9ed393fdded07bbc454',1,'ControllerUI::update()']]], + ['updatepidparameters_1',['updatePIDParameters',['../classCascadeHumidistat.html#ad3b4c342c985955ba465a1ee85249eee',1,'CascadeHumidistat::updatePIDParameters()'],['../classController.html#ab63fde8bc51d57a153f8db1258ed6d36',1,'Controller::updatePIDParameters()'],['../classFlowController.html#a20a5cb870095042fc47e60866675bc07',1,'FlowController::updatePIDParameters()'],['../classSingleHumidistat.html#ae8f19856e617b83e1cf21e72e5b9f1d9',1,'SingleHumidistat::updatePIDParameters()']]] +]; diff --git a/search/mag.svg b/search/mag.svg new file mode 100644 index 0000000..ffb6cf0 --- /dev/null +++ b/search/mag.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_d.svg b/search/mag_d.svg new file mode 100644 index 0000000..4122773 --- /dev/null +++ b/search/mag_d.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/search/mag_sel.svg b/search/mag_sel.svg new file mode 100644 index 0000000..553dba8 --- /dev/null +++ b/search/mag_sel.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/mag_seld.svg b/search/mag_seld.svg new file mode 100644 index 0000000..c906f84 --- /dev/null +++ b/search/mag_seld.svg @@ -0,0 +1,31 @@ + + + + + + + + + diff --git a/search/namespaces_0.js b/search/namespaces_0.js new file mode 100644 index 0000000..b707732 --- /dev/null +++ b/search/namespaces_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['config_0',['config',['../namespaceconfig.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..19f76f9 --- /dev/null +++ b/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: var(--search-background-color); + border-radius: 0.65em; + box-shadow: var(--search-box-shadow); + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: var(--search-magnification-select-image); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: var(--search-magnification-image); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: var(--search-foreground-color); + outline: none; + font-family: var(--font-family-search); + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: var(--search-active-color); +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-filter-border-color); + background-color: var(--search-filter-background-color); + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt var(--font-family-search); + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: var(--font-family-monospace); + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: var(--search-filter-foreground-color); + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: var(--search-filter-foreground-color); + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: var(--search-filter-highlight-text-color); + background-color: var(--search-filter-highlight-bg-color); + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid var(--search-results-border-color); + background-color: var(--search-results-background-color); + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: var(--search-results-background-color); +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: var(--search-results-foreground-color); + font-family: var(--font-family-search); + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: var(--font-family-search); +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: var(--font-family-search); +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: var(--nav-gradient-active-image-parent); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..666af01 --- /dev/null +++ b/search/search.js @@ -0,0 +1,694 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +const SEARCH_COOKIE_NAME = ''+'search_grp'; + +const searchResults = new SearchResults(); + +/* A class handling everything associated with the search panel. + + Parameters: + name - The name of the global variable that will be + storing this instance. Is needed to be able to set timeouts. + resultPath - path to use for external files +*/ +function SearchBox(name, resultsPath, extension) { + if (!name || !resultsPath) { alert("Missing parameters to SearchBox."); } + if (!extension || extension == "") { extension = ".html"; } + + function getXPos(item) { + let x = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + x += item.offsetLeft; + item = item.offsetParent; + } + } + return x; + } + + function getYPos(item) { + let y = 0; + if (item.offsetWidth) { + while (item && item!=document.body) { + y += item.offsetTop; + item = item.offsetParent; + } + } + return y; + } + + // ---------- Instance variables + this.name = name; + this.resultsPath = resultsPath; + this.keyTimeout = 0; + this.keyTimeoutLength = 500; + this.closeSelectionTimeout = 300; + this.lastSearchValue = ""; + this.lastResultsPage = ""; + this.hideTimeout = 0; + this.searchIndex = 0; + this.searchActive = false; + this.extension = extension; + + // ----------- DOM Elements + + this.DOMSearchField = () => document.getElementById("MSearchField"); + this.DOMSearchSelect = () => document.getElementById("MSearchSelect"); + this.DOMSearchSelectWindow = () => document.getElementById("MSearchSelectWindow"); + this.DOMPopupSearchResults = () => document.getElementById("MSearchResults"); + this.DOMPopupSearchResultsWindow = () => document.getElementById("MSearchResultsWindow"); + this.DOMSearchClose = () => document.getElementById("MSearchClose"); + this.DOMSearchBox = () => document.getElementById("MSearchBox"); + + // ------------ Event Handlers + + // Called when focus is added or removed from the search field. + this.OnSearchFieldFocus = function(isActive) { + this.Activate(isActive); + } + + this.OnSearchSelectShow = function() { + const searchSelectWindow = this.DOMSearchSelectWindow(); + const searchField = this.DOMSearchSelect(); + + const left = getXPos(searchField); + const top = getYPos(searchField) + searchField.offsetHeight; + + // show search selection popup + searchSelectWindow.style.display='block'; + searchSelectWindow.style.left = left + 'px'; + searchSelectWindow.style.top = top + 'px'; + + // stop selection hide timer + if (this.hideTimeout) { + clearTimeout(this.hideTimeout); + this.hideTimeout=0; + } + return false; // to avoid "image drag" default event + } + + this.OnSearchSelectHide = function() { + this.hideTimeout = setTimeout(this.CloseSelectionWindow.bind(this), + this.closeSelectionTimeout); + } + + // Called when the content of the search field is changed. + this.OnSearchFieldChange = function(evt) { + if (this.keyTimeout) { // kill running timer + clearTimeout(this.keyTimeout); + this.keyTimeout = 0; + } + + const e = evt ? evt : window.event; // for IE + if (e.keyCode==40 || e.keyCode==13) { + if (e.shiftKey==1) { + this.OnSearchSelectShow(); + const win=this.DOMSearchSelectWindow(); + for (let i=0;i do a search + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) { // Up + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } else if (e.keyCode==13 || e.keyCode==27) { + e.stopPropagation(); + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() { + this.keyTimeout = 0; + + // strip leading whitespace + const searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + const code = searchValue.toLowerCase().charCodeAt(0); + let idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) { // surrogate pair + idxChar = searchValue.substr(0, 2); + } + + let jsFile; + let idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) { + const hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + const loadJS = function(url, impl, loc) { + const scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + const domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + const domSearchBox = this.DOMSearchBox(); + const domPopupSearchResults = this.DOMPopupSearchResults(); + const domSearchClose = this.DOMSearchClose(); + const resultsPath = this.resultsPath; + + const handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + if (idx!=-1) { + searchResults.Search(searchValue); + } else { // no file with search results => force empty search results + searchResults.Search('===='); + } + + if (domPopupSearchResultsWindow.style.display!='block') { + domSearchClose.style.display = 'inline-block'; + let left = getXPos(domSearchBox) + 150; + let top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + const maxWidth = document.body.clientWidth; + const maxHeight = document.body.clientHeight; + let width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + let height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } else if (!isActive) { // directly remove the panel + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults() { + + function convertToId(search) { + let result = ''; + for (let i=0;i. + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) { + const parentElement = document.getElementById(id); + let element = parentElement.firstChild; + + while (element && element!=parentElement) { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) { + element = element.firstChild; + } else if (element.nextSibling) { + element = element.nextSibling; + } else { + do { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) { + const element = this.FindChildElement(id); + if (element) { + if (element.style.display == 'block') { + element.style.display = 'none'; + } else { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) { + if (!search) { // get search word from URL + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + const resultRows = document.getElementsByTagName("div"); + let matches = 0; + + let i = 0; + while (i < resultRows.length) { + const row = resultRows.item(i); + if (row.className == "SRResult") { + let rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) { + row.style.display = 'block'; + matches++; + } else { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) { // no results + document.getElementById("NoMatches").style.display='block'; + } else { // at least one result + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) { + let focusItem; + for (;;) { + const focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') { + break; + } else if (!focusItem) { // last element + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) { + if (e.type == "keydown") { + this.repeatOn = false; + this.lastKey = e.keyCode; + } else if (e.type == "keypress") { + if (!this.repeatOn) { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } else if (e.type == "keyup") { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + const newIndex = itemIndex-1; + let focusItem = this.NavPrev(newIndex); + if (focusItem) { + let child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') { // children visible + let n=0; + let tmpElem; + for (;;) { // search for last child + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) { + focusItem = tmpElem; + } else { // found it! + break; + } + n++; + } + } + } + if (focusItem) { + focusItem.focus(); + } else { // return focus to search field + document.getElementById("MSearchField").focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = itemIndex+1; + let focusItem; + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') { // children visible + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } else if (this.lastKey==39) { // Right + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } else if (this.lastKey==37) { // Left + const item = document.getElementById('Item'+itemIndex); + const elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) { + const e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) { // Up + if (childIndex>0) { + const newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } else { // already at first child, jump to parent + document.getElementById('Item'+itemIndex).focus(); + } + } else if (this.lastKey==40) { // Down + const newIndex = childIndex+1; + let elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) { // last child, jump to parent next parent + elem = this.NavNext(itemIndex+1); + } + if (elem) { + elem.focus(); + } + } else if (this.lastKey==27) { // Escape + e.stopPropagation(); + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } else if (this.lastKey==13) { // Enter + return true; + } + return false; + } +} + +function createResults(resultsPath) { + + function setKeyActions(elem,action) { + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); + } + + function setClassAttr(elem,attr) { + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); + } + + const results = document.getElementById("SRResults"); + results.innerHTML = ''; + searchData.forEach((elem,index) => { + const id = elem[0]; + const srResult = document.createElement('div'); + srResult.setAttribute('id','SR_'+id); + setClassAttr(srResult,'SRResult'); + const srEntry = document.createElement('div'); + setClassAttr(srEntry,'SREntry'); + const srLink = document.createElement('a'); + srLink.setAttribute('id','Item'+index); + setKeyActions(srLink,'return searchResults.Nav(event,'+index+')'); + setClassAttr(srLink,'SRSymbol'); + srLink.innerHTML = elem[1][0]; + srEntry.appendChild(srLink); + if (elem[1].length==2) { // single result + srLink.setAttribute('href',resultsPath+elem[1][1][0]); + srLink.setAttribute('onclick','searchBox.CloseResultsWindow()'); + if (elem[1][1][1]) { + srLink.setAttribute('target','_parent'); + } else { + srLink.setAttribute('target','_blank'); + } + const srScope = document.createElement('span'); + setClassAttr(srScope,'SRScope'); + srScope.innerHTML = elem[1][1][2]; + srEntry.appendChild(srScope); + } else { // multiple results + srLink.setAttribute('href','javascript:searchResults.Toggle("SR_'+id+'")'); + const srChildren = document.createElement('div'); + setClassAttr(srChildren,'SRChildren'); + for (let c=0; c + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ConfigPar::Var Member List
    +
    +
    + +

    This is the complete list of members for ConfigPar::Var, including all inherited members.

    + + + + + + + + + +
    dConfigPar::Var
    typeConfigPar::Var
    ui16ConfigPar::Var
    ui8ConfigPar::Var
    Var(uint8_t *par)ConfigPar::Varinline
    Var(uint16_t *par)ConfigPar::Varinline
    Var(double *par)ConfigPar::Varinline
    Var()ConfigPar::Varinline
    +
    + + + + diff --git a/structConfigPar_1_1Var.html b/structConfigPar_1_1Var.html new file mode 100644 index 0000000..95a732c --- /dev/null +++ b/structConfigPar_1_1Var.html @@ -0,0 +1,355 @@ + + + + + + + +Humidistat: ConfigPar::Var Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ConfigPar::Var Struct Reference
    +
    +
    + +

    #include <ConfigPar.h>

    + + + + + + + + + + + + + +

    +Public Member Functions

     Var ()
     Default constructor, initializes with nullptr.
     
     Var (uint8_t *par)
     Constructor.
     
     Var (uint16_t *par)
     
     Var (double *par)
     
    + + + + + + + + + + + + + +

    +Public Attributes

    const ConfigParType type
     
    union { 
     
       uint8_t *const   ui8 
     
       uint16_t *const   ui16 
     
       double *const   d 
     
    };  
     
    +

    Detailed Description

    +
    +

    Definition at line 20 of file ConfigPar.h.

    +

    Constructor & Destructor Documentation

    + +

    ◆ Var() [1/4]

    + +
    +
    + + + + + +
    + + + + + + + +
    ConfigPar::Var::Var (uint8_t * par)
    +
    +inline
    +
    + +

    Constructor.

    +
    Parameters
    + + +
    parPointer to the variable
    +
    +
    + +

    Definition at line 31 of file ConfigPar.h.

    + +
    +
    + +

    ◆ Var() [2/4]

    + +
    +
    + + + + + +
    + + + + + + + +
    ConfigPar::Var::Var (uint16_t * par)
    +
    +inline
    +
    + +

    Definition at line 32 of file ConfigPar.h.

    + +
    +
    + +

    ◆ Var() [3/4]

    + +
    +
    + + + + + +
    + + + + + + + +
    ConfigPar::Var::Var (double * par)
    +
    +inline
    +
    + +

    Definition at line 33 of file ConfigPar.h.

    + +
    +
    + +

    ◆ Var() [4/4]

    + +
    +
    + + + + + +
    + + + + + + + +
    ConfigPar::Var::Var ()
    +
    +inline
    +
    + +

    Default constructor, initializes with nullptr.

    + +

    Definition at line 37 of file ConfigPar.h.

    + +
    +
    +

    Member Data Documentation

    + +

    ◆ [union]

    + +
    +
    + + + + +
    union { ... } ConfigPar::Var
    +
    + +
    +
    + +

    ◆ d

    + +
    +
    + + + + +
    double* const ConfigPar::Var::d
    +
    + +

    Definition at line 25 of file ConfigPar.h.

    + +
    +
    + +

    ◆ type

    + +
    +
    + + + + +
    const ConfigParType ConfigPar::Var::type
    +
    + +

    Definition at line 21 of file ConfigPar.h.

    + +
    +
    + +

    ◆ ui16

    + +
    +
    + + + + +
    uint16_t* const ConfigPar::Var::ui16
    +
    + +

    Definition at line 24 of file ConfigPar.h.

    + +
    +
    + +

    ◆ ui8

    + +
    +
    + + + + +
    uint8_t* const ConfigPar::Var::ui8
    +
    + +

    Definition at line 23 of file ConfigPar.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structConfigPar_1_1Var.js b/structConfigPar_1_1Var.js new file mode 100644 index 0000000..b7af8b7 --- /dev/null +++ b/structConfigPar_1_1Var.js @@ -0,0 +1,11 @@ +var structConfigPar_1_1Var = +[ + [ "Var", "structConfigPar_1_1Var.html#afab7e72cb763fbaf429cb5ac6ee2ab8d", null ], + [ "Var", "structConfigPar_1_1Var.html#a69353bfa22040ecc5f0e9eb848936121", null ], + [ "Var", "structConfigPar_1_1Var.html#a43f2a94e6cc162b8e3dae17a6bc78dc4", null ], + [ "Var", "structConfigPar_1_1Var.html#ad08177ae1a60f8148663707c8585444a", null ], + [ "d", "structConfigPar_1_1Var.html#a4bfbf40f70f7e0e0d90f1db203abb88c", null ], + [ "type", "structConfigPar_1_1Var.html#a880f0673b8c0ce9b5f2543740a8bec60", null ], + [ "ui16", "structConfigPar_1_1Var.html#abcc3abfd8781c34cb074f73417ebec96", null ], + [ "ui8", "structConfigPar_1_1Var.html#ac4c3692666145b0feffbad2548642685", null ] +]; \ No newline at end of file diff --git a/structConfigStore-members.html b/structConfigStore-members.html new file mode 100644 index 0000000..cdbf06d --- /dev/null +++ b/structConfigStore-members.html @@ -0,0 +1,132 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    ConfigStore Member List
    +
    + +
    + + + + diff --git a/structConfigStore.html b/structConfigStore.html new file mode 100644 index 0000000..8fd31e8 --- /dev/null +++ b/structConfigStore.html @@ -0,0 +1,431 @@ + + + + + + + +Humidistat: ConfigStore Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    ConfigStore Struct Reference
    +
    +
    + +

    Config store containing variables, which can be stored in EEPROM. + More...

    + +

    #include <EEPROMConfig.h>

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Public Attributes

    char version [5]
     String identifying this block.
     
    bool loadedFromEEPROM
     Whether this has been loaded from EEPROM.
     
    uint16_t dt
     Global interval for PID/logger (based on polling rate of sensor, in millis)
     
    double S_lowValue
     Minimum solenoid duty cycle (deadband)
     
    double HC_totalFlowrate
     Total flowrate (for cascade controller) (L/min)
     
    double a
     Smoothing factor of EMA filter for derivative.
     
    double HC_Kp
     Humidity controller PID parameters.
     
    double HC_Ki
     
    double HC_Kd
     
    double HC_Kf
     
    double FC_Kp
     Flow controller PID parameters.
     
    double FC_Ki
     
    double FC_Kd
     
    double FC_Kf
     
    uint16_t FC_dt
     
    +

    Detailed Description

    +

    Config store containing variables, which can be stored in EEPROM.

    + +

    Definition at line 7 of file EEPROMConfig.h.

    +

    Member Data Documentation

    + +

    ◆ a

    + +
    +
    + + + + +
    double ConfigStore::a
    +
    + +

    Smoothing factor of EMA filter for derivative.

    + +

    Definition at line 37 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ dt

    + +
    +
    + + + + +
    uint16_t ConfigStore::dt
    +
    + +

    Global interval for PID/logger (based on polling rate of sensor, in millis)

    + +

    Definition at line 11 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ FC_dt

    + +
    +
    + + + + +
    uint16_t ConfigStore::FC_dt
    +
    + +

    Definition at line 27 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ FC_Kd

    + +
    +
    + + + + +
    double ConfigStore::FC_Kd
    +
    + +

    Definition at line 25 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ FC_Kf

    + +
    +
    + + + + +
    double ConfigStore::FC_Kf
    +
    + +

    Definition at line 26 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ FC_Ki

    + +
    +
    + + + + +
    double ConfigStore::FC_Ki
    +
    + +

    Definition at line 24 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ FC_Kp

    + +
    +
    + + + + +
    double ConfigStore::FC_Kp
    +
    + +

    Flow controller PID parameters.

    + +

    Definition at line 23 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ HC_Kd

    + +
    +
    + + + + +
    double ConfigStore::HC_Kd
    +
    + +

    Definition at line 17 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ HC_Kf

    + +
    +
    + + + + +
    double ConfigStore::HC_Kf
    +
    + +

    Definition at line 18 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ HC_Ki

    + +
    +
    + + + + +
    double ConfigStore::HC_Ki
    +
    + +

    Definition at line 16 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ HC_Kp

    + +
    +
    + + + + +
    double ConfigStore::HC_Kp
    +
    + +

    Humidity controller PID parameters.

    + +

    Definition at line 15 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ HC_totalFlowrate

    + +
    +
    + + + + +
    double ConfigStore::HC_totalFlowrate
    +
    + +

    Total flowrate (for cascade controller) (L/min)

    + +

    Definition at line 34 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ loadedFromEEPROM

    + +
    +
    + + + + +
    bool ConfigStore::loadedFromEEPROM
    +
    + +

    Whether this has been loaded from EEPROM.

    + +

    Definition at line 9 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ S_lowValue

    + +
    +
    + + + + +
    double ConfigStore::S_lowValue
    +
    + +

    Minimum solenoid duty cycle (deadband)

    + +

    Definition at line 31 of file EEPROMConfig.h.

    + +
    +
    + +

    ◆ version

    + +
    +
    + + + + +
    char ConfigStore::version[5]
    +
    + +

    String identifying this block.

    + +

    Definition at line 8 of file EEPROMConfig.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structConfigStore.js b/structConfigStore.js new file mode 100644 index 0000000..6e53a56 --- /dev/null +++ b/structConfigStore.js @@ -0,0 +1,18 @@ +var structConfigStore = +[ + [ "a", "structConfigStore.html#aa4b29fc96154023c2ecb267ccbccd319", null ], + [ "dt", "structConfigStore.html#af92ecc9715773d50948aac6cf5aa46fb", null ], + [ "FC_dt", "structConfigStore.html#a7722c2f75b9bb715bce04df085ae1400", null ], + [ "FC_Kd", "structConfigStore.html#a67b522f7cb2abd2cebc8ce1d067ff6fd", null ], + [ "FC_Kf", "structConfigStore.html#aabbc9c8133b8371b52bf1293604af2c8", null ], + [ "FC_Ki", "structConfigStore.html#afc63e359908776d68da59c717451cfaa", null ], + [ "FC_Kp", "structConfigStore.html#adac97fc9791f9b2cdfdb43a5b7b4ce69", null ], + [ "HC_Kd", "structConfigStore.html#aa513fa31d61ae573fb6082e8a0141e89", null ], + [ "HC_Kf", "structConfigStore.html#ab2f012d152cdeaacc299370e40464a01", null ], + [ "HC_Ki", "structConfigStore.html#a325c2de9c2d46ddf739a873d504958ce", null ], + [ "HC_Kp", "structConfigStore.html#aaf9fe757d62c9875a0a00c4046c5e645", null ], + [ "HC_totalFlowrate", "structConfigStore.html#a98f79ec24949ba7c9ad366f42041c9ab", null ], + [ "loadedFromEEPROM", "structConfigStore.html#ac4104564325caf7989d736da4ad26972", null ], + [ "S_lowValue", "structConfigStore.html#ae800aac617d54b57945800ce46014aa7", null ], + [ "version", "structConfigStore.html#a8296af0f6cca3f3a9abace89068be190", null ] +]; \ No newline at end of file diff --git a/structPoint-members.html b/structPoint-members.html new file mode 100644 index 0000000..bb3f799 --- /dev/null +++ b/structPoint-members.html @@ -0,0 +1,119 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Point Member List
    +
    +
    + +

    This is the complete list of members for Point, including all inherited members.

    + + + +
    spPoint
    timePoint
    +
    + + + + diff --git a/structPoint.html b/structPoint.html new file mode 100644 index 0000000..58aae52 --- /dev/null +++ b/structPoint.html @@ -0,0 +1,174 @@ + + + + + + + +Humidistat: Point Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    Point Struct Reference
    +
    +
    + +

    Point: a vector of a time and setpoint value. + More...

    + +

    #include <Point.h>

    + + + + + + + +

    +Public Attributes

    const uint16_t time
     Time in seconds.
     
    const uint8_t sp
     
    +

    Detailed Description

    +

    Point: a vector of a time and setpoint value.

    + +

    Definition at line 8 of file Point.h.

    +

    Member Data Documentation

    + +

    ◆ sp

    + +
    +
    + + + + +
    const uint8_t Point::sp
    +
    + +

    Definition at line 10 of file Point.h.

    + +
    +
    + +

    ◆ time

    + +
    +
    + + + + +
    const uint16_t Point::time
    +
    + +

    Time in seconds.

    + +

    Definition at line 9 of file Point.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structPoint.js b/structPoint.js new file mode 100644 index 0000000..b8466a6 --- /dev/null +++ b/structPoint.js @@ -0,0 +1,5 @@ +var structPoint = +[ + [ "sp", "structPoint.html#ab85fd496384909563acfdc9cb15f9702", null ], + [ "time", "structPoint.html#a4f0d0b6e159127d018d5af6f1e9891c7", null ] +]; \ No newline at end of file diff --git a/structSPProfile-members.html b/structSPProfile-members.html new file mode 100644 index 0000000..91cfa08 --- /dev/null +++ b/structSPProfile-members.html @@ -0,0 +1,119 @@ + + + + + + + +Humidistat: Member List + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    SPProfile Member List
    +
    +
    + +

    This is the complete list of members for SPProfile, including all inherited members.

    + + + +
    labelSPProfile
    profileSPProfile
    +
    + + + + diff --git a/structSPProfile.html b/structSPProfile.html new file mode 100644 index 0000000..485a413 --- /dev/null +++ b/structSPProfile.html @@ -0,0 +1,171 @@ + + + + + + + +Humidistat: SPProfile Struct Reference + + + + + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    Humidistat +
    +
    Arduino firmware for a humidistat (humidity controller)
    +
    +
    + + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    SPProfile Struct Reference
    +
    +
    + +

    Setpoint profile: a label and a span over Points. + More...

    + +

    #include <Point.h>

    + + + + + + +

    +Public Attributes

    const char label [12]
     
    const etl::span< const Pointprofile
     
    +

    Detailed Description

    +

    Setpoint profile: a label and a span over Points.

    + +

    Definition at line 14 of file Point.h.

    +

    Member Data Documentation

    + +

    ◆ label

    + +
    +
    + + + + +
    const char SPProfile::label[12]
    +
    + +

    Definition at line 15 of file Point.h.

    + +
    +
    + +

    ◆ profile

    + +
    +
    + + + + +
    const etl::span<const Point> SPProfile::profile
    +
    + +

    Definition at line 16 of file Point.h.

    + +
    +
    +
    The documentation for this struct was generated from the following file: +
    +
    + + + + diff --git a/structSPProfile.js b/structSPProfile.js new file mode 100644 index 0000000..55cc881 --- /dev/null +++ b/structSPProfile.js @@ -0,0 +1,5 @@ +var structSPProfile = +[ + [ "label", "structSPProfile.html#a3940eb64b9df758a3e3f21a300ebf768", null ], + [ "profile", "structSPProfile.html#ae9e6f484e6a7345987cae483293de21e", null ] +]; \ No newline at end of file diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 0000000..e34850a Binary files /dev/null and b/tab_ad.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_bd.png b/tab_bd.png new file mode 100644 index 0000000..91c2524 Binary files /dev/null and b/tab_bd.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_hd.png b/tab_hd.png new file mode 100644 index 0000000..2489273 Binary files /dev/null and b/tab_hd.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/tab_s.png differ diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 0000000..757a565 Binary files /dev/null and b/tab_sd.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..7fa4268 --- /dev/null +++ b/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:0}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}}