Dependencies:   BLE_API mbed

Committer:
Gustavo_Eduardo338
Date:
Fri Nov 04 20:19:08 2016 +0000
Revision:
12:ff38af85a4ba
Parent:
11:965d5afe3a63
Version Estable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dixysleo 0:58e350255405 1 /*
dixysleo 0:58e350255405 2 Copyright (c) 2012-2014 RedBearLab
dixysleo 0:58e350255405 3
Gustavo_Eduardo338 4:a43cbe8aed6a 4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Gustavo_Eduardo338 4:a43cbe8aed6a 5 and associated documentation files (the "Software"), to deal in the Software without restriction,
Gustavo_Eduardo338 4:a43cbe8aed6a 6 including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
Gustavo_Eduardo338 4:a43cbe8aed6a 7 and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
dixysleo 0:58e350255405 8 subject to the following conditions:
dixysleo 0:58e350255405 9 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
dixysleo 0:58e350255405 10
Gustavo_Eduardo338 4:a43cbe8aed6a 11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Gustavo_Eduardo338 4:a43cbe8aed6a 12 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
Gustavo_Eduardo338 4:a43cbe8aed6a 13 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
Gustavo_Eduardo338 4:a43cbe8aed6a 14 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
dixysleo 0:58e350255405 15 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
dixysleo 0:58e350255405 16
dixysleo 0:58e350255405 17 */
dixysleo 0:58e350255405 18
dixysleo 0:58e350255405 19 #include "mbed.h"
dixysleo 0:58e350255405 20 #include "ble/BLE.h"
dixysleo 0:58e350255405 21 #include "GattCallbackParamTypes.h"
dixysleo 0:58e350255405 22
dixysleo 0:58e350255405 23 #define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */
dixysleo 0:58e350255405 24 #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
dixysleo 0:58e350255405 25 #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
dixysleo 0:58e350255405 26
dixysleo 0:58e350255405 27 #define TXRX_BUF_LEN 20
dixysleo 0:58e350255405 28
Gustavo_Eduardo338 10:5580ae8cbe7e 29 #define ON 1
Gustavo_Eduardo338 10:5580ae8cbe7e 30 #define OFF 0
Gustavo_Eduardo338 10:5580ae8cbe7e 31 #define IN 1
Gustavo_Eduardo338 10:5580ae8cbe7e 32 #define OUT 0
Gustavo_Eduardo338 10:5580ae8cbe7e 33 #define PWM 2
Gustavo_Eduardo338 10:5580ae8cbe7e 34 #define NONE -1
Gustavo_Eduardo338 10:5580ae8cbe7e 35
Gustavo_Eduardo338 11:965d5afe3a63 36 //static int MODE_MOTE;
Gustavo_Eduardo338 10:5580ae8cbe7e 37 //Solo puede estar definido un solo Board
Gustavo_Eduardo338 10:5580ae8cbe7e 38 //#define nRF51-DK_board
Gustavo_Eduardo338 10:5580ae8cbe7e 39 #define redBearLab_board
Gustavo_Eduardo338 10:5580ae8cbe7e 40
Gustavo_Eduardo338 10:5580ae8cbe7e 41 #ifdef nRF51-DK_board
Gustavo_Eduardo338 10:5580ae8cbe7e 42 //Aqui se define el hardware del nRF51-DK
Gustavo_Eduardo338 10:5580ae8cbe7e 43
Gustavo_Eduardo338 10:5580ae8cbe7e 44 //Analog in
Gustavo_Eduardo338 10:5580ae8cbe7e 45 #define A0 P0_1 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 46 #define A1 P0_2 //Analog 1
Gustavo_Eduardo338 10:5580ae8cbe7e 47 #define A2 P0_3 //Analog 2
Gustavo_Eduardo338 10:5580ae8cbe7e 48 #define A3 P0_4 //Analog 3
Gustavo_Eduardo338 10:5580ae8cbe7e 49 #define A4 P0_5 //Analog 4
Gustavo_Eduardo338 10:5580ae8cbe7e 50 #define A5 P0_6 //Analog 5
Gustavo_Eduardo338 10:5580ae8cbe7e 51
Gustavo_Eduardo338 10:5580ae8cbe7e 52 //Digital
Gustavo_Eduardo338 10:5580ae8cbe7e 53
Gustavo_Eduardo338 10:5580ae8cbe7e 54 #define D0 P0_14 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 55 #define D1 P0_12 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 56 #define D2 P0_13 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 57 #define D3 P0_15 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 58 #define D4 P0_21 //Digital I/O (LED 1)
Gustavo_Eduardo338 10:5580ae8cbe7e 59 #define D5 P0_22 //Digital I/O (LED 2)
Gustavo_Eduardo338 10:5580ae8cbe7e 60 #define D6 P0_23 //Digital I/O (LED 3)
Gustavo_Eduardo338 10:5580ae8cbe7e 61 #define D7 P0_24 //Digital I/O (LED 4)
Gustavo_Eduardo338 10:5580ae8cbe7e 62 #define D8 P0_17 //Digital I/O (BUTTON 1)
Gustavo_Eduardo338 10:5580ae8cbe7e 63 #define D9 P0_19 //Digital I/O (BUTTON 3)
Gustavo_Eduardo338 10:5580ae8cbe7e 64 #define D10 P0_18 //Digital I/O (BUTTON 2)
Gustavo_Eduardo338 10:5580ae8cbe7e 65 #define D11 P0_20 //Digital I/O (BUTTON 4)
Gustavo_Eduardo338 10:5580ae8cbe7e 66 #define D12 P0_7 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 67 #define D13 P0_30 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 68 #define D14 P0_8 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 69 #define D15 P0_16 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 70
Gustavo_Eduardo338 10:5580ae8cbe7e 71 //Aplicacion
Gustavo_Eduardo338 10:5580ae8cbe7e 72 #define LED_1 P0_21 //Digital I/O (LED 1)
Gustavo_Eduardo338 10:5580ae8cbe7e 73 #define LED_2 P0_22 //Digital I/O (LED 2)
Gustavo_Eduardo338 10:5580ae8cbe7e 74 #define LED_3 P0_23 //Digital I/O (LED 3)
Gustavo_Eduardo338 10:5580ae8cbe7e 75 #define LED_4 P0_24 //Digital I/O (LED 4)
Gustavo_Eduardo338 10:5580ae8cbe7e 76
Gustavo_Eduardo338 10:5580ae8cbe7e 77 #define BTN_1 P0_17 //Digital I/O (BUTTON 1)
Gustavo_Eduardo338 10:5580ae8cbe7e 78 #define BTN_2 P0_18 //Digital I/O (BUTTON 2)
Gustavo_Eduardo338 10:5580ae8cbe7e 79 #define BTN_3 P0_19 //Digital I/O (BUTTON 3)
Gustavo_Eduardo338 10:5580ae8cbe7e 80 #define BTN_4 P0_20 //Digital I/O (BUTTON 4)
Gustavo_Eduardo338 10:5580ae8cbe7e 81
Gustavo_Eduardo338 10:5580ae8cbe7e 82 // Aqui se acaba la configuracion del board NRF51-DK
Gustavo_Eduardo338 10:5580ae8cbe7e 83
Gustavo_Eduardo338 10:5580ae8cbe7e 84 #else
Gustavo_Eduardo338 10:5580ae8cbe7e 85 //Aqui se define el hardware del redBearLab
Gustavo_Eduardo338 10:5580ae8cbe7e 86 //Analog in
Gustavo_Eduardo338 10:5580ae8cbe7e 87 #define A0 P0_1 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 88 #define A1 P0_2 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 89 #define A2 P0_3 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 90 #define A3 P0_4 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 91 #define A4 P0_5 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 92 #define A5 P0_6 //Analog 0
Gustavo_Eduardo338 10:5580ae8cbe7e 93
Gustavo_Eduardo338 10:5580ae8cbe7e 94 //Digital
Gustavo_Eduardo338 10:5580ae8cbe7e 95 #define D0 P0_11 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 96 #define D1 P0_9 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 97 #define D2 P0_10 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 98 #define D3 P0_8 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 99 #define D4 P0_21 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 100 #define D5 P0_23 //Digital I/O (PWM RBL)
Gustavo_Eduardo338 10:5580ae8cbe7e 101 #define D6 P0_16 //Digital I/O (PWM RBL)
Gustavo_Eduardo338 10:5580ae8cbe7e 102 #define D7 P0_17 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 103 #define D8 P0_19 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 104 #define D9 P0_18 //Digital I/O (PWM RBL)
Gustavo_Eduardo338 10:5580ae8cbe7e 105 #define D10 P0_14 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 106 #define D11 P0_12 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 107 #define D12 P0_13 //Digital I/O (LED RBL)
Gustavo_Eduardo338 10:5580ae8cbe7e 108 #define D13 P0_15 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 109 #define D14 P0_29 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 110 #define D15 P0_28 //Digital I/O
Gustavo_Eduardo338 10:5580ae8cbe7e 111
Gustavo_Eduardo338 10:5580ae8cbe7e 112 //Aplicacion
Gustavo_Eduardo338 10:5580ae8cbe7e 113 #define LED_1 P0_21 //Digital I/O (LED 1)
Gustavo_Eduardo338 10:5580ae8cbe7e 114 #define LED_2 P0_23 //Digital I/O (LED 2)
Gustavo_Eduardo338 10:5580ae8cbe7e 115 #define LED_3 P0_16 //Digital I/O (LED 3)
Gustavo_Eduardo338 10:5580ae8cbe7e 116 #define LED_4 P0_17 //Digital I/O (LED 4)
Gustavo_Eduardo338 10:5580ae8cbe7e 117
Gustavo_Eduardo338 10:5580ae8cbe7e 118 #define BTN_1 P0_11 //Digital I/O (BUTTON 1)
Gustavo_Eduardo338 10:5580ae8cbe7e 119 #define BTN_2 P0_9 //Digital I/O (BUTTON 2)
Gustavo_Eduardo338 10:5580ae8cbe7e 120 #define BTN_3 P0_10 //Digital I/O (BUTTON 3)
Gustavo_Eduardo338 10:5580ae8cbe7e 121 #define BTN_4 P0_8 //Digital I/O (BUTTON 4)
Gustavo_Eduardo338 10:5580ae8cbe7e 122
Gustavo_Eduardo338 10:5580ae8cbe7e 123 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 124
Gustavo_Eduardo338 10:5580ae8cbe7e 125
Gustavo_Eduardo338 10:5580ae8cbe7e 126 // Aqui se acabo la definicion del board REDBEARLAB
Gustavo_Eduardo338 10:5580ae8cbe7e 127
Gustavo_Eduardo338 10:5580ae8cbe7e 128 /**** Aqui se definen los pines necesarios independientemente del board seleccionado ******************
Gustavo_Eduardo338 10:5580ae8cbe7e 129
Gustavo_Eduardo338 10:5580ae8cbe7e 130 Instrucciones:
Gustavo_Eduardo338 10:5580ae8cbe7e 131 Pines digitales -->
Gustavo_Eduardo338 10:5580ae8cbe7e 132 ON --> Usado
Gustavo_Eduardo338 10:5580ae8cbe7e 133 OFF --> No sera usado
Gustavo_Eduardo338 10:5580ae8cbe7e 134 IN --> Entrada
Gustavo_Eduardo338 10:5580ae8cbe7e 135 OUT --> Salida
Gustavo_Eduardo338 10:5580ae8cbe7e 136
Gustavo_Eduardo338 10:5580ae8cbe7e 137 Pines Analogicos -->
Gustavo_Eduardo338 10:5580ae8cbe7e 138 ON --> Usado
Gustavo_Eduardo338 10:5580ae8cbe7e 139 OFF --> No sera usado
Gustavo_Eduardo338 10:5580ae8cbe7e 140 Valor del TED en numero reales, ejemplo 39.1, sino se va a usar se queda con 0
Gustavo_Eduardo338 10:5580ae8cbe7e 141 ********************************************************************************************************/
Gustavo_Eduardo338 10:5580ae8cbe7e 142
Gustavo_Eduardo338 11:965d5afe3a63 143 #define A0_USO OFF //-> Divisor de voltaje para medir bateria VDD
Gustavo_Eduardo338 12:ff38af85a4ba 144 #define A1_USO ON //-> Temperatura PT1000 (Borneras Shield de pruebas) Borneras
Gustavo_Eduardo338 10:5580ae8cbe7e 145 #define A2_USO OFF //-> Temperatura PT1000 (Borneras Shield de pruebas)
Gustavo_Eduardo338 10:5580ae8cbe7e 146 #define A3_USO OFF //-> Humedad (Borneras Shield de pruebas)
Gustavo_Eduardo338 10:5580ae8cbe7e 147 #define A4_USO OFF //-> Humedad (Borneras Shield de pruebas)
Gustavo_Eduardo338 12:ff38af85a4ba 148 #define A5_USO OFF //-> Conectarlo al LM35
Gustavo_Eduardo338 10:5580ae8cbe7e 149
Gustavo_Eduardo338 12:ff38af85a4ba 150 #define A0_TED 39.10 //Volts, bateria
Gustavo_Eduardo338 12:ff38af85a4ba 151 #define A1_TED 39.10 // ºC temperatura PT 1000
Gustavo_Eduardo338 12:ff38af85a4ba 152 #define A2_TED 39.10 // ºC temperatura PT 1000
Gustavo_Eduardo338 12:ff38af85a4ba 153 #define A3_TED 39.10
Gustavo_Eduardo338 12:ff38af85a4ba 154 #define A4_TED 39.10
Gustavo_Eduardo338 12:ff38af85a4ba 155 #define A5_TED 39.10 // ºC temperatura ambiental con el LM35
Gustavo_Eduardo338 10:5580ae8cbe7e 156
Gustavo_Eduardo338 10:5580ae8cbe7e 157 #define D0_TYPE NONE // Ejemplo: OUT
Gustavo_Eduardo338 10:5580ae8cbe7e 158 #define D1_TYPE NONE // Ejemplo: IN
Gustavo_Eduardo338 11:965d5afe3a63 159 #define D2_TYPE NONE // Para medir Humedad con Resistencia AC
Gustavo_Eduardo338 12:ff38af85a4ba 160 #define D3_TYPE NONE // Led encienden con 1
Gustavo_Eduardo338 11:965d5afe3a63 161 #define D4_TYPE OUT // Led encienden con 0
Gustavo_Eduardo338 12:ff38af85a4ba 162 #define D5_TYPE NONE // Led encienden con 0
Gustavo_Eduardo338 12:ff38af85a4ba 163 #define D6_TYPE PWM // Led encienden con 1
Gustavo_Eduardo338 12:ff38af85a4ba 164 #define D7_TYPE OUT // Pushbuttons (Activos en bajo)
Gustavo_Eduardo338 12:ff38af85a4ba 165 #define D8_TYPE IN // Pushbuttons (Activos en bajo)
Gustavo_Eduardo338 12:ff38af85a4ba 166 #define D9_TYPE NONE // DIP Switch 1 (Activos en bajo)
Gustavo_Eduardo338 10:5580ae8cbe7e 167 #define D10_TYPE NONE // DIP Switch 2 (Activos en bajo)
Gustavo_Eduardo338 10:5580ae8cbe7e 168 #define D11_TYPE NONE // DIP Switch 3 (Activos en bajo)
Gustavo_Eduardo338 10:5580ae8cbe7e 169 #define D12_TYPE NONE // Para medir Humedad con Resistencia AC
Gustavo_Eduardo338 10:5580ae8cbe7e 170 #define D13_TYPE NONE // DIP Switch 4 (Activos en bajo)
Gustavo_Eduardo338 10:5580ae8cbe7e 171 #define D14_TYPE NONE // Para medir Humedad con Resistencia AC
Gustavo_Eduardo338 10:5580ae8cbe7e 172 #define D15_TYPE NONE // Para medir Humedad con Resistencia AC
Gustavo_Eduardo338 10:5580ae8cbe7e 173
Gustavo_Eduardo338 10:5580ae8cbe7e 174 //Macros de mbed
Gustavo_Eduardo338 10:5580ae8cbe7e 175 /*** Aqui Se definen todas macros en funcion de si el bit esta ON u OFF ************
Gustavo_Eduardo338 10:5580ae8cbe7e 176
Gustavo_Eduardo338 10:5580ae8cbe7e 177 Estos son las macors ya definidas:
Gustavo_Eduardo338 10:5580ae8cbe7e 178 DigitalOut LED_SET(DIGITAL_OUT_PIN); //Modo de uso --> LED_SET = 1 o LED_SET = 0;
Gustavo_Eduardo338 10:5580ae8cbe7e 179 DigitalIn BUTTON(DIGITAL_IN_PIN); //Modo de uso --> if (BUTTON != old_state)
Gustavo_Eduardo338 10:5580ae8cbe7e 180 PwmOut PWM(PWM_PIN); //Modo de uso --> PWM = value;
Gustavo_Eduardo338 10:5580ae8cbe7e 181 AnalogIn ANALOGTEMP(ANALOG_IN_PIN); //Modo de uso -> float s = ANALOG_A0;
Gustavo_Eduardo338 10:5580ae8cbe7e 182 AnalogIn ANALOGBAT(ANALOG_IN_BAT);
Gustavo_Eduardo338 10:5580ae8cbe7e 183 Servo MYSERVO(SERVO_PIN);
Gustavo_Eduardo338 10:5580ae8cbe7e 184 *************************************************************************************/
Gustavo_Eduardo338 10:5580ae8cbe7e 185
Gustavo_Eduardo338 10:5580ae8cbe7e 186 //Macros analogicas
Gustavo_Eduardo338 12:ff38af85a4ba 187 AnalogIn ANALOG_A0(A0);
Gustavo_Eduardo338 10:5580ae8cbe7e 188 AnalogIn ANALOG_A1(A1);
Gustavo_Eduardo338 10:5580ae8cbe7e 189 AnalogIn ANALOG_A2(A2);
Gustavo_Eduardo338 10:5580ae8cbe7e 190 AnalogIn ANALOG_A3(A3);
Gustavo_Eduardo338 10:5580ae8cbe7e 191 AnalogIn ANALOG_A4(A4);
Gustavo_Eduardo338 10:5580ae8cbe7e 192 AnalogIn ANALOG_A5(A5); //Temperatura ambiental con LM35
Gustavo_Eduardo338 5:a8c07a29df8a 193
Gustavo_Eduardo338 12:ff38af85a4ba 194 // Indica si alguien esta conectado al dispositivo.
Gustavo_Eduardo338 12:ff38af85a4ba 195 DigitalOut PIN_CONNECT(D13);
Gustavo_Eduardo338 11:965d5afe3a63 196
Gustavo_Eduardo338 12:ff38af85a4ba 197 #if D2_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 198 DigitalIn PIN_D2(D2);
Gustavo_Eduardo338 12:ff38af85a4ba 199 #elif D2_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 200 DigitalOut PIN_D2(D2);
Gustavo_Eduardo338 12:ff38af85a4ba 201 #else
Gustavo_Eduardo338 12:ff38af85a4ba 202 int PIN_D2 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 203 #endif
Gustavo_Eduardo338 11:965d5afe3a63 204
Gustavo_Eduardo338 12:ff38af85a4ba 205 #if D3_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 206 DigitalIn PIN_D3(D3);
Gustavo_Eduardo338 12:ff38af85a4ba 207 #elif D3_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 208 DigitalOut PIN_D3(D3);
Gustavo_Eduardo338 11:965d5afe3a63 209 #else
Gustavo_Eduardo338 12:ff38af85a4ba 210 int PIN_D3 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 211 #endif
Gustavo_Eduardo338 11:965d5afe3a63 212
Gustavo_Eduardo338 12:ff38af85a4ba 213 #if D4_TYPE == NONE
Gustavo_Eduardo338 12:ff38af85a4ba 214 static int PIN_D4 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 215 #elif D4_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 216 DigitalIn PIN_D4(D4);
Gustavo_Eduardo338 12:ff38af85a4ba 217 #elif D4_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 218 DigitalOut PIN_D4(D4);
Gustavo_Eduardo338 12:ff38af85a4ba 219 #else
Gustavo_Eduardo338 12:ff38af85a4ba 220 int PIN_D4 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 221 #endif
Gustavo_Eduardo338 11:965d5afe3a63 222
Gustavo_Eduardo338 12:ff38af85a4ba 223 #if D5_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 224 DigitalIn PIN_D5(D5);
Gustavo_Eduardo338 12:ff38af85a4ba 225 #elif D5_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 226 DigitalOut PIN_D5(D5);
Gustavo_Eduardo338 12:ff38af85a4ba 227 #elif D5_TYPE == PWM
Gustavo_Eduardo338 12:ff38af85a4ba 228 PwmOut PIN_D5(D5);
Gustavo_Eduardo338 12:ff38af85a4ba 229 #else
Gustavo_Eduardo338 12:ff38af85a4ba 230 int PIN_D5 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 231 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 232
Gustavo_Eduardo338 12:ff38af85a4ba 233 #if D6_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 234 DigitalIn PIN_D6(D6);
Gustavo_Eduardo338 12:ff38af85a4ba 235 #elif D6_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 236 DigitalOut PIN_D6(D6);
Gustavo_Eduardo338 12:ff38af85a4ba 237 #elif D6_TYPE == PWM
Gustavo_Eduardo338 12:ff38af85a4ba 238 PwmOut PIN_D6(D6);
Gustavo_Eduardo338 12:ff38af85a4ba 239 #else
Gustavo_Eduardo338 12:ff38af85a4ba 240 int PIN_D6 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 241 #endif
Gustavo_Eduardo338 11:965d5afe3a63 242
Gustavo_Eduardo338 12:ff38af85a4ba 243 #if D7_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 244 DigitalIn PIN_D7(D7);
Gustavo_Eduardo338 12:ff38af85a4ba 245 #elif D7_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 246 DigitalOut PIN_D7(D7);
Gustavo_Eduardo338 12:ff38af85a4ba 247 #else
Gustavo_Eduardo338 12:ff38af85a4ba 248 int PIN_D7 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 249 #endif
Gustavo_Eduardo338 11:965d5afe3a63 250
Gustavo_Eduardo338 12:ff38af85a4ba 251 #if D8_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 252 DigitalIn PIN_D8(D8);
Gustavo_Eduardo338 12:ff38af85a4ba 253 #elif D8_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 254 DigitalOut PIN_D8(D8);
Gustavo_Eduardo338 11:965d5afe3a63 255 #else
Gustavo_Eduardo338 12:ff38af85a4ba 256 int PIN_D8 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 257 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 258
Gustavo_Eduardo338 12:ff38af85a4ba 259 #if D9_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 260 DigitalIn PIN_D9(D9);
Gustavo_Eduardo338 12:ff38af85a4ba 261 #elif D9_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 262 DigitalOut PIN_D9(D9);
Gustavo_Eduardo338 12:ff38af85a4ba 263 #elif D9_TYPE == PWM
Gustavo_Eduardo338 12:ff38af85a4ba 264 PwmOut PIN_D9(D9);
Gustavo_Eduardo338 11:965d5afe3a63 265 #else
Gustavo_Eduardo338 12:ff38af85a4ba 266 int PIN_D9 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 267 #endif
Gustavo_Eduardo338 11:965d5afe3a63 268
Gustavo_Eduardo338 11:965d5afe3a63 269
Gustavo_Eduardo338 12:ff38af85a4ba 270 #if D10_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 271 DigitalIn PIN_D10(D10);
Gustavo_Eduardo338 12:ff38af85a4ba 272 #elif D10_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 273 DigitalOut PIN_D10(D10);
Gustavo_Eduardo338 11:965d5afe3a63 274 #else
Gustavo_Eduardo338 12:ff38af85a4ba 275 int PIN_D10 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 276 #endif
Gustavo_Eduardo338 11:965d5afe3a63 277
Gustavo_Eduardo338 12:ff38af85a4ba 278 #if D11_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 279 DigitalIn PIN_D11(D11);
Gustavo_Eduardo338 12:ff38af85a4ba 280 #elif D11_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 281 DigitalOut PIN_D11(D11);
Gustavo_Eduardo338 11:965d5afe3a63 282 #else
Gustavo_Eduardo338 12:ff38af85a4ba 283 int PIN_D11 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 284 #endif
Gustavo_Eduardo338 11:965d5afe3a63 285
Gustavo_Eduardo338 12:ff38af85a4ba 286 #if D12_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 287 DigitalIn PIN_D12(D12);
Gustavo_Eduardo338 12:ff38af85a4ba 288 #elif D12_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 289 DigitalOut PIN_D12(D12);
Gustavo_Eduardo338 11:965d5afe3a63 290 #else
Gustavo_Eduardo338 12:ff38af85a4ba 291 int PIN_D12 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 292 #endif
Gustavo_Eduardo338 11:965d5afe3a63 293
Gustavo_Eduardo338 12:ff38af85a4ba 294 #if D13_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 295 DigitalIn PIN_D13(D13);
Gustavo_Eduardo338 12:ff38af85a4ba 296 #elif D13_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 297 DigitalOut PIN_D13(D13);
Gustavo_Eduardo338 11:965d5afe3a63 298 #else
Gustavo_Eduardo338 12:ff38af85a4ba 299 int PIN_D13 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 300 #endif
Gustavo_Eduardo338 11:965d5afe3a63 301
Gustavo_Eduardo338 12:ff38af85a4ba 302 #if D14_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 303 DigitalIn PIN_D14(D14);
Gustavo_Eduardo338 12:ff38af85a4ba 304 #elif D14_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 305 DigitalOut PIN_D14(D14);
Gustavo_Eduardo338 11:965d5afe3a63 306 #else
Gustavo_Eduardo338 12:ff38af85a4ba 307 int PIN_D14 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 308 #endif
Gustavo_Eduardo338 11:965d5afe3a63 309
Gustavo_Eduardo338 12:ff38af85a4ba 310 #if D15_TYPE == IN
Gustavo_Eduardo338 12:ff38af85a4ba 311 DigitalIn PIN_D15(D15);
Gustavo_Eduardo338 12:ff38af85a4ba 312 #elif D15_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 313 DigitalOut PIN_D15(D15);
Gustavo_Eduardo338 11:965d5afe3a63 314 #else
Gustavo_Eduardo338 12:ff38af85a4ba 315 int PIN_D15 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 316 #endif
Gustavo_Eduardo338 11:965d5afe3a63 317
Gustavo_Eduardo338 10:5580ae8cbe7e 318
Gustavo_Eduardo338 10:5580ae8cbe7e 319 //Hasta aqui la definicion de macos
Gustavo_Eduardo338 10:5580ae8cbe7e 320 //Digital Inputs --> DATA VALUE
Gustavo_Eduardo338 12:ff38af85a4ba 321 uint16_t DigitalInput_DATA = 0x0000; // Mapa de bits con los valores de la entrada digital segun la posicion
Gustavo_Eduardo338 12:ff38af85a4ba 322 uint16_t DigitalOutput_DATA = 0x0000; // Mapa de bits con los valores de la entrada digital segun la posicion
Gustavo_Eduardo338 12:ff38af85a4ba 323 uint16_t ESTADO_ENTRADAS_DIGITALES = 0x0000; // Mapa de bits de los estados de las entradas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 324 uint16_t ESTADO_SALIDAS_DIGITALES = 0x0000; // Mapa de bits de las salidas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 325 uint16_t ESTADO_ENTRADAS_DIGITALES_OLD = 0x0000;// Almacena temporalmente el estado de las salidas digitales.
Gustavo_Eduardo338 10:5580ae8cbe7e 326 uint16_t PAQUETE_ID = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 327 static bool CONNECTED;
Gustavo_Eduardo338 10:5580ae8cbe7e 328 float AnalogInput_Ted [6] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; //Si el TED es cero, es que no está en uso
Gustavo_Eduardo338 10:5580ae8cbe7e 329
Gustavo_Eduardo338 10:5580ae8cbe7e 330 //Digital input, cantidad, posiciones --> de todos, ted = 0, tipico hasta 16
Gustavo_Eduardo338 10:5580ae8cbe7e 331 uint16_t DigitalInput_Pos = 0x0000; //Mapa de bits, seran usados los bytes del TED 16 bits
Gustavo_Eduardo338 10:5580ae8cbe7e 332
Gustavo_Eduardo338 10:5580ae8cbe7e 333 //Digital output, cantidad, pocisiones --> de todos, ted = 0, tipico hasta 16
Gustavo_Eduardo338 10:5580ae8cbe7e 334 uint16_t DigitalOutput_Pos = 0x0000; //Mapa de bits, seran usados los bytes del TED 16 bits
Gustavo_Eduardo338 10:5580ae8cbe7e 335
Gustavo_Eduardo338 10:5580ae8cbe7e 336 uint16_t DigitalPwm_Pos = 0x0000; //Mapa de bits, seran usados los bytes del TED 16 bits
Gustavo_Eduardo338 10:5580ae8cbe7e 337
Gustavo_Eduardo338 10:5580ae8cbe7e 338 //Digital input, cantidad, posiciones --> de todos, ted = 0, tipico hasta 16
Gustavo_Eduardo338 11:965d5afe3a63 339 uint8_t AnalogInput_Pos = 0x0000; //Mapa de bits, seran usados los bytes del TED 8 bits
Gustavo_Eduardo338 10:5580ae8cbe7e 340
Gustavo_Eduardo338 10:5580ae8cbe7e 341 //Digital output, cantidad, pocisiones --> de todos, ted = 0, tipico hasta 16
Gustavo_Eduardo338 11:965d5afe3a63 342 uint8_t AnalogOutput_Pos = 0x0000; //Mapa de bits, seran usados los bytes del TED 8 bits
Gustavo_Eduardo338 10:5580ae8cbe7e 343
dixysleo 0:58e350255405 344
Gustavo_Eduardo338 5:a8c07a29df8a 345 // Declarando los pines
Gustavo_Eduardo338 7:fb4c6c1dd3a9 346 //static int32_t send_config = 0;
dixysleo 0:58e350255405 347
Gustavo_Eduardo338 10:5580ae8cbe7e 348 static int8_t SEND_CONFIG_GENERAL = 0;
Gustavo_Eduardo338 11:965d5afe3a63 349 static int8_t SEND_CONFIG_ANALOG_0, SEND_CONFIG_ANALOG_1, SEND_CONFIG_ANALOG_2, SEND_CONFIG_ANALOG_3, SEND_CONFIG_ANALOG_4, SEND_CONFIG_ANALOG_5;
Gustavo_Eduardo338 12:ff38af85a4ba 350 static bool publish_D0; // Indica si es necesario informar al gateway sobre estado de las salidas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 351 static bool publish_D1; // Indica si es necesario informar al gateway sobre estado de las entradas digitales
Gustavo_Eduardo338 8:c4130ea78471 352
Gustavo_Eduardo338 5:a8c07a29df8a 353 BLE ble;
Gustavo_Eduardo338 5:a8c07a29df8a 354
Gustavo_Eduardo338 7:fb4c6c1dd3a9 355 // Permite imprimir mensajes en la consola
dixysleo 0:58e350255405 356 Serial pc(USBTX, USBRX);
dixysleo 0:58e350255405 357
Gustavo_Eduardo338 11:965d5afe3a63 358 // Para las entradas digitales (Botones)
dixysleo 0:58e350255405 359
Gustavo_Eduardo338 11:965d5afe3a63 360 // Para las entradas analogicas (Sensores)
Gustavo_Eduardo338 12:ff38af85a4ba 361 static float value_A5, value_A4, value_A3, value_A2, value_A1, value_A0;
Gustavo_Eduardo338 12:ff38af85a4ba 362
Gustavo_Eduardo338 11:965d5afe3a63 363
dixysleo 0:58e350255405 364 // The Nordic UART Service
dixysleo 0:58e350255405 365 static const uint8_t uart_base_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
dixysleo 0:58e350255405 366 static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
dixysleo 0:58e350255405 367 static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
dixysleo 0:58e350255405 368 static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};
dixysleo 0:58e350255405 369
Gustavo_Eduardo338 7:fb4c6c1dd3a9 370 // Trama de Configuracion de los Pines (a).
Gustavo_Eduardo338 10:5580ae8cbe7e 371 static uint8_t TRAMA_CONFIG_GENERAL[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00}; // Length 12
Gustavo_Eduardo338 12:ff38af85a4ba 372 static uint8_t TRAMA_CONFIG_ANALOG[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Length 6
Gustavo_Eduardo338 12:ff38af85a4ba 373 static uint8_t LECTURA_DIGITAL[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Length 6
Gustavo_Eduardo338 12:ff38af85a4ba 374 static uint8_t LECTURA_ANALOGICA[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Length 5
dixysleo 0:58e350255405 375
dixysleo 0:58e350255405 376 uint8_t txPayload[TXRX_BUF_LEN] = {0,};
dixysleo 0:58e350255405 377 uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
dixysleo 0:58e350255405 378
dixysleo 0:58e350255405 379 GattCharacteristic txCharacteristic (uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
dixysleo 0:58e350255405 380 GattCharacteristic rxCharacteristic (uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
dixysleo 0:58e350255405 381 GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic};
dixysleo 0:58e350255405 382 GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
dixysleo 0:58e350255405 383
Gustavo_Eduardo338 10:5580ae8cbe7e 384
dixysleo 0:58e350255405 385 // https://developer.mbed.org/forum/repo-61676-BLE_GAP_Example-community/topic/17193/
Gustavo_Eduardo338 4:a43cbe8aed6a 386 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
Gustavo_Eduardo338 4:a43cbe8aed6a 387 {
Gustavo_Eduardo338 4:a43cbe8aed6a 388 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
dixysleo 0:58e350255405 389 pc.printf("Disconnected \r\n");
dixysleo 0:58e350255405 390 pc.printf("Restart advertising \r\n");
Gustavo_Eduardo338 4:a43cbe8aed6a 391 ble.startAdvertising();
Gustavo_Eduardo338 9:501a9e6710d2 392
Gustavo_Eduardo338 10:5580ae8cbe7e 393 SEND_CONFIG_GENERAL = 0;
Gustavo_Eduardo338 10:5580ae8cbe7e 394
Gustavo_Eduardo338 10:5580ae8cbe7e 395 // En caso de no completarse el envio de la configuraciones las detenemos por completo, y dehabilitamos el envio.
Gustavo_Eduardo338 11:965d5afe3a63 396 SEND_CONFIG_ANALOG_0 = OFF;
Gustavo_Eduardo338 11:965d5afe3a63 397 SEND_CONFIG_ANALOG_1 = OFF;
Gustavo_Eduardo338 11:965d5afe3a63 398 SEND_CONFIG_ANALOG_2 = OFF;
Gustavo_Eduardo338 11:965d5afe3a63 399 SEND_CONFIG_ANALOG_3 = OFF;
Gustavo_Eduardo338 11:965d5afe3a63 400 SEND_CONFIG_ANALOG_4 = OFF;
Gustavo_Eduardo338 11:965d5afe3a63 401 SEND_CONFIG_ANALOG_5 = OFF;
Gustavo_Eduardo338 12:ff38af85a4ba 402 CONNECTED = false;
Gustavo_Eduardo338 12:ff38af85a4ba 403 PIN_CONNECT = 0;
Gustavo_Eduardo338 10:5580ae8cbe7e 404 }
Gustavo_Eduardo338 10:5580ae8cbe7e 405
Gustavo_Eduardo338 11:965d5afe3a63 406 // Carga la configuración de las entradas digitales del MOTE.
Gustavo_Eduardo338 10:5580ae8cbe7e 407 void readDigitalInputs_Value ()
Gustavo_Eduardo338 10:5580ae8cbe7e 408 {
Gustavo_Eduardo338 11:965d5afe3a63 409 DigitalInput_DATA = (uint16_t) (((D15_TYPE == IN ? 1:0) << 15) | ((D14_TYPE == IN?1:0)<< 14) | ((D13_TYPE == IN ?1:0) << 13) | ((D12_TYPE == IN ?1:0) << 12) | ((D11_TYPE == IN ?1:0) << 11) | ((D10_TYPE == IN? 1:0) << 10) | ((D9_TYPE == IN? 1:0) << 9) | ((D8_TYPE == IN ? 1:0) << 8) | ((D7_TYPE == IN ? 1:0) << 7) | ((D6_TYPE == IN ? 1:0) << 6) |((D5_TYPE == IN ? 1:0) << 5) | ((D4_TYPE == IN ? 1:0) << 4) | ((D3_TYPE == IN ? 1:0) << 3) | ((D2_TYPE == IN ? 1:0) << 2));
Gustavo_Eduardo338 11:965d5afe3a63 410 }
Gustavo_Eduardo338 12:ff38af85a4ba 411 // Crea el Mapa de bits de las posiciones ocupadas de los pines digitales de salidas.
Gustavo_Eduardo338 12:ff38af85a4ba 412 void readActuadoresDigitales()
Gustavo_Eduardo338 12:ff38af85a4ba 413 {
Gustavo_Eduardo338 12:ff38af85a4ba 414 DigitalOutput_DATA = (uint16_t) ((D15_TYPE == OUT ? 1 : 0) << 15) | ((D14_TYPE == OUT ? 1 : 0) << 14) | ((D13_TYPE == OUT ? 1 : 0) << 13) | ((D12_TYPE == OUT ? 1 : 0) << 12);
Gustavo_Eduardo338 12:ff38af85a4ba 415 DigitalOutput_DATA |= (uint16_t) ((D11_TYPE == OUT ? 1 : 0) << 11) | ((D10_TYPE == OUT ? 1 : 0) << 10) | ((D9_TYPE == OUT ? 1 : 0) << 9) | ((D8_TYPE == OUT ? 1 : 0) << 8);
Gustavo_Eduardo338 12:ff38af85a4ba 416 DigitalOutput_DATA |= (uint16_t) ((D7_TYPE == OUT ? 1 : 0) << 7) | ((D6_TYPE == OUT ? 1 : 0) << 6) | ((D5_TYPE == OUT ? 1 : 0) << 5) | ((D4_TYPE == OUT ? 1 : 0) << 4);
Gustavo_Eduardo338 12:ff38af85a4ba 417 DigitalOutput_DATA |= (uint16_t) ((D3_TYPE == OUT ? 1 : 0) << 3) | ((D2_TYPE == OUT ? 1 : 0) << 2) ;
Gustavo_Eduardo338 12:ff38af85a4ba 418 }
Gustavo_Eduardo338 11:965d5afe3a63 419
Gustavo_Eduardo338 12:ff38af85a4ba 420 // Crea el Mapa de bits de los estados de los pines digitales de entrada.
Gustavo_Eduardo338 12:ff38af85a4ba 421 void cargarEstadoEntradasDigitales()
Gustavo_Eduardo338 12:ff38af85a4ba 422 {
Gustavo_Eduardo338 12:ff38af85a4ba 423 ESTADO_ENTRADAS_DIGITALES = (uint16_t) ((D15_TYPE == IN ? PIN_D15 : 0) << 15) | ((D14_TYPE == IN ? PIN_D14 : 0) << 14) | ((D13_TYPE == IN ? PIN_D13 : 0) << 13) | ((D12_TYPE == IN ? PIN_D12 : 0) << 12);
Gustavo_Eduardo338 12:ff38af85a4ba 424 ESTADO_ENTRADAS_DIGITALES |= (uint16_t) ((D11_TYPE == IN ? PIN_D11 : 0) << 11) | ((D10_TYPE == IN ? PIN_D10 : 0) << 10) | ((D9_TYPE == IN ? PIN_D9 : 0) << 9) | ((D8_TYPE == IN ? PIN_D8 : 0) << 8);
Gustavo_Eduardo338 12:ff38af85a4ba 425 ESTADO_ENTRADAS_DIGITALES |= (uint16_t) ((D7_TYPE == IN ? PIN_D7 : 0) << 7) | ((D6_TYPE == IN ? PIN_D6 : 0) << 6) | ((D5_TYPE == IN ? PIN_D5 : 0) << 5) | ((D4_TYPE == IN ? PIN_D4 : 0) << 4);
Gustavo_Eduardo338 12:ff38af85a4ba 426 ESTADO_ENTRADAS_DIGITALES |= (uint16_t) ((D3_TYPE == IN ? PIN_D3 : 0) << 3) | ((D2_TYPE == IN ? PIN_D2 : 0) << 2) ;
Gustavo_Eduardo338 12:ff38af85a4ba 427 }
Gustavo_Eduardo338 12:ff38af85a4ba 428
Gustavo_Eduardo338 12:ff38af85a4ba 429 // Crea el Mapa de bits de los estados de los pines digitales de salida.
Gustavo_Eduardo338 12:ff38af85a4ba 430 void cargarEstadosSalidasDigitales()
Gustavo_Eduardo338 12:ff38af85a4ba 431 {
Gustavo_Eduardo338 12:ff38af85a4ba 432 ESTADO_SALIDAS_DIGITALES = (uint16_t) ((D15_TYPE == OUT ? PIN_D15 : 0) << 15) | ((D14_TYPE == OUT ? PIN_D14 : 0) << 14) | ((D13_TYPE == OUT ? PIN_D13 : 0) << 13) | ((D12_TYPE == OUT ? PIN_D12 : 0) << 12);
Gustavo_Eduardo338 12:ff38af85a4ba 433 ESTADO_SALIDAS_DIGITALES |= (uint16_t) ((D11_TYPE == OUT ? PIN_D11 : 0) << 11) | ((D10_TYPE == OUT ? PIN_D10 : 0) << 10) | ((D9_TYPE == OUT ? PIN_D9 : 0) << 9) | ((D8_TYPE == OUT ? PIN_D8 : 0) << 8);
Gustavo_Eduardo338 12:ff38af85a4ba 434 ESTADO_SALIDAS_DIGITALES |= (uint16_t) ((D7_TYPE == OUT ? PIN_D7 : 0) << 7) | ((D6_TYPE == OUT ? PIN_D6 : 0) << 6) | ((D5_TYPE == OUT ? PIN_D5 : 0) << 5) | ((D4_TYPE == OUT ? PIN_D4 : 0) << 4);
Gustavo_Eduardo338 12:ff38af85a4ba 435 ESTADO_SALIDAS_DIGITALES |= (uint16_t) ((D3_TYPE == OUT ? PIN_D3 : 0) << 3) | ((D2_TYPE == OUT ? PIN_D2 : 0) << 2) ;
Gustavo_Eduardo338 10:5580ae8cbe7e 436 }
Gustavo_Eduardo338 10:5580ae8cbe7e 437
Gustavo_Eduardo338 10:5580ae8cbe7e 438 //Funcion para crear los extra bytes
Gustavo_Eduardo338 10:5580ae8cbe7e 439 void makeExtraBytes_CONFIG ()
Gustavo_Eduardo338 10:5580ae8cbe7e 440 {
Gustavo_Eduardo338 10:5580ae8cbe7e 441 // Teds de los Analog inputs
Gustavo_Eduardo338 10:5580ae8cbe7e 442 AnalogInput_Ted [0] = A0_TED;
Gustavo_Eduardo338 10:5580ae8cbe7e 443 AnalogInput_Ted [1] = A1_TED;
Gustavo_Eduardo338 10:5580ae8cbe7e 444 AnalogInput_Ted [2] = A2_TED;
Gustavo_Eduardo338 10:5580ae8cbe7e 445 AnalogInput_Ted [3] = A3_TED;
Gustavo_Eduardo338 10:5580ae8cbe7e 446 AnalogInput_Ted [4] = A4_TED;
Gustavo_Eduardo338 10:5580ae8cbe7e 447 AnalogInput_Ted [5] = A5_TED;
Gustavo_Eduardo338 10:5580ae8cbe7e 448
Gustavo_Eduardo338 12:ff38af85a4ba 449 DigitalInput_Pos = (uint16_t) ((D15_TYPE == IN ? 1:0) << 15) | ((D14_TYPE == IN ? 1:0) << 14) | ((D13_TYPE == IN ? 1:0) << 13)| ((D12_TYPE == IN ? 1:0) << 12);
Gustavo_Eduardo338 12:ff38af85a4ba 450 DigitalInput_Pos |= (uint16_t) ((D11_TYPE == IN ? 1:0) << 11) | ((D10_TYPE == IN ? 1:0) << 10) | ((D9_TYPE == IN ? 1:0) << 9) | ((D8_TYPE == IN ? 1:0) << 8);
Gustavo_Eduardo338 12:ff38af85a4ba 451 DigitalInput_Pos |= (uint16_t) ((D7_TYPE == IN ? 1:0) << 7) | ((D6_TYPE == IN ? 1:0) << 6) | ((D5_TYPE == IN ? 1:0) << 5) | ((D4_TYPE == IN ? 1:0) << 4);
Gustavo_Eduardo338 12:ff38af85a4ba 452 DigitalInput_Pos |= (uint16_t) ((D3_TYPE == IN ? 1:0) << 3) | ((D2_TYPE == IN ? 1:0) << 2) | ((D13_TYPE == IN ? 1:0) << 1) | ((D12_TYPE == IN ? 1:0));
Gustavo_Eduardo338 10:5580ae8cbe7e 453
Gustavo_Eduardo338 12:ff38af85a4ba 454 DigitalOutput_Pos = (uint16_t) ((D15_TYPE == OUT ? 1:0) << 15) | ((D14_TYPE == OUT ? 1:0) << 14) | ((D13_TYPE == OUT ? 1:0) << 13)| ((D12_TYPE == OUT ? 1:0) << 12);
Gustavo_Eduardo338 12:ff38af85a4ba 455 DigitalOutput_Pos |= (uint16_t) ((D11_TYPE == OUT ? 1:0) << 11) | ((D10_TYPE == OUT ? 1:0) << 10) | ((D9_TYPE == OUT ? 1:0) << 9) | ((D8_TYPE == OUT ? 1:0) << 8);
Gustavo_Eduardo338 12:ff38af85a4ba 456 DigitalOutput_Pos |= (uint16_t) ((D7_TYPE == OUT ? 1:0) << 7) | ((D6_TYPE == OUT ? 1:0) << 6) | ((D5_TYPE == OUT ? 1:0) << 5) | ((D4_TYPE == OUT ? 1:0) << 4);
Gustavo_Eduardo338 12:ff38af85a4ba 457 DigitalOutput_Pos |= (uint16_t) ((D3_TYPE == OUT ? 1:0) << 3) | ((D2_TYPE == OUT ? 1:0) << 2) | ((D13_TYPE == OUT ? 1:0) << 1) | ((D12_TYPE == OUT ? 1:0));
Gustavo_Eduardo338 10:5580ae8cbe7e 458
Gustavo_Eduardo338 12:ff38af85a4ba 459 DigitalPwm_Pos = (uint16_t) ((D15_TYPE == PWM ? 1:0) << 15)| ((D14_TYPE == PWM ? 1:0) << 14) | ((D13_TYPE == PWM ? 1:0) << 13)| ((D12_TYPE == PWM ? 1:0) << 12);
Gustavo_Eduardo338 12:ff38af85a4ba 460 DigitalPwm_Pos |= (uint16_t) ((D11_TYPE == PWM ? 1:0) << 11) | ((D10_TYPE == PWM ? 1:0) << 10) | ((D9_TYPE == PWM ? 1:0) << 9) | ((D8_TYPE == PWM ? 1:0) << 8);
Gustavo_Eduardo338 12:ff38af85a4ba 461 DigitalPwm_Pos |= (uint16_t) ((D7_TYPE == PWM ? 1:0) << 7) | ((D6_TYPE == PWM ? 1:0) << 6) | ((D5_TYPE == PWM ? 1:0) << 5) | ((D4_TYPE == PWM ? 1:0) << 4);
Gustavo_Eduardo338 12:ff38af85a4ba 462 DigitalPwm_Pos |= (uint16_t) ((D3_TYPE == PWM ? 1:0) << 3) | ((D2_TYPE == PWM ? 1:0) << 2) | ((D13_TYPE == PWM ? 1:0) << 1) | ((D12_TYPE == PWM ? 1:0));
Gustavo_Eduardo338 12:ff38af85a4ba 463
Gustavo_Eduardo338 10:5580ae8cbe7e 464 AnalogInput_Pos = (uint16_t) ((A5_USO << 5) | (A4_USO << 4) | (A3_USO << 3) | (A2_USO << 2) | (A1_USO << 1) | (A0_USO << 0));
Gustavo_Eduardo338 12:ff38af85a4ba 465
Gustavo_Eduardo338 10:5580ae8cbe7e 466
Gustavo_Eduardo338 10:5580ae8cbe7e 467 //para probar
Gustavo_Eduardo338 10:5580ae8cbe7e 468 pc.printf("DigitalInput_Pos = %x \r\n", DigitalInput_Pos);
Gustavo_Eduardo338 10:5580ae8cbe7e 469 pc.printf("DigitalOutput_Pos = %x \r\n", DigitalOutput_Pos);
Gustavo_Eduardo338 10:5580ae8cbe7e 470 pc.printf("AnalogInput_Pos = %x \r\n", AnalogInput_Pos);
Gustavo_Eduardo338 10:5580ae8cbe7e 471 pc.printf("AnalogOutput_Pos = %x \r\n", DigitalPwm_Pos);
Gustavo_Eduardo338 10:5580ae8cbe7e 472 pc.printf("---------------------------\r\n");
Gustavo_Eduardo338 10:5580ae8cbe7e 473
Gustavo_Eduardo338 10:5580ae8cbe7e 474 // Definimos la trama de configuracion general
Gustavo_Eduardo338 10:5580ae8cbe7e 475 TRAMA_CONFIG_GENERAL [0] = 0xC1; // Codigo de configuracion general
Gustavo_Eduardo338 10:5580ae8cbe7e 476 TRAMA_CONFIG_GENERAL [1] = 0xA1; // Codigo de entradas analogicas
Gustavo_Eduardo338 10:5580ae8cbe7e 477 TRAMA_CONFIG_GENERAL [2] = AnalogInput_Pos; // Valor de las entradas analogicas
Gustavo_Eduardo338 10:5580ae8cbe7e 478 TRAMA_CONFIG_GENERAL [3] = 0xA0; // Codigo de las salidas analogicas
Gustavo_Eduardo338 10:5580ae8cbe7e 479 TRAMA_CONFIG_GENERAL [4] = (DigitalPwm_Pos >> 8); // Valor de las salidas analogicas
Gustavo_Eduardo338 10:5580ae8cbe7e 480 TRAMA_CONFIG_GENERAL [5] = (DigitalPwm_Pos); // Valor de las salidas analogicas
Gustavo_Eduardo338 10:5580ae8cbe7e 481 TRAMA_CONFIG_GENERAL [6] = 0xD1; // Codigo de las entradas digitales
Gustavo_Eduardo338 10:5580ae8cbe7e 482 TRAMA_CONFIG_GENERAL [7] = (DigitalInput_Pos >> 8);
Gustavo_Eduardo338 10:5580ae8cbe7e 483 TRAMA_CONFIG_GENERAL [8] = DigitalInput_Pos;
Gustavo_Eduardo338 10:5580ae8cbe7e 484 TRAMA_CONFIG_GENERAL [9] = 0xD0; // Codigo de las salidas difitales
Gustavo_Eduardo338 10:5580ae8cbe7e 485 TRAMA_CONFIG_GENERAL [10] = (DigitalOutput_Pos>> 8);
Gustavo_Eduardo338 10:5580ae8cbe7e 486 TRAMA_CONFIG_GENERAL [11] = DigitalOutput_Pos;
Gustavo_Eduardo338 5:a8c07a29df8a 487 }
Gustavo_Eduardo338 10:5580ae8cbe7e 488
Gustavo_Eduardo338 10:5580ae8cbe7e 489
Gustavo_Eduardo338 10:5580ae8cbe7e 490
Gustavo_Eduardo338 5:a8c07a29df8a 491 // Ingresa por este metdo unicamente la primera vez que se conecta al mote.
Gustavo_Eduardo338 5:a8c07a29df8a 492 // Tomado desde: https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_LEDBlinker/file/dc392bde2b3c/main.cpp
Gustavo_Eduardo338 5:a8c07a29df8a 493 void connectionCallback(const Gap::ConnectionCallbackParams_t *)
Gustavo_Eduardo338 5:a8c07a29df8a 494 {
Gustavo_Eduardo338 5:a8c07a29df8a 495 pc.printf("connectionCallback \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 496 PIN_CONNECT = 1;
Gustavo_Eduardo338 10:5580ae8cbe7e 497
Gustavo_Eduardo338 10:5580ae8cbe7e 498 makeExtraBytes_CONFIG();
Gustavo_Eduardo338 10:5580ae8cbe7e 499 SEND_CONFIG_GENERAL = 1;
Gustavo_Eduardo338 12:ff38af85a4ba 500 CONNECTED = true;
dixysleo 0:58e350255405 501 }
dixysleo 0:58e350255405 502
Gustavo_Eduardo338 5:a8c07a29df8a 503 // Recepta las caracteristicas que se desea escribir en el mote.
dixysleo 0:58e350255405 504 void WrittenHandler(const GattWriteCallbackParams *Handler)
Gustavo_Eduardo338 4:a43cbe8aed6a 505 {
Gustavo_Eduardo338 12:ff38af85a4ba 506 //pc.printf("WrittenHandler(const GattWriteCallbackParams *Handler) \r\n");
dixysleo 0:58e350255405 507 uint8_t buf[TXRX_BUF_LEN];
dixysleo 0:58e350255405 508 uint16_t bytesRead, index;
Gustavo_Eduardo338 4:a43cbe8aed6a 509
Gustavo_Eduardo338 4:a43cbe8aed6a 510 if (Handler->handle == txCharacteristic.getValueAttribute().getHandle()) {
dixysleo 0:58e350255405 511 ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead);
dixysleo 0:58e350255405 512 memset(txPayload, 0, TXRX_BUF_LEN);
Gustavo_Eduardo338 4:a43cbe8aed6a 513 memcpy(txPayload, buf, TXRX_BUF_LEN);
Gustavo_Eduardo338 4:a43cbe8aed6a 514
dixysleo 0:58e350255405 515 for(index=0; index<bytesRead; index++)
dixysleo 0:58e350255405 516 pc.putc(buf[index]);
Gustavo_Eduardo338 4:a43cbe8aed6a 517
Gustavo_Eduardo338 12:ff38af85a4ba 518 //pc.printf("Leemos la trama: \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 519 //for(index=0; index<bytesRead; index++) {
Gustavo_Eduardo338 12:ff38af85a4ba 520 //pc.printf("buf[%02x]: %02x\r\n", index, buf[index]);
Gustavo_Eduardo338 12:ff38af85a4ba 521 //}
Gustavo_Eduardo338 9:501a9e6710d2 522
Gustavo_Eduardo338 10:5580ae8cbe7e 523 // Desde el telefono desactiva el envio de tramas de configuracion general o de cada sensor.
Gustavo_Eduardo338 10:5580ae8cbe7e 524 if (buf[0] == 0xDC) { // Dato Configuracion
Gustavo_Eduardo338 10:5580ae8cbe7e 525 if(buf[1] == 0xC1) { // Hace referencia a la configuración general
Gustavo_Eduardo338 10:5580ae8cbe7e 526 SEND_CONFIG_GENERAL = buf[2]; // Debe ser cero, hace que ya no se vuelva a enviar la conf general del mote
Gustavo_Eduardo338 10:5580ae8cbe7e 527
Gustavo_Eduardo338 10:5580ae8cbe7e 528 // Comprueba si estan habilitados las salidas analogicas, y las
Gustavo_Eduardo338 10:5580ae8cbe7e 529 // inicializa a 1 para que mas adelante envie la configuracion
Gustavo_Eduardo338 10:5580ae8cbe7e 530 // de cada sensor
Gustavo_Eduardo338 10:5580ae8cbe7e 531 SEND_CONFIG_ANALOG_0 = (A0_USO == ON)?1:0;
Gustavo_Eduardo338 10:5580ae8cbe7e 532 SEND_CONFIG_ANALOG_1 = (A1_USO == ON)?1:0;
Gustavo_Eduardo338 10:5580ae8cbe7e 533 SEND_CONFIG_ANALOG_2 = (A2_USO == ON)?1:0;
Gustavo_Eduardo338 10:5580ae8cbe7e 534 SEND_CONFIG_ANALOG_3 = (A3_USO == ON)?1:0;
Gustavo_Eduardo338 10:5580ae8cbe7e 535 SEND_CONFIG_ANALOG_4 = (A4_USO == ON)?1:0;
Gustavo_Eduardo338 10:5580ae8cbe7e 536 SEND_CONFIG_ANALOG_5 = (A5_USO == ON)?1:0;
Gustavo_Eduardo338 12:ff38af85a4ba 537
Gustavo_Eduardo338 12:ff38af85a4ba 538 publish_D1 = true; // bandera a true, para que el Mote deba obligatoriamente enviar al gateway el estado de las entradas digitales.
Gustavo_Eduardo338 12:ff38af85a4ba 539 publish_D0 = true; // bandera a true, para que el Mote deba obligatoriamente enviar al gateway el estado de las entradas digitales.
Gustavo_Eduardo338 10:5580ae8cbe7e 540 }
Gustavo_Eduardo338 9:501a9e6710d2 541
Gustavo_Eduardo338 10:5580ae8cbe7e 542 // Maneja las Tramas de confirmacion de la configuracion detallada de cada senssor analogico
Gustavo_Eduardo338 10:5580ae8cbe7e 543 if(buf[1] == 0xC2) { // Hace referencia a la configuracion detallada por sensor.
Gustavo_Eduardo338 10:5580ae8cbe7e 544 switch (buf[2]) { // Evalua la posición
Gustavo_Eduardo338 10:5580ae8cbe7e 545 case 0x00: // 0xA0
Gustavo_Eduardo338 10:5580ae8cbe7e 546 SEND_CONFIG_ANALOG_0 = buf[3]; // buf[3] debe ser 0, para detenerse el envió SEND_CONFIG_ANALOG_0
Gustavo_Eduardo338 10:5580ae8cbe7e 547 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 548 case 0x01: // 0xA1
Gustavo_Eduardo338 10:5580ae8cbe7e 549 SEND_CONFIG_ANALOG_1 = buf[3]; // buf[3] debe ser 0, para detenerse el envió SEND_CONFIG_ANALOG_1
Gustavo_Eduardo338 10:5580ae8cbe7e 550 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 551 case 0x02: // 0xA2
Gustavo_Eduardo338 10:5580ae8cbe7e 552 SEND_CONFIG_ANALOG_2 = buf[3]; // buf[3] debe ser 0, para detenerse el envió SEND_CONFIG_ANALOG_2
Gustavo_Eduardo338 10:5580ae8cbe7e 553 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 554 case 0x03: // 0xA3
Gustavo_Eduardo338 10:5580ae8cbe7e 555 SEND_CONFIG_ANALOG_3 = buf[3]; // buf[3] debe ser 0, para detenerse el envió SEND_CONFIG_ANALOG_3
Gustavo_Eduardo338 10:5580ae8cbe7e 556 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 557 case 0x04: // 0xA4
Gustavo_Eduardo338 10:5580ae8cbe7e 558 SEND_CONFIG_ANALOG_4 = buf[3]; // buf[3] debe ser 0, para detenerse el envió SEND_CONFIG_ANALOG_4
Gustavo_Eduardo338 10:5580ae8cbe7e 559 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 560 case 0x05: // 0xA5
Gustavo_Eduardo338 10:5580ae8cbe7e 561 SEND_CONFIG_ANALOG_5 = buf[3]; // buf[3] debe ser 0, para detenerse el envió SEND_CONFIG_ANALOG_5
Gustavo_Eduardo338 10:5580ae8cbe7e 562 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 563 }
Gustavo_Eduardo338 10:5580ae8cbe7e 564 }
Gustavo_Eduardo338 12:ff38af85a4ba 565 }else if (buf[0] == 0xAD) {
Gustavo_Eduardo338 12:ff38af85a4ba 566 // Desde el gateway asignamos el nuevo valor del paquete id
Gustavo_Eduardo338 12:ff38af85a4ba 567 // de esta manera al ser el paquete id = 0, no volvera hacer enviado de nuevo las lecturas de digital out al gateway
Gustavo_Eduardo338 12:ff38af85a4ba 568 PAQUETE_ID = (((buf[1] << 8) & 0xFF00) | (buf[2] & 0xFF));
Gustavo_Eduardo338 7:fb4c6c1dd3a9 569 }
Gustavo_Eduardo338 9:501a9e6710d2 570
Gustavo_Eduardo338 7:fb4c6c1dd3a9 571
Gustavo_Eduardo338 7:fb4c6c1dd3a9 572 // Verifico si es una trama de Escitura.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 573 if(buf[0] == 0xEE) {
Gustavo_Eduardo338 12:ff38af85a4ba 574 PAQUETE_ID = (((buf[1] << 8) & 0xFF00) | (buf[2] & 0xFF));
Gustavo_Eduardo338 12:ff38af85a4ba 575 //pc.printf("PAQUETE_ID: %d\r\n", PAQUETE_ID);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 576 // Verifico si es un signal Digital Out
Gustavo_Eduardo338 12:ff38af85a4ba 577 if(buf[3] == 0xD0) {
Gustavo_Eduardo338 12:ff38af85a4ba 578 publish_D0 = true; // indica que el satado de las salidas digitales deben ser enviadas para informar al gateway el estado de las mismas.
Gustavo_Eduardo338 10:5580ae8cbe7e 579 // Evaluo sobre que pin se debe actuar.
Gustavo_Eduardo338 12:ff38af85a4ba 580 switch (buf[4]) {
Gustavo_Eduardo338 10:5580ae8cbe7e 581 case 0x02:
Gustavo_Eduardo338 12:ff38af85a4ba 582 #if D2_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 583 PIN_D2 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 584 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 585 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 586 case 0x03:
Gustavo_Eduardo338 12:ff38af85a4ba 587 #if D3_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 588 PIN_D3 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 12:ff38af85a4ba 589 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 590 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 591 case 0x04:
Gustavo_Eduardo338 12:ff38af85a4ba 592 #if D4_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 593 PIN_D4 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 12:ff38af85a4ba 594 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 595 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 596 case 0x05:
Gustavo_Eduardo338 12:ff38af85a4ba 597 #if D5_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 598 PIN_D5 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 12:ff38af85a4ba 599 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 600 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 601 case 0x06:
Gustavo_Eduardo338 12:ff38af85a4ba 602 #if D6_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 603 PIN_D6 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 12:ff38af85a4ba 604 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 605 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 606 case 0x07:
Gustavo_Eduardo338 12:ff38af85a4ba 607 #if D7_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 608 PIN_D7 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 609 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 610 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 611 case 0x08:
Gustavo_Eduardo338 12:ff38af85a4ba 612 #if D8_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 613 PIN_D8 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 614 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 615 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 616 case 0x09:
Gustavo_Eduardo338 12:ff38af85a4ba 617 #if D9_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 618 PIN_D9 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 619 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 620 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 621 case 0x10:
Gustavo_Eduardo338 12:ff38af85a4ba 622 #if D10_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 623 PIN_D10 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 624 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 625 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 626 case 0x11:
Gustavo_Eduardo338 12:ff38af85a4ba 627 #if D11_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 628 PIN_D11 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 629 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 630 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 631 case 0x12:
Gustavo_Eduardo338 12:ff38af85a4ba 632 #if D12_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 633 PIN_D12 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 634 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 635 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 636 case 0x13:
Gustavo_Eduardo338 12:ff38af85a4ba 637 #if D13_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 638 PIN_D13 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 639 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 640 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 641 case 0x14:
Gustavo_Eduardo338 12:ff38af85a4ba 642 #if D14_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 643 PIN_D14 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 644 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 645 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 646 case 0x15:
Gustavo_Eduardo338 12:ff38af85a4ba 647 #if D15_TYPE == OUT
Gustavo_Eduardo338 12:ff38af85a4ba 648 PIN_D15 = (buf[5] == 0x01) ? 1:0;
Gustavo_Eduardo338 11:965d5afe3a63 649 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 650 break;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 651 }
Gustavo_Eduardo338 9:501a9e6710d2 652 // Verifico si es un signal Analog out
Gustavo_Eduardo338 12:ff38af85a4ba 653 } else if(buf[3] == 0xA0) {
Gustavo_Eduardo338 12:ff38af85a4ba 654 float value = (float)buf[5]/255;
Gustavo_Eduardo338 12:ff38af85a4ba 655 bool enviar_trama = false;
Gustavo_Eduardo338 12:ff38af85a4ba 656 int posicion = 0x00;
Gustavo_Eduardo338 12:ff38af85a4ba 657 switch (buf[4]) {
Gustavo_Eduardo338 10:5580ae8cbe7e 658 case 0x05:
Gustavo_Eduardo338 12:ff38af85a4ba 659 #if D5_TYPE == PWM
Gustavo_Eduardo338 12:ff38af85a4ba 660 PIN_D5 = value;
Gustavo_Eduardo338 12:ff38af85a4ba 661 posicion = 0x05;
Gustavo_Eduardo338 12:ff38af85a4ba 662 enviar_trama = true;
Gustavo_Eduardo338 12:ff38af85a4ba 663 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 664 break;
Gustavo_Eduardo338 10:5580ae8cbe7e 665 case 0x06:
Gustavo_Eduardo338 12:ff38af85a4ba 666 #if D6_TYPE == PWM
Gustavo_Eduardo338 12:ff38af85a4ba 667 PIN_D6 = value;
Gustavo_Eduardo338 12:ff38af85a4ba 668 posicion = 0x06;
Gustavo_Eduardo338 12:ff38af85a4ba 669 enviar_trama = true;
Gustavo_Eduardo338 11:965d5afe3a63 670 #endif
Gustavo_Eduardo338 10:5580ae8cbe7e 671 break;
Gustavo_Eduardo338 12:ff38af85a4ba 672 case 0x09:
Gustavo_Eduardo338 12:ff38af85a4ba 673 #if D9_TYPE == PWM
Gustavo_Eduardo338 12:ff38af85a4ba 674 PIN_D9 = value;
Gustavo_Eduardo338 12:ff38af85a4ba 675 posicion = 0x09;
Gustavo_Eduardo338 12:ff38af85a4ba 676 enviar_trama = true;
Gustavo_Eduardo338 12:ff38af85a4ba 677 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 678 break;
Gustavo_Eduardo338 12:ff38af85a4ba 679 }
Gustavo_Eduardo338 12:ff38af85a4ba 680
Gustavo_Eduardo338 12:ff38af85a4ba 681 if (enviar_trama){
Gustavo_Eduardo338 12:ff38af85a4ba 682 LECTURA_DIGITAL[0] = 0xDD; // Codigo Datos
Gustavo_Eduardo338 12:ff38af85a4ba 683 LECTURA_DIGITAL[1] = 0xA0; // A0 --> Codigo Senial (Analog Output)
Gustavo_Eduardo338 12:ff38af85a4ba 684 LECTURA_DIGITAL[2] = posicion; // Posicion de la interfaz
Gustavo_Eduardo338 12:ff38af85a4ba 685 LECTURA_DIGITAL[3] = (int8_t)(PAQUETE_ID >> 8); // primera parte del paquete
Gustavo_Eduardo338 12:ff38af85a4ba 686 LECTURA_DIGITAL[4] = (int8_t)PAQUETE_ID ; // segunda parte del paquete
Gustavo_Eduardo338 12:ff38af85a4ba 687 LECTURA_DIGITAL[5] = buf[5]; // Valor de las salidas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 688 PAQUETE_ID = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 689 pc.printf("PWM LECTURA_DIGITAL %x \r\n", LECTURA_DIGITAL);
Gustavo_Eduardo338 12:ff38af85a4ba 690 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 6); // Para el RTD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 691 }
dixysleo 0:58e350255405 692 }
dixysleo 0:58e350255405 693 }
dixysleo 0:58e350255405 694 }
dixysleo 0:58e350255405 695 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 696
Gustavo_Eduardo338 10:5580ae8cbe7e 697
dixysleo 0:58e350255405 698 /*
Gustavo_Eduardo338 7:fb4c6c1dd3a9 699 * Desde este metodo envia las tramas al Gateway.
dixysleo 0:58e350255405 700 */
dixysleo 0:58e350255405 701 void m_status_check_handle(void)
Gustavo_Eduardo338 12:ff38af85a4ba 702 {
Gustavo_Eduardo338 12:ff38af85a4ba 703 // Verifica si alguien esta conectado para enviar las tramas a través de Bluetooth.
Gustavo_Eduardo338 12:ff38af85a4ba 704 if (CONNECTED){
Gustavo_Eduardo338 12:ff38af85a4ba 705 if (SEND_CONFIG_GENERAL == 1) {
Gustavo_Eduardo338 12:ff38af85a4ba 706 // Envia la configuracion Genaral del Mote.
Gustavo_Eduardo338 12:ff38af85a4ba 707 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_GENERAL, 12);
Gustavo_Eduardo338 12:ff38af85a4ba 708 }
Gustavo_Eduardo338 12:ff38af85a4ba 709
Gustavo_Eduardo338 12:ff38af85a4ba 710 // Envio de las tramas de Configuracion de los sensores.
Gustavo_Eduardo338 12:ff38af85a4ba 711 // Evalua si se encuentra pendiente enviar la configuracion de los sensores.
Gustavo_Eduardo338 12:ff38af85a4ba 712 if (SEND_CONFIG_ANALOG_0 == ON||SEND_CONFIG_ANALOG_1 == ON||SEND_CONFIG_ANALOG_2 == ON||SEND_CONFIG_ANALOG_3 == ON||SEND_CONFIG_ANALOG_4 == ON||SEND_CONFIG_ANALOG_5 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 713
Gustavo_Eduardo338 12:ff38af85a4ba 714 TRAMA_CONFIG_ANALOG[0] = (0xC2); // Codigo que indica que la configuracion sera por cada Pin.
Gustavo_Eduardo338 12:ff38af85a4ba 715 TRAMA_CONFIG_ANALOG[1] = (0x05); // Categoria puede ser: A (Actuador) | 5 (Sensor)
Gustavo_Eduardo338 12:ff38af85a4ba 716 TRAMA_CONFIG_ANALOG[2] = (0xAA); // Tipo de Signal AA | DD
Gustavo_Eduardo338 12:ff38af85a4ba 717
Gustavo_Eduardo338 12:ff38af85a4ba 718 if (A0_USO == ON && SEND_CONFIG_ANALOG_0 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 719 TRAMA_CONFIG_ANALOG[3] = 0x00; // Posicion que ocupa en el mote
Gustavo_Eduardo338 12:ff38af85a4ba 720 int16_t TED_PF = (int16_t) (256 * A0_TED); // Conversion Punto Fijo
Gustavo_Eduardo338 12:ff38af85a4ba 721 TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 722 TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 723 pc.printf("SEND_CONFIG_ANALOG_0 \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 724 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
Gustavo_Eduardo338 12:ff38af85a4ba 725
Gustavo_Eduardo338 12:ff38af85a4ba 726 } else if (A1_USO == ON && SEND_CONFIG_ANALOG_1 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 727 TRAMA_CONFIG_ANALOG[3] = 0x01; // Posicion que ocupa en el mote
Gustavo_Eduardo338 12:ff38af85a4ba 728 int16_t TED_PF = (int16_t) (256 * A1_TED); // Conversion Punto Fijo
Gustavo_Eduardo338 12:ff38af85a4ba 729 TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 730 TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 731 pc.printf("SEND_CONFIG_ANALOG_1 \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 732 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
Gustavo_Eduardo338 12:ff38af85a4ba 733
Gustavo_Eduardo338 12:ff38af85a4ba 734 } else if (A2_USO == ON && SEND_CONFIG_ANALOG_2 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 735 TRAMA_CONFIG_ANALOG[3] = 0x02; // Posicion que ocupa en el mote
Gustavo_Eduardo338 12:ff38af85a4ba 736 int16_t TED_PF = (int16_t) (256 * A2_TED); // Conversion Punto Fijo
Gustavo_Eduardo338 12:ff38af85a4ba 737 TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 738 TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 739 pc.printf("SEND_CONFIG_ANALOG_2 \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 740 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
Gustavo_Eduardo338 12:ff38af85a4ba 741
Gustavo_Eduardo338 12:ff38af85a4ba 742 } else if (A3_USO == ON && SEND_CONFIG_ANALOG_3 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 743 TRAMA_CONFIG_ANALOG[3] = 0x03; // Posicion que ocupa en el mote
Gustavo_Eduardo338 12:ff38af85a4ba 744 int16_t TED_PF = (int16_t) (256 * A3_TED); // Conversion Punto Fijo
Gustavo_Eduardo338 12:ff38af85a4ba 745 TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 746 TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 747 pc.printf("SEND_CONFIG_ANALOG_3 \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 748 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
Gustavo_Eduardo338 12:ff38af85a4ba 749
Gustavo_Eduardo338 12:ff38af85a4ba 750 } else if (A4_USO == ON && SEND_CONFIG_ANALOG_4 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 751 TRAMA_CONFIG_ANALOG[3] = 0x04; // Posicion que ocupa en el mote
Gustavo_Eduardo338 12:ff38af85a4ba 752 int16_t TED_PF = (int16_t) (256 * A4_TED); // Conversion Punto Fijo
Gustavo_Eduardo338 12:ff38af85a4ba 753 TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 754 TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 755 pc.printf("SEND_CONFIG_ANALOG_4 \r\n");
Gustavo_Eduardo338 12:ff38af85a4ba 756 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
Gustavo_Eduardo338 12:ff38af85a4ba 757
Gustavo_Eduardo338 12:ff38af85a4ba 758 } else if (A5_USO == ON && SEND_CONFIG_ANALOG_5 == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 759 TRAMA_CONFIG_ANALOG[3] = 0x05; // Posicion que ocupa en el mote
Gustavo_Eduardo338 12:ff38af85a4ba 760 int16_t TED_PF = (int16_t) (256 * A5_TED); // Conversion Punto Fijo
Gustavo_Eduardo338 12:ff38af85a4ba 761 TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 762 TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 763 pc.printf("SEND_CONFIG_ANALOG_5 %x , %x \r\n", TRAMA_CONFIG_ANALOG[4], TRAMA_CONFIG_ANALOG[5]);
Gustavo_Eduardo338 12:ff38af85a4ba 764 //pc.printf("SEND_CONFIG_ANALOG_6 %x, %x, %x, %x, %x, %x, %x \r\n", TRAMA_CONFIG_ANALOG[0], TRAMA_CONFIG_ANALOG[1], TRAMA_CONFIG_ANALOG[2], TRAMA_CONFIG_ANALOG[3], TRAMA_CONFIG_ANALOG[4], TRAMA_CONFIG_ANALOG[5], TRAMA_CONFIG_ANALOG[6] );
Gustavo_Eduardo338 12:ff38af85a4ba 765 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
Gustavo_Eduardo338 12:ff38af85a4ba 766 }
Gustavo_Eduardo338 12:ff38af85a4ba 767 }
Gustavo_Eduardo338 12:ff38af85a4ba 768 // Envio de las tramas de lecturas del Mote.
Gustavo_Eduardo338 12:ff38af85a4ba 769 cargarEstadoEntradasDigitales(); // Leemos los estados digitales.
Gustavo_Eduardo338 12:ff38af85a4ba 770 //pc.printf("ESTADO_ENTRADAS_DIGITALES_OLD %x - ESTADO_ENTRADAS_DIGITALES %x \r\n", ESTADO_ENTRADAS_DIGITALES_OLD, ESTADO_ENTRADAS_DIGITALES);
Gustavo_Eduardo338 12:ff38af85a4ba 771 if (ESTADO_ENTRADAS_DIGITALES_OLD != ESTADO_ENTRADAS_DIGITALES || publish_D1) {
Gustavo_Eduardo338 12:ff38af85a4ba 772 if (publish_D1){
Gustavo_Eduardo338 12:ff38af85a4ba 773 publish_D1 = false;
Gustavo_Eduardo338 12:ff38af85a4ba 774 }
Gustavo_Eduardo338 12:ff38af85a4ba 775 ESTADO_ENTRADAS_DIGITALES_OLD = ESTADO_ENTRADAS_DIGITALES;
Gustavo_Eduardo338 12:ff38af85a4ba 776
Gustavo_Eduardo338 12:ff38af85a4ba 777 LECTURA_DIGITAL[0] = 0xDD; // Codigo de lectura de datos
Gustavo_Eduardo338 12:ff38af85a4ba 778 LECTURA_DIGITAL[1] = 0xD1; // Digital Input
Gustavo_Eduardo338 12:ff38af85a4ba 779 LECTURA_DIGITAL[2] = (int8_t)(ESTADO_ENTRADAS_DIGITALES >> 8); // valores de las interfaces digitales
Gustavo_Eduardo338 12:ff38af85a4ba 780 LECTURA_DIGITAL[3] = (int8_t)(ESTADO_ENTRADAS_DIGITALES); // valores de las interfaces digitales
Gustavo_Eduardo338 12:ff38af85a4ba 781 pc.printf("Envio LECTURA_DIGITAL %x \r\n", ESTADO_ENTRADAS_DIGITALES); // Imprimo en terminal lo que esta enviando desde el mote.
Gustavo_Eduardo338 12:ff38af85a4ba 782
Gustavo_Eduardo338 12:ff38af85a4ba 783 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 4); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 784
Gustavo_Eduardo338 12:ff38af85a4ba 785 }else if (PAQUETE_ID != 0 || publish_D0) {
Gustavo_Eduardo338 12:ff38af85a4ba 786 if (publish_D0){
Gustavo_Eduardo338 12:ff38af85a4ba 787 publish_D0 = false;
Gustavo_Eduardo338 12:ff38af85a4ba 788 }
Gustavo_Eduardo338 12:ff38af85a4ba 789 // Lecturas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 790 cargarEstadosSalidasDigitales();
Gustavo_Eduardo338 12:ff38af85a4ba 791
Gustavo_Eduardo338 12:ff38af85a4ba 792 pc.printf("ESTADO_SALIDAS_DIGITALES: %x \r\n", ESTADO_SALIDAS_DIGITALES);
Gustavo_Eduardo338 12:ff38af85a4ba 793 LECTURA_DIGITAL[0] = 0xDD; // Codigo
Gustavo_Eduardo338 12:ff38af85a4ba 794 LECTURA_DIGITAL[1] = 0xD0; // D0 --> Digital Output
Gustavo_Eduardo338 12:ff38af85a4ba 795 LECTURA_DIGITAL[2] = (int8_t)(PAQUETE_ID >> 8); // primera parte del paquete
Gustavo_Eduardo338 12:ff38af85a4ba 796 LECTURA_DIGITAL[3] = (int8_t)PAQUETE_ID ; // segunda parte del paquete
Gustavo_Eduardo338 12:ff38af85a4ba 797 LECTURA_DIGITAL[4] = (int8_t)(ESTADO_SALIDAS_DIGITALES >> 8); // Valor de las salidas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 798 LECTURA_DIGITAL[5] = (int8_t)(ESTADO_SALIDAS_DIGITALES); // Valor de las salidas digitales
Gustavo_Eduardo338 12:ff38af85a4ba 799
Gustavo_Eduardo338 12:ff38af85a4ba 800 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 6); // Para el RTD
Gustavo_Eduardo338 10:5580ae8cbe7e 801 }
Gustavo_Eduardo338 12:ff38af85a4ba 802
Gustavo_Eduardo338 12:ff38af85a4ba 803 // Envio de las tramas de las lecturas de los sensores habilitados.
Gustavo_Eduardo338 12:ff38af85a4ba 804 if (SEND_CONFIG_GENERAL == 0) {
Gustavo_Eduardo338 12:ff38af85a4ba 805
Gustavo_Eduardo338 12:ff38af85a4ba 806 LECTURA_ANALOGICA[0] = 0xDD; // Codigo Datos
Gustavo_Eduardo338 12:ff38af85a4ba 807 LECTURA_ANALOGICA[1] = 0xA1; // --> Analog Input (A1)
Gustavo_Eduardo338 12:ff38af85a4ba 808
Gustavo_Eduardo338 12:ff38af85a4ba 809
Gustavo_Eduardo338 12:ff38af85a4ba 810 // Si la configuracion ha sido enviada, envio las lecturas. Esta para cumplir con una secuencia.
Gustavo_Eduardo338 12:ff38af85a4ba 811 if (A5_USO == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 812 float s = ANALOG_A5;
Gustavo_Eduardo338 12:ff38af85a4ba 813 if (value_A5 != s) {
Gustavo_Eduardo338 12:ff38af85a4ba 814 value_A5 = s;
Gustavo_Eduardo338 12:ff38af85a4ba 815
Gustavo_Eduardo338 12:ff38af85a4ba 816 uint16_t value = s * 1024;
Gustavo_Eduardo338 12:ff38af85a4ba 817
Gustavo_Eduardo338 12:ff38af85a4ba 818 float Vtemp = value * 0.0032080078125;
Gustavo_Eduardo338 12:ff38af85a4ba 819 float Rtemp = (15111 / Vtemp) - 4630;
Gustavo_Eduardo338 12:ff38af85a4ba 820 float Tempfinal = ((Rtemp - 1000) / 3.850);
Gustavo_Eduardo338 12:ff38af85a4ba 821
Gustavo_Eduardo338 12:ff38af85a4ba 822 //2- Conversion flotante a punto fijo
Gustavo_Eduardo338 12:ff38af85a4ba 823 int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
Gustavo_Eduardo338 12:ff38af85a4ba 824
Gustavo_Eduardo338 12:ff38af85a4ba 825 LECTURA_ANALOGICA[2] = 0x05; // --> Posicion del sensor
Gustavo_Eduardo338 12:ff38af85a4ba 826 LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 827 LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 828
Gustavo_Eduardo338 12:ff38af85a4ba 829 pc.printf("ANALOG_A5 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA);
Gustavo_Eduardo338 12:ff38af85a4ba 830 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 831 }
Gustavo_Eduardo338 12:ff38af85a4ba 832 }
Gustavo_Eduardo338 12:ff38af85a4ba 833 if (A4_USO == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 834 float s = ANALOG_A4;
Gustavo_Eduardo338 12:ff38af85a4ba 835 if (value_A4 != s) {
Gustavo_Eduardo338 12:ff38af85a4ba 836 value_A4 = s;
Gustavo_Eduardo338 12:ff38af85a4ba 837
Gustavo_Eduardo338 12:ff38af85a4ba 838 uint16_t value = s * 1024;
Gustavo_Eduardo338 12:ff38af85a4ba 839
Gustavo_Eduardo338 12:ff38af85a4ba 840 float Vtemp = value * 0.0032080078125;
Gustavo_Eduardo338 12:ff38af85a4ba 841 float Rtemp = (15111 / Vtemp) - 4630;
Gustavo_Eduardo338 12:ff38af85a4ba 842 float Tempfinal = ((Rtemp - 1000) / 3.850);
Gustavo_Eduardo338 12:ff38af85a4ba 843
Gustavo_Eduardo338 12:ff38af85a4ba 844 //2- Conversion flotante a punto fijo
Gustavo_Eduardo338 12:ff38af85a4ba 845 int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
Gustavo_Eduardo338 12:ff38af85a4ba 846
Gustavo_Eduardo338 12:ff38af85a4ba 847 LECTURA_ANALOGICA[2] = 0x04; // --> Posicion del sensor
Gustavo_Eduardo338 12:ff38af85a4ba 848 LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 849 LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 850
Gustavo_Eduardo338 12:ff38af85a4ba 851 pc.printf("ANALOG_A4 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA);
Gustavo_Eduardo338 12:ff38af85a4ba 852 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 853 }
Gustavo_Eduardo338 11:965d5afe3a63 854 }
Gustavo_Eduardo338 12:ff38af85a4ba 855 if (A3_USO == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 856 float s = ANALOG_A3;
Gustavo_Eduardo338 12:ff38af85a4ba 857 if (value_A3 != s) {
Gustavo_Eduardo338 12:ff38af85a4ba 858 value_A3 = s;
Gustavo_Eduardo338 12:ff38af85a4ba 859
Gustavo_Eduardo338 12:ff38af85a4ba 860 uint16_t value = s * 1024;
Gustavo_Eduardo338 12:ff38af85a4ba 861
Gustavo_Eduardo338 12:ff38af85a4ba 862 float Vtemp = value * 0.0032080078125;
Gustavo_Eduardo338 12:ff38af85a4ba 863 float Rtemp = (15111 / Vtemp) - 4630;
Gustavo_Eduardo338 12:ff38af85a4ba 864 float Tempfinal = ((Rtemp - 1000) / 3.850);
Gustavo_Eduardo338 12:ff38af85a4ba 865
Gustavo_Eduardo338 12:ff38af85a4ba 866 //2- Conversion flotante a punto fijo
Gustavo_Eduardo338 12:ff38af85a4ba 867 int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
Gustavo_Eduardo338 12:ff38af85a4ba 868
Gustavo_Eduardo338 12:ff38af85a4ba 869 LECTURA_ANALOGICA[2] = 0x03; // --> Posicion del sensor
Gustavo_Eduardo338 12:ff38af85a4ba 870 LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 871 LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 872
Gustavo_Eduardo338 12:ff38af85a4ba 873 pc.printf("ANALOG_A3 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA);
Gustavo_Eduardo338 12:ff38af85a4ba 874 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 875 }
Gustavo_Eduardo338 12:ff38af85a4ba 876 }
Gustavo_Eduardo338 12:ff38af85a4ba 877 if (A2_USO == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 878 float s = ANALOG_A2;
Gustavo_Eduardo338 12:ff38af85a4ba 879 if (value_A2 != s) {
Gustavo_Eduardo338 12:ff38af85a4ba 880 value_A2 = s;
Gustavo_Eduardo338 12:ff38af85a4ba 881
Gustavo_Eduardo338 12:ff38af85a4ba 882 uint16_t value = s * 1024;
Gustavo_Eduardo338 12:ff38af85a4ba 883
Gustavo_Eduardo338 12:ff38af85a4ba 884 float Vtemp = value * 0.0032080078125;
Gustavo_Eduardo338 12:ff38af85a4ba 885 float Rtemp = (15111 / Vtemp) - 4630;
Gustavo_Eduardo338 12:ff38af85a4ba 886 float Tempfinal = ((Rtemp - 1000) / 3.850);
Gustavo_Eduardo338 12:ff38af85a4ba 887
Gustavo_Eduardo338 12:ff38af85a4ba 888 //2- Conversion flotante a punto fijo
Gustavo_Eduardo338 12:ff38af85a4ba 889 int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
Gustavo_Eduardo338 12:ff38af85a4ba 890
Gustavo_Eduardo338 12:ff38af85a4ba 891 LECTURA_ANALOGICA[2] = 0x02; // --> Posicion del sensor
Gustavo_Eduardo338 12:ff38af85a4ba 892 LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 893 LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 894
Gustavo_Eduardo338 12:ff38af85a4ba 895 pc.printf("ANALOG_A2 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA);
Gustavo_Eduardo338 12:ff38af85a4ba 896 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 897 }
Gustavo_Eduardo338 12:ff38af85a4ba 898 }
Gustavo_Eduardo338 12:ff38af85a4ba 899 if (A1_USO == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 900 float s = ANALOG_A1;
Gustavo_Eduardo338 12:ff38af85a4ba 901 if (value_A1 != s) {
Gustavo_Eduardo338 12:ff38af85a4ba 902 value_A1 = s;
Gustavo_Eduardo338 12:ff38af85a4ba 903
Gustavo_Eduardo338 12:ff38af85a4ba 904 uint16_t value = s * 1024;
Gustavo_Eduardo338 12:ff38af85a4ba 905
Gustavo_Eduardo338 12:ff38af85a4ba 906 float Vtemp = value * 0.0032080078125;
Gustavo_Eduardo338 12:ff38af85a4ba 907 float Rtemp = (15111 / Vtemp) - 4630;
Gustavo_Eduardo338 12:ff38af85a4ba 908 float Tempfinal = ((Rtemp - 1000) / 3.850);
Gustavo_Eduardo338 12:ff38af85a4ba 909
Gustavo_Eduardo338 12:ff38af85a4ba 910 //2- Conversion flotante a punto fijo
Gustavo_Eduardo338 12:ff38af85a4ba 911 int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
Gustavo_Eduardo338 12:ff38af85a4ba 912
Gustavo_Eduardo338 12:ff38af85a4ba 913 LECTURA_ANALOGICA[2] = 0x01; // --> Posicion del sensor
Gustavo_Eduardo338 12:ff38af85a4ba 914 LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 915 LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 916
Gustavo_Eduardo338 12:ff38af85a4ba 917 pc.printf("ANALOG_A1 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA);
Gustavo_Eduardo338 12:ff38af85a4ba 918 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 919 }
Gustavo_Eduardo338 12:ff38af85a4ba 920 }
Gustavo_Eduardo338 12:ff38af85a4ba 921 if (A0_USO == ON) {
Gustavo_Eduardo338 12:ff38af85a4ba 922 float s = ANALOG_A0;
Gustavo_Eduardo338 12:ff38af85a4ba 923 if (value_A0 != s) {
Gustavo_Eduardo338 12:ff38af85a4ba 924 value_A0 = s;
Gustavo_Eduardo338 12:ff38af85a4ba 925
Gustavo_Eduardo338 12:ff38af85a4ba 926 uint16_t value = s * 1024;
Gustavo_Eduardo338 12:ff38af85a4ba 927
Gustavo_Eduardo338 12:ff38af85a4ba 928 float Vtemp = value * 0.0032080078125;
Gustavo_Eduardo338 12:ff38af85a4ba 929 float Rtemp = (15111 / Vtemp) - 4630;
Gustavo_Eduardo338 12:ff38af85a4ba 930 float Tempfinal = ((Rtemp - 1000) / 3.850);
Gustavo_Eduardo338 12:ff38af85a4ba 931
Gustavo_Eduardo338 12:ff38af85a4ba 932 //2- Conversion flotante a punto fijo
Gustavo_Eduardo338 12:ff38af85a4ba 933 int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
Gustavo_Eduardo338 12:ff38af85a4ba 934
Gustavo_Eduardo338 12:ff38af85a4ba 935 LECTURA_ANALOGICA[2] = 0x00; // --> Posicion del sensor
Gustavo_Eduardo338 12:ff38af85a4ba 936 LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8);
Gustavo_Eduardo338 12:ff38af85a4ba 937 LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF);
Gustavo_Eduardo338 12:ff38af85a4ba 938
Gustavo_Eduardo338 12:ff38af85a4ba 939 pc.printf("ANALOG_A0 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA);
Gustavo_Eduardo338 12:ff38af85a4ba 940 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD
Gustavo_Eduardo338 12:ff38af85a4ba 941 }
Gustavo_Eduardo338 12:ff38af85a4ba 942 }
Gustavo_Eduardo338 11:965d5afe3a63 943 }
Gustavo_Eduardo338 11:965d5afe3a63 944 }
Gustavo_Eduardo338 11:965d5afe3a63 945 }
Gustavo_Eduardo338 9:501a9e6710d2 946
Gustavo_Eduardo338 11:965d5afe3a63 947 void apagarLeds()
Gustavo_Eduardo338 11:965d5afe3a63 948 {
Gustavo_Eduardo338 11:965d5afe3a63 949 // SOLO PARA NRF51822
Gustavo_Eduardo338 12:ff38af85a4ba 950 if (D3_TYPE == OUT) {
Gustavo_Eduardo338 12:ff38af85a4ba 951 //PIN_D3 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 952 }
Gustavo_Eduardo338 12:ff38af85a4ba 953 if (D4_TYPE == OUT) {
Gustavo_Eduardo338 12:ff38af85a4ba 954 //PIN_D4 = 1;
Gustavo_Eduardo338 11:965d5afe3a63 955 }
Gustavo_Eduardo338 12:ff38af85a4ba 956 if (D5_TYPE == OUT) {
Gustavo_Eduardo338 12:ff38af85a4ba 957 //PIN_D5 = 1;
Gustavo_Eduardo338 11:965d5afe3a63 958 }
Gustavo_Eduardo338 12:ff38af85a4ba 959 if (D6_TYPE == OUT) {
Gustavo_Eduardo338 12:ff38af85a4ba 960 //PIN_D6 = 0;
Gustavo_Eduardo338 11:965d5afe3a63 961 }
dixysleo 0:58e350255405 962 }
dixysleo 0:58e350255405 963
dixysleo 0:58e350255405 964 int main(void)
Gustavo_Eduardo338 4:a43cbe8aed6a 965 {
dixysleo 0:58e350255405 966 Ticker ticker;
dixysleo 0:58e350255405 967 ticker.attach_us(m_status_check_handle, 200000);
Gustavo_Eduardo338 4:a43cbe8aed6a 968
dixysleo 0:58e350255405 969 ble.init();
dixysleo 0:58e350255405 970 ble.onDisconnection(disconnectionCallback);
Gustavo_Eduardo338 5:a8c07a29df8a 971 ble.onConnection(connectionCallback);
Gustavo_Eduardo338 4:a43cbe8aed6a 972 ble.onDataWritten(WrittenHandler);
Gustavo_Eduardo338 4:a43cbe8aed6a 973
dixysleo 0:58e350255405 974 pc.baud(9600);
dixysleo 0:58e350255405 975 pc.printf("SimpleChat Init \r\n");
dixysleo 0:58e350255405 976 //pc.attach( uartCB , pc.RxIrq);
Gustavo_Eduardo338 4:a43cbe8aed6a 977
Gustavo_Eduardo338 4:a43cbe8aed6a 978 // setup advertising
dixysleo 0:58e350255405 979 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
dixysleo 0:58e350255405 980 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Gustavo_Eduardo338 11:965d5afe3a63 981 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)"Biscuit2", sizeof("Biscuit2") - 1); // Original: Biscuit
Gustavo_Eduardo338 10:5580ae8cbe7e 982 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
Gustavo_Eduardo338 10:5580ae8cbe7e 983
dixysleo 0:58e350255405 984 ble.setAdvertisingInterval(160);
dixysleo 0:58e350255405 985
dixysleo 0:58e350255405 986 ble.addService(uartService);
Gustavo_Eduardo338 4:a43cbe8aed6a 987
Gustavo_Eduardo338 4:a43cbe8aed6a 988 ble.startAdvertising();
dixysleo 0:58e350255405 989 pc.printf("Advertising Start \r\n");
Gustavo_Eduardo338 11:965d5afe3a63 990 apagarLeds();
dixysleo 0:58e350255405 991 //por dixys
dixysleo 0:58e350255405 992 // para probar, luego quitar. Esto hace que cada ticker se envie un dato analogico via BLE
Gustavo_Eduardo338 4:a43cbe8aed6a 993
Gustavo_Eduardo338 11:965d5afe3a63 994 // valores refernenciales para los estados de los sensores.
Gustavo_Eduardo338 12:ff38af85a4ba 995
Gustavo_Eduardo338 12:ff38af85a4ba 996 #if A0_USO == ON
Gustavo_Eduardo338 12:ff38af85a4ba 997 value_A0 = ANALOG_A0.read();
Gustavo_Eduardo338 12:ff38af85a4ba 998 #else
Gustavo_Eduardo338 12:ff38af85a4ba 999 value_A0 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 1000 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 1001
Gustavo_Eduardo338 12:ff38af85a4ba 1002 #if A1_USO == ON
Gustavo_Eduardo338 12:ff38af85a4ba 1003 value_A1 = ANALOG_A1.read();
Gustavo_Eduardo338 12:ff38af85a4ba 1004 #else
Gustavo_Eduardo338 12:ff38af85a4ba 1005 value_A1 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 1006 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 1007
Gustavo_Eduardo338 12:ff38af85a4ba 1008 #if A2_USO == ON
Gustavo_Eduardo338 12:ff38af85a4ba 1009 value_A2 = ANALOG_A2.read();
Gustavo_Eduardo338 12:ff38af85a4ba 1010 #else
Gustavo_Eduardo338 12:ff38af85a4ba 1011 value_A2 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 1012 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 1013
Gustavo_Eduardo338 12:ff38af85a4ba 1014 #if A3_USO == ON
Gustavo_Eduardo338 12:ff38af85a4ba 1015 value_A3 = ANALOG_A3.read();
Gustavo_Eduardo338 12:ff38af85a4ba 1016 #else
Gustavo_Eduardo338 12:ff38af85a4ba 1017 value_A3 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 1018 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 1019
Gustavo_Eduardo338 12:ff38af85a4ba 1020 #if A4_USO == ON
Gustavo_Eduardo338 12:ff38af85a4ba 1021 value_A4 = ANALOG_A4.read();
Gustavo_Eduardo338 12:ff38af85a4ba 1022 #else
Gustavo_Eduardo338 12:ff38af85a4ba 1023 value_A4 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 1024 #endif
Gustavo_Eduardo338 12:ff38af85a4ba 1025
Gustavo_Eduardo338 12:ff38af85a4ba 1026 #if A5_USO == ON
Gustavo_Eduardo338 12:ff38af85a4ba 1027 value_A5 = ANALOG_A5.read();
Gustavo_Eduardo338 12:ff38af85a4ba 1028 #else
Gustavo_Eduardo338 12:ff38af85a4ba 1029 value_A5 = 0;
Gustavo_Eduardo338 12:ff38af85a4ba 1030 #endif
Gustavo_Eduardo338 11:965d5afe3a63 1031
Gustavo_Eduardo338 4:a43cbe8aed6a 1032 while(1) {
Gustavo_Eduardo338 4:a43cbe8aed6a 1033 ble.waitForEvent();
dixysleo 0:58e350255405 1034 }
Gustavo_Eduardo338 4:a43cbe8aed6a 1035 }