Merge branch 'edge' into multitool
[clinton/Smoothieware.git] / src / modules / tools / temperaturecontrol / TemperatureControl.h
1 /*
2 this file is part of smoothie (http://smoothieware.org/). the motion control part is heavily based on grbl (https://github.com/simen/grbl).
3 smoothie is free software: you can redistribute it and/or modify it under the terms of the gnu general public license as published by the free software foundation, either version 3 of the license, or (at your option) any later version.
4 smoothie is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. see the gnu general public license for more details.
5 you should have received a copy of the gnu general public license along with smoothie. if not, see <http://www.gnu.org/licenses/>.
6 */
7
8 #ifndef temperaturecontrol_h
9 #define temperaturecontrol_h
10
11 #include "Module.h"
12 #include "Pwm.h"
13 #include "TempSensor.h"
14
15 class TemperatureControlPool;
16
17 class TemperatureControl : public Module {
18
19 public:
20 TemperatureControl(uint16_t name);
21 ~TemperatureControl();
22
23 void on_module_loaded();
24 void on_main_loop(void* argument);
25 void on_gcode_execute(void* argument);
26 void on_gcode_received(void* argument);
27 void on_config_reload(void* argument);
28 void on_second_tick(void* argument);
29 void on_get_public_data(void* argument);
30 void on_set_public_data(void* argument);
31
32 void set_desired_temperature(float desired_temperature);
33
34 int pool_index;
35 TemperatureControlPool *pool;
36 friend class PID_Autotuner;
37
38 float get_temperature();
39 private:
40 uint32_t thermistor_read_tick(uint32_t dummy);
41 void pid_process(float);
42
43 float target_temperature;
44
45 float preset1;
46 float preset2;
47
48 TempSensor *sensor;
49
50 // PID runtime
51 float i_max;
52
53 int o;
54
55 float last_reading;
56
57 float readings_per_second;
58
59 uint16_t name_checksum;
60
61 Pwm heater_pin;
62
63 bool use_bangbang;
64 bool waiting;
65 bool min_temp_violated;
66 bool link_to_tool;
67 bool active;
68
69 uint16_t set_m_code;
70 uint16_t set_and_wait_m_code;
71 uint16_t get_m_code;
72
73 string designator;
74
75 void setPIDp(float p);
76 void setPIDi(float i);
77 void setPIDd(float d);
78
79 float hysteresis;
80 float iTerm;
81 float lastInput;
82 // PID settings
83 float p_factor;
84 float i_factor;
85 float d_factor;
86 float PIDdt;
87 };
88
89 #endif