77
88#include < PIDfromBT.h>
99
10+ /* *
11+ * Constructor del objeto PIDfromBT de tipo PIDV; Proporcional, Integral, Derivada, Velocidad
12+ * @param kp Referencia a la constante de Proporcionalidad
13+ * @param ki Referencia a la constante de Integración
14+ * @param kd Referencia a la constante de Derivación
15+ * @param vel Reverencia a la variable de Velocidad
16+ * @param debug Parámetro que indica si se imprimirán los valores establecidos
17+ */
1018PIDfromBT::PIDfromBT (float * kp, float * ki, float * kd, int * vel, bool debug)
1119{
1220 _kp = kp; // P
@@ -15,12 +23,21 @@ PIDfromBT::PIDfromBT(float* kp, float* ki, float* kd, int* vel, bool debug)
1523 _vel = vel; // V
1624
1725 _debug = debug;
18- valor = " " ;
19- letra = ' ' ;
20- last_millis = millis ();
26+ _value = " " ;
27+ _letter = ' ' ;
28+ _last_update = millis ();
2129 _type = TYPE_PIDV;
2230}
2331
32+ /* *
33+ * Constructor del objeto PIDfromBT de tipo PIDVI; Proporcional, Integral, Derivada, Velocidad, Ideal
34+ * @param kp Referencia a la constante de Proporcionalidad
35+ * @param ki Referencia a la constante de Integración
36+ * @param kd Referencia a la constante de Derivación
37+ * @param vel Reverencia a la variable de Velocidad
38+ * @param ideal Referencia a la variable de Ideal o Consigna de Posición
39+ * @param debug Parámetro que indica si se imprimirán los valores establecidos
40+ */
2441PIDfromBT::PIDfromBT (float * kp, float * ki, float * kd, int * vel, int * ideal, bool debug)
2542{
2643 _kp = kp; // P
@@ -32,12 +49,22 @@ PIDfromBT::PIDfromBT(float* kp, float* ki, float* kd, int* vel, int* ideal, bool
3249 _minIdeal = MIN_IDEAL;
3350
3451 _debug = debug;
35- valor = " " ;
36- letra = ' ' ;
37- last_millis = millis ();
52+ _value = " " ;
53+ _letter = ' ' ;
54+ _last_update = millis ();
3855 _type = TYPE_PIDVI;
3956}
4057
58+ /* *
59+ * Constructor del objeto PIDfromBT de tipo PIDVIS; Proporcional, Integral, Derivada, Velocidad, Ideal, Succión
60+ * @param kp Referencia a la constante de Proporcionalidad
61+ * @param ki Referencia a la constante de Integración
62+ * @param kd Referencia a la constante de Derivación
63+ * @param vel Reverencia a la variable de Velocidad
64+ * @param ideal Referencia a la variable de Ideal o Consigna de Posición
65+ * @param suction Referencia a la variable de Succion o Velocidad del Ventilador/Turbina
66+ * @param debug Parámetro que indica si se imprimirán los valores establecidos
67+ */
4168PIDfromBT::PIDfromBT (float * kp, float * ki, float * kd, int * vel, int * ideal, int * suction, bool debug)
4269{
4370 _kp = kp; // P
@@ -50,91 +77,107 @@ PIDfromBT::PIDfromBT(float* kp, float* ki, float* kd, int* vel, int* ideal, int*
5077 _minIdeal = MIN_IDEAL;
5178
5279 _debug = debug;
53- valor = " " ;
54- letra = ' ' ;
55- last_millis = millis ();
80+ _value = " " ;
81+ _letter = ' ' ;
82+ _last_update = millis ();
5683 _type = TYPE_PIDVIS;
5784}
5885
59-
86+ /* *
87+ * Función para comprobar si existen comandos pendientes en el Buffer de entrada; debe ejecutarse
88+ * esta función al menos una vez por cada ciclo de ejecución
89+ */
6090void PIDfromBT::update () {
6191 if (Serial.available ()) {
62- // Si hay algo pendiente en el Buffer, lo lee y guarda el tiempo en el que lo leyo.
92+ // Si hay algo pendiente en el Buffer, lo lee y guarda el tiempo en el que lo leyó
6393 _last_update = millis ();
6494 byte readByte = Serial.read ();
6595
6696 if ((isDigit ((char )readByte) || (char )readByte == ' .' || (char )readByte == ' -' )) {
67- // Si es un dígito, signo decimal o signo negativo, lo guarda como un valor.
97+ // Si es un dígito, signo decimal o signo negativo, lo guarda como un valor
6898 _value += (char )readByte;
6999 }else {
70100 if (_letter != ' ' ){
71- // Si es una letra y ya hay otra letra ya leída, ejecuta la acción correspondiente a esa letra.
101+ // Si es una letra y ya hay otra letra ya leída, ejecuta la acción correspondiente a esa letra
72102 execute_task (_letter, (_value!=" " )?_value.toFloat ():0 );
73103 }
74- // Llega una nueva letra; limpia el _value anterior y lee la nueva letra.
104+ // Llega una nueva letra; limpia el _value anterior y lee la nueva letra
75105 _value = " " ;
76106 _letter = (char )readByte;
77107 }
78108 }else if ((millis ()-_last_update) > 5 && _letter != ' ' ){
79- // Si no se ha recibido nada en los últimos 5ms y hay alguna letra pendiente, ejecuta su acción correspondiente.
109+ // Si no se ha recibido nada en los últimos 5ms y hay alguna letra pendiente, ejecuta su acción correspondiente
80110 execute_task (_letter, (_value!=" " )?_value.toFloat ():0 );
81111 _letter = ' ' ;
82112 _value = " " ;
83113 }
84114}
85115
86-
116+ /* *
117+ * Función para modificar el valor de la variable indicada por la letra
118+ * @param letter Letra que identifica la variable que hay que modificar
119+ * @param value Valor que tomará la variable indicada por la Letra anterior
120+ */
87121void PIDfromBT::execute_task (char letter, float value)
88122{
89123 switch (letter) {
90124 case ' P' :
91125 if (_type < TYPE_PIDV)return ;
92- *_kp = valor ;
93- if (print ) {
126+ *_kp = value ;
127+ if (_debug ) {
94128 Serial.println (" Kp: " + String (value));
95129 }
96130 break ;
97131 case ' I' :
98132 if (_type < TYPE_PIDV)return ;
99133 *_ki = value;
100- if (print ) {
134+ if (_debug ) {
101135 Serial.println (" Ki: " + String (value));
102136 }
103137 break ;
104138 case ' D' :
105139 if (_type < TYPE_PIDV)return ;
106140 *_kd = value;
107- if (print ) {
141+ if (_debug ) {
108142 Serial.println (" Kd: " + String (value));
109143 }
110144 break ;
111145 case ' V' :
112146 if (_type < TYPE_PIDV)return ;
113147 *_vel = value;
114- if (print ) {
115- Serial.println (" Vel: " + String (value ));
148+ if (_debug ) {
149+ Serial.println (" Vel: " + String (*_vel ));
116150 }
117151 break ;
118152 case ' X' :
119153 if (_type < TYPE_PIDVI)return ;
120- *_ideal = map (value, -1000 , 1000 , minIdeal, maxIdeal );;
121- if (print ) {
122- Serial.println (" Ideal: " + String (*ideal ));
154+ *_ideal = map (value, -500 , 500 , _minIdeal, _maxIdeal );;
155+ if (_debug ) {
156+ Serial.println (" Ideal: " + String (*_ideal ));
123157 }
124158 break ;
125159 case ' S' :
126- if (_type < TYPE_PIDVS )return ;
127- *_suction = value. toInt () ;
128- if (print ) {
129- Serial.println (" Suc: " + String (value ));
160+ if (_type < TYPE_PIDVIS )return ;
161+ *_suction = value;
162+ if (_debug ) {
163+ Serial.println (" Suc: " + String (*_suction ));
130164 }
131165 break ;
132166 }
133167}
134168
169+ /* *
170+ * Función para establecer el ideal mínimo en cualquier momento
171+ * @param minIdeal Valor entero para el mínimo ideal
172+ */
135173void PIDfromBT::setMinIdeal (int minIdeal){
136174 _minIdeal = minIdeal;
137175}
176+
177+ /* *
178+ * Función para establecer el idea máximo en cualquier momento
179+ * @param maxIdeal Valor entero para el máximo ideal
180+ */
138181void PIDfromBT::setMaxIdeal (int maxIdeal){
139182 _maxIdeal = maxIdeal;
140183}
0 commit comments