Macros Corregidas

Dependencies:   BLE_API mbed

Revision:
11:965d5afe3a63
Parent:
10:5580ae8cbe7e
Child:
12:ff38af85a4ba
--- a/main.cpp	Mon Sep 19 20:25:47 2016 +0000
+++ b/main.cpp	Sat Oct 01 18:03:24 2016 +0000
@@ -33,6 +33,7 @@
 #define PWM                             2
 #define NONE                            -1
 
+//static int MODE_MOTE;
 //Solo puede estar definido un solo Board
 //#define nRF51-DK_board
 #define redBearLab_board
@@ -82,7 +83,6 @@
 
 #else
 //Aqui se define el hardware del redBearLab
-
 //Analog in
 #define A0                               P0_1   //Analog 0
 #define A1                               P0_2   //Analog 0
@@ -140,30 +140,30 @@
                     Valor del TED en numero reales, ejemplo 39.1, sino se va a usar se queda con 0
 ********************************************************************************************************/
 
-#define A0_USO                           ON     //-> Divisor de voltaje para medir bateria VDD
-#define A1_USO                           ON     //-> Temperatura PT1000 (Borneras Shield de pruebas) Borneras
+#define A0_USO                           OFF     //-> Divisor de voltaje para medir bateria VDD
+#define A1_USO                           OFF     //-> Temperatura PT1000 (Borneras Shield de pruebas) Borneras
 #define A2_USO                           OFF     //-> Temperatura PT1000 (Borneras Shield de pruebas)
 #define A3_USO                           OFF    //-> Humedad (Borneras Shield de pruebas)
 #define A4_USO                           OFF     //-> Humedad (Borneras Shield de pruebas)
-#define A5_USO                           OFF     //-> Conectarlo al LM35
+#define A5_USO                           ON     //-> Conectarlo al LM35
 
-#define A0_TED                           39.1  //Volts,  bateria
-#define A1_TED                           39.2   // ºC  temperatura PT 1000
+#define A0_TED                           0  //Volts,  bateria
+#define A1_TED                           0   // ºC  temperatura PT 1000
 #define A2_TED                           0   // ºC  temperatura PT 1000
 #define A3_TED                           0
 #define A4_TED                           0
-#define A5_TED                           0   // ºC  temperatura ambiental con el LM35
+#define A5_TED                           39.10   // ºC  temperatura ambiental con el LM35
 
 #define D0_USO                           OFF    //Ejemplo: ON
 #define D1_USO                           OFF    //Ejemplo: OFF
-#define D2_USO                           ON
+#define D2_USO                           OFF
 #define D3_USO                           ON
 #define D4_USO                           ON
 #define D5_USO                           ON
-#define D6_USO                           OFF
-#define D7_USO                           ON
-#define D8_USO                           ON
-#define D9_USO                           ON     //BUTTON 1 (NRF51-DK)
+#define D6_USO                           ON
+#define D7_USO                           OFF
+#define D8_USO                           OFF
+#define D9_USO                           OFF     //BUTTON 1 (NRF51-DK)
 #define D10_USO                          OFF     //BUTTON 2 (NRF51-DK)
 #define D11_USO                          OFF     //BUTTON 3 (NRF51-DK)
 #define D12_USO                          OFF     //BUTTON 4 (NRF51-DK)
@@ -173,14 +173,14 @@
 
 #define D0_TYPE                          NONE    // Ejemplo: OUT
 #define D1_TYPE                          NONE     // Ejemplo: IN
-#define D2_TYPE                          IN    // Para medir Humedad con Resistencia AC
-#define D3_TYPE                          IN    // Led encienden con 1
-#define D4_TYPE                          IN    // Led encienden con 0
-#define D5_TYPE                          IN    // Led encienden con 0
-#define D6_TYPE                          NONE    // Led encienden con 1
-#define D7_TYPE                          OUT     // Pushbuttons  (Activos en bajo)
-#define D8_TYPE                          OUT     // Pushbuttons  (Activos en bajo)
-#define D9_TYPE                          PWM     // DIP Switch 1 (Activos en bajo)
+#define D2_TYPE                          NONE    // Para medir Humedad con Resistencia AC
+#define D3_TYPE                          OUT    // Led encienden con 1
+#define D4_TYPE                          OUT    // Led encienden con 0
+#define D5_TYPE                          OUT    // Led encienden con 0
+#define D6_TYPE                          OUT    // Led encienden con 1
+#define D7_TYPE                          NONE     // Pushbuttons  (Activos en bajo)
+#define D8_TYPE                          NONE     // Pushbuttons  (Activos en bajo)
+#define D9_TYPE                          NONE     // DIP Switch 1 (Activos en bajo)
 #define D10_TYPE                         NONE     // DIP Switch 2 (Activos en bajo)
 #define D11_TYPE                         NONE     // DIP Switch 3 (Activos en bajo)
 #define D12_TYPE                         NONE    // Para medir Humedad con Resistencia AC
@@ -208,48 +208,180 @@
 AnalogIn        ANALOG_A4(A4);
 AnalogIn        ANALOG_A5(A5);   //Temperatura ambiental con LM35
 
-//Macros Digitales
-DigitalIn  BUTTON_0(D0);
-DigitalIn  BUTTON_1(D1);
-DigitalIn  BUTTON_2(D2);
-DigitalIn  BUTTON_3(D3);
-DigitalIn  BUTTON_4(D4);
-DigitalIn  BUTTON_5(D5);
-DigitalIn  BUTTON_6(D6);
-DigitalIn  BUTTON_7(D7);
-DigitalIn  BUTTON_8(D8);
-DigitalIn  BUTTON_9(D9);
-DigitalIn  BUTTON_10(D10);
-DigitalIn  BUTTON_11(D11);
-DigitalIn  BUTTON_12(D12);
-DigitalIn  BUTTON_13(D13);
-DigitalIn  BUTTON_14(D14);
-DigitalIn  BUTTON_15(D15);
+#if D0_USO == ON
+    #if D0_TYPE == IN
+        DigitalIn PIN_D0(D0);
+    #else
+        DigitalOut PIN_D0(D0); 
+    #endif
+#endif
+
+#if D1_USO == ON
+    #if D1_TYPE == IN
+        DigitalIn PIN_D1(D1);
+    #else
+        DigitalOut PIN_D1(D1); 
+    #endif
+#endif
+
+#if D2_USO == ON
+    #if D2_TYPE == IN
+        DigitalIn PIN_D2(D2);
+    #else
+        DigitalOut PIN_D2(D2); 
+    #endif
+#else
+    static int PIN_D2 = 0;
+#endif
+
+#if D3_USO == ON
+    #if D3_TYPE == IN
+        DigitalIn PIN_D3(D3);
+    #else
+        DigitalOut PIN_D3(D3); 
+    #endif
+#endif
+
+#if D4_USO == ON
+    #if D4_TYPE == IN
+        DigitalIn PIN_D4(D4);
+    #else
+        DigitalOut PIN_D4(D4);
+    #endif
+#endif
+
+#if D5_USO == ON
+    #if D5_TYPE == IN
+        DigitalIn PIN_D5(D5);
+    #endif
+    #if D5_TYPE == OUT
+        DigitalOut PIN_D5(D5);
+    #endif
+    #if D5_TYPE == PWM
+        PwmOut PIN_D5(D5);
+    #endif
+#endif
+
+#if D6_USO == ON
+    #if D6_TYPE == IN
+        DigitalIn PIN_D6(D6); 
+    #endif
+    #if D6_TYPE == OUT
+        DigitalOut PIN_D6(D6); 
+    #endif
+    #if D6_TYPE == PWM
+        PwmOut PIN_D6(D6);
+    #endif
+#endif
+
+#if D7_USO == ON
+    #if D7_TYPE == IN
+        DigitalIn PIN_D7(D7); 
+    #endif
+    #if D7_TYPE == OUT
+        DigitalOut PIN_D7(D7); 
+    #endif
+#else
+    static int PIN_D7 = 0;
+#endif
 
-DigitalOut LED_SET_0(D0);
-DigitalOut LED_SET_1(D1);
-DigitalOut LED_SET_2(D2);
-DigitalOut LED_SET_3(D3);
-DigitalOut LED_SET_4(D4);
-DigitalOut LED_SET_5(D5);
-DigitalOut LED_SET_6(D6);
-DigitalOut LED_SET_7(D7);
-DigitalOut LED_SET_8(D8);
-DigitalOut LED_SET_9(D9);
-DigitalOut LED_SET_10(D10);
-DigitalOut LED_SET_11(D11);
-DigitalOut LED_SET_12(D12);
-DigitalOut LED_SET_13(D13);
-DigitalOut LED_SET_14(D14);
-DigitalOut LED_SET_15(D15);
+#if D8_USO == ON
+    #if D8_TYPE == IN
+        DigitalIn PIN_D8(D8); 
+    #endif
+    #if D8_TYPE == OUT
+        DigitalOut PIN_D8(D8); 
+    #endif
+#else
+    static int PIN_D8 = 0;
+#endif
+
+
+#if D9_USO == ON
+    #if D9_TYPE == IN
+        DigitalIn PIN_D9(D9); 
+    #endif
+    #if D9_TYPE == OUT
+        DigitalOut PIN_D9(D9); 
+    #endif
+    #if D9_TYPE == PWM
+        PwmOut PIN_D9(D9);
+    #endif
+#else
+    static int PIN_D9 = 0;
+#endif
+
+#if D10_USO == ON
+    #if D10_TYPE == IN
+        DigitalIn PIN_D10(D10); 
+    #endif
+    #if D10_TYPE == OUT
+        DigitalOut PIN_D10(D10); 
+    #endif
+#else
+    static int PIN_D10 = 0;
+#endif
 
-PwmOut     PWM_5(D5);
-PwmOut     PWM_6(D6);
-PwmOut     PWM_9(D9);
+#if D11_USO == ON
+    #if D11_TYPE == IN
+        DigitalIn PIN_D11(D11); 
+    #endif
+    #if D11_TYPE == OUT
+        DigitalOut PIN_D11(D11); 
+    #endif
+#else
+    static int PIN_D11 = 0;
+#endif
+
+#if D12_USO == ON
+    #if D12_TYPE == IN
+        DigitalIn PIN_D12(D12); 
+    #endif
+    #if D12_TYPE == OUT
+        DigitalOut PIN_D12(D12); 
+    #endif
+#else
+    static int PIN_D12 = 0;
+#endif
+
+#if D13_USO == ON
+    #if D13_TYPE == IN
+        DigitalIn PIN_D13(D13); 
+    #endif
+    #if D13_TYPE == OUT
+        DigitalOut PIN_D13(D13); 
+    #endif
+#else
+    static int PIN_D13 = 0;
+#endif
+
+#if D14_USO == ON
+    #if D14_TYPE == IN
+        DigitalIn PIN_D14(D14); 
+    #endif
+    #if D14_TYPE == OUT 
+        DigitalOut PIN_D14(D14); 
+    #endif
+#else
+    static int PIN_D14 = 0;
+#endif
+
+#if D15_USO == ON
+    #if D15_TYPE == IN
+        DigitalIn PIN_D15(D15); 
+    #endif
+    #if D15_TYPE == OUT
+        DigitalOut PIN_D15(D15); 
+    #endif
+#else
+    static int PIN_D15 = 0;
+#endif
+
 
 //Hasta aqui la definicion de macos
 //Digital Inputs --> DATA VALUE
 uint16_t DigitalInput_DATA = 0x0000;    //Mapa de bits con los valores de la entrada digital segun la posicion
+uint16_t ESTADO_ENTRADAS_DIGITALES = 0x0000;
 uint16_t PAQUETE_ID  = 0;
 
 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
@@ -263,17 +395,17 @@
 uint16_t DigitalPwm_Pos = 0x0000;       //Mapa de bits, seran usados los bytes del TED 16 bits
 
 //Digital input, cantidad, posiciones --> de todos, ted = 0, tipico hasta 16
-uint8_t AnalogInput_Pos = 0x0000;    //Mapa de bits, seran usados los bytes del TED 16 bits
+uint8_t AnalogInput_Pos = 0x0000;    //Mapa de bits, seran usados los bytes del TED 8 bits
 
 //Digital output, cantidad, pocisiones --> de todos, ted = 0,  tipico hasta 16
-uint8_t AnalogOutput_Pos = 0x0000;   //Mapa de bits, seran usados los bytes del TED 16 bits
+uint8_t AnalogOutput_Pos = 0x0000;   //Mapa de bits, seran usados los bytes del TED 8 bits
 
 
 // Declarando los pines
 //static int32_t send_config = 0;
 
 static int8_t SEND_CONFIG_GENERAL = 0;
-static int8_t SEND_CONFIG_ANALOG_0 = 0, SEND_CONFIG_ANALOG_1 = 0, SEND_CONFIG_ANALOG_2 = 0, SEND_CONFIG_ANALOG_3 = 0, SEND_CONFIG_ANALOG_4 = 0, SEND_CONFIG_ANALOG_5 = 0;
+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;
 
 
 BLE ble;
@@ -281,11 +413,16 @@
 // Permite imprimir mensajes en la consola
 Serial pc(USBTX, USBRX);
 
-static uint8_t analog_enabled = 0;
+static uint8_t analog_enabled;
+
+//  Para las entradas digitales (Botones)
 static uint8_t state_button_2 = 0, state_button_3 = 0,state_button_4 = 0,state_button_5 = 0 ;
 static uint8_t state_button_6 = 0, state_button_7 = 0, state_button_8 = 0, state_button_9 = 0,state_button_10 = 0,state_button_11 = 0 ;
 static uint8_t state_button_12 = 0, state_button_13 = 0, state_button_14 = 0, state_button_15 = 0;
 
+//  Para las entradas analogicas (Sensores)
+static float value_A0, value_A1, value_A2, value_A3, value_A4, value_A5;
+
 // The Nordic UART Service
 static const uint8_t uart_base_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
 static const uint8_t uart_tx_uuid[]   = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
@@ -303,40 +440,6 @@
 GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic};
 GattService         uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
 
-float in[] = { 100.00, 100.39, 100.78, 101.17, 101.56, 101.95, 102.34, 102.73, 103.12, 103.51,
-               103.90, 104.29, 104.68, 105.07, 105.46, 105.85, 106.24, 106.63, 107.02, 107.40,
-               107.79, 108.18, 108.57, 108.96, 109.35, 109.73, 110.12, 110.51, 110.90, 111.29,
-               111.67, 112.06, 112.45, 112.83, 113.22, 113.61, 114.00, 114.38, 114.77, 115.15,
-               115.54, 115.93, 116.31, 116.70, 117.08, 117.47, 117.86, 118.24, 118.63, 119.01,
-               119.40, 119.78, 120.17, 120.55, 120.94, 121.32, 121.71, 122.09, 122.47, 122.86,
-               123.24, 123.63, 124.01, 124.39, 124.78, 125.16, 125.54, 125.93, 126.31, 126.69,
-               127.08, 127.46, 127.84, 128.22, 128.61, 128.99, 129.37, 129.75, 130.13, 130.52
-             };
-// known resistance in voltage divider
-int R1 = 217;
-
-float MultiMap(float val, float* _in, uint8_t size)
-{
-    // calculate if value is out of range
-    if (val < _in[0] ) return -99.99;
-    if (val > _in[size-1] ) return 99.99;
-
-    //  search for 'value' in _in array to get the position No.
-    uint8_t pos = 0;
-    while(val > _in[pos]) pos++;
-
-    // handles the 'rare' equality case
-    if (val == _in[pos]) return pos;
-
-    float r1 = _in[pos-1];
-    float r2 = _in[pos];
-    int c1 = pos-1;
-    int c2 = pos;
-
-    return c1 + (val - r1) / (r2-r1) * (c2-c1);
-}
-
-
 
 // https://developer.mbed.org/forum/repo-61676-BLE_GAP_Example-community/topic/17193/
 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
@@ -350,20 +453,28 @@
     SEND_CONFIG_GENERAL = 0;
 
     //  En caso de no completarse el envio de la configuraciones las detenemos por completo, y dehabilitamos el envio.
-    SEND_CONFIG_ANALOG_0 == OFF;
-    SEND_CONFIG_ANALOG_1 == OFF;
-    SEND_CONFIG_ANALOG_2 == OFF;
-    SEND_CONFIG_ANALOG_3 == OFF;
-    SEND_CONFIG_ANALOG_4 == OFF;
-    SEND_CONFIG_ANALOG_5 == OFF;
+    SEND_CONFIG_ANALOG_0 = OFF;
+    SEND_CONFIG_ANALOG_1 = OFF;
+    SEND_CONFIG_ANALOG_2 = OFF;
+    SEND_CONFIG_ANALOG_3 = OFF;
+    SEND_CONFIG_ANALOG_4 = OFF;
+    SEND_CONFIG_ANALOG_5 = OFF;
 
 }
 
-//Leemos todos las entradas digitales que esten activas y lo ponemos en la posicion correspondiente
+//  Carga la configuración de las entradas digitales del MOTE.
 void readDigitalInputs_Value ()
 {
-    //  DigitalInput_DATA = (uint16_t) ((BUTTON_15 << 15) | (BUTTON_14 << 14) | (BUTTON_13 << 13) | (BUTTON_12 << 12) | (BUTTON_11 << 11) | (BUTTON_10 << 10) | (BUTTON_9 << 9) | (BUTTON_8 << 8) | (BUTTON_7 << 7) | (BUTTON_6 << 6) |(BUTTON_5 << 5) | (BUTTON_4 << 4) | (BUTTON_3 << 3) | (BUTTON_2 << 2) | (BUTTON_1 << 1) | (BUTTON_1 << 0));
-    DigitalInput_DATA = (uint16_t) ((BUTTON_15 << 15) | (BUTTON_14 << 14) | (BUTTON_13 << 13) | (BUTTON_12 << 12) | (BUTTON_11 << 11) | (BUTTON_10 << 10) | (BUTTON_9 << 9) | (BUTTON_8 << 8) | (BUTTON_7 << 7) | (BUTTON_6 << 6) |(BUTTON_5 << 5) | (BUTTON_4 << 4) | (BUTTON_3 << 3) | (BUTTON_2 << 2));
+    //  ORIGINAL
+    //DigitalInput_DATA = (uint16_t) ((BUTTON_15 << 15) | (BUTTON_14 << 14) | (BUTTON_13 << 13) | (BUTTON_12 << 12) | (BUTTON_11 << 11) | (BUTTON_10 << 10) | (BUTTON_9 << 9) | (BUTTON_8 << 8) | (BUTTON_7 << 7) | (BUTTON_6 << 6) |(BUTTON_5 << 5) | (BUTTON_4 << 4) | (BUTTON_3 << 3) | (BUTTON_2 << 2));
+    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));
+}
+
+void cargarEstadoEntradasDigitales(){
+    ESTADO_ENTRADAS_DIGITALES = (uint16_t) (((D15_TYPE == IN ? state_button_15 :0) << 15) |((D14_TYPE == IN ? state_button_14 :0) << 14) |((D13_TYPE == IN ? state_button_13 :0) << 13) |((D12_TYPE == IN ? state_button_12 :0) << 12));
+    ESTADO_ENTRADAS_DIGITALES |= (uint16_t) (((D11_TYPE == IN ? state_button_11 :0) << 11) |((D10_TYPE == IN ? state_button_10 :0) << 10) |((D9_TYPE == IN ? state_button_9 :0) << 9) |((D8_TYPE == IN ? state_button_8 :0) << 8));
+    ESTADO_ENTRADAS_DIGITALES |= (uint16_t) (((D7_TYPE == IN ? state_button_7 :0) << 7) |((D6_TYPE == IN ? state_button_6 :0) << 6) |((D5_TYPE == IN ? state_button_5 :0) << 5) |((D4_TYPE == IN ? state_button_4 :0) << 4));
+    ESTADO_ENTRADAS_DIGITALES |= (uint16_t) (((D3_TYPE == IN ? state_button_3 :0) << 3) |((D2_TYPE == IN ? state_button_2 :0) << 2));
 }
 
 //Funcion para crear los extra bytes
@@ -637,53 +748,63 @@
             if(buf[2] == 0xD0) {
                 //  Evaluo sobre que pin se debe actuar.
                 switch (buf[3]) {
-                    case 0x00:
-                        LED_SET_0 = (buf[4] == 0x01) ? 1:0;
-                        break;
-                    case 0x01:
-                        LED_SET_1 = (buf[4] == 0x01) ? 1:0;
-                        break;
                     case 0x02:
-                        LED_SET_2 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D2
+                            PIN_D2 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x03:
-                        LED_SET_3 = (buf[4] == 0x01) ? 1:0;
-                        break;
+                        PIN_D3 = (buf[4] == 0x01) ? 1:0;                break;
                     case 0x04:
-                        LED_SET_4 = (buf[4] == 0x01) ? 1:0;
-                        break;
+                        PIN_D4 = (buf[4] == 0x00) ? 1:0;                break;
                     case 0x05:
-                        LED_SET_5 = (buf[4] == 0x01) ? 1:0;
-                        break;
+                        PIN_D5 = (buf[4] == 0x00) ? 1:0;                break;
                     case 0x06:
-                        LED_SET_6 = (buf[4] == 0x01) ? 1:0;
-                        break;
+                        PIN_D6 = (buf[4] == 0x01) ? 1:0;                break;
                     case 0x07:
-                        LED_SET_7 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D7
+                            PIN_D7 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x08:
-                        LED_SET_8 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D8
+                            PIN_D8 = (buf[4] == 0x01) ? 1:0;                
+                        #endif
                         break;
                     case 0x09:
-                        LED_SET_9 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D9
+                            PIN_D9 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x10:
-                        LED_SET_10 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D10
+                            PIN_D10 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x11:
-                        LED_SET_11 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D11
+                            PIN_D11 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x12:
-                        LED_SET_12 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D12
+                            PIN_D12 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x13:
-                        LED_SET_13 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D13
+                            PIN_D13 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x14:
-                        LED_SET_14 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D14
+                            PIN_D14 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                     case 0x15:
-                        LED_SET_15 = (buf[4] == 0x01) ? 1:0;
+                        #ifdef PIN_D15
+                            PIN_D15 = (buf[4] == 0x01) ? 1:0;
+                        #endif
                         break;
                 }
                 // Verifico si es un signal Analog out
@@ -691,18 +812,16 @@
                 float value = (float)buf[4]/255;
                 switch (buf[3]) {
                     case 0x05:
-                        PWM_5 = value;
-                        break;
+                        PIN_D5 = value;         break;
                     case 0x06:
-                        PWM_6 = value;
+                        PIN_D6 = value;         break;
+                    case 0x09:
+                        #ifdef PIN_D9
+                            PIN_D9 = value;
+                        #endif
                         break;
-                    case 0x09:
-                        PWM_9 =value;
-                        break;
-
                 }
             }
-
         }
     }
 }
@@ -716,26 +835,7 @@
 
     uint8_t TRAMA_CONFIG_ANALOG[5];
     uint8_t LECTURA_DIGITAL[6];
-
-    /**if (analog_enabled) { // if analog reading enabled
-        // Read and send out
-        float s = ANALOG;
-        uint16_t value = s*1024;
-        buf[0] = (0xDD);                    //  Codigo
-        buf[1] = (0x00);                    //  paquete id
-        buf[2] = (0xA1);                    //  A1| A0| D1| D0
-        buf[3] = (20);                      //  Posicion
-        buf[4] = (value >> 8);                   //  Valor
-        buf[5] = (value);                   //  Valor
-
-        //pc.printf("buf[4]: %d\r\n", buf[4]);
-        //pc.printf("buf[5]: %d\r\n", buf[5]);
-
-        //pc.printf("value pt 1000: %d\r\n", value);  // Imprimo en terminal lo que esta enviando desde el mote.
-
-        ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 6);    // Para el RTD
-    }
-    **/
+    uint8_t LECTURA_ANALOGICA[6];
 
     //pc.printf("enviar_config %d \r\n", enviar_config_01);
     if (SEND_CONFIG_GENERAL == 1) {
@@ -757,39 +857,52 @@
 
         if (A0_USO == ON && SEND_CONFIG_ANALOG_0 == ON) {
             TRAMA_CONFIG_ANALOG[3] = 0x00;              //  Posicion que ocupa en el mote
-            TRAMA_CONFIG_ANALOG[4] = A0_TED;
+            int16_t TED_PF = (int16_t) (256 * A0_TED);       //  Conversion Punto Fijo
+            TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
+            TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
             pc.printf("SEND_CONFIG_ANALOG_0 \r\n");
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 5);
+            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
 
         } else if (A1_USO == ON && SEND_CONFIG_ANALOG_1 == ON) {
             TRAMA_CONFIG_ANALOG[3] = 0x01;              //  Posicion que ocupa en el mote
-            TRAMA_CONFIG_ANALOG[4] = A1_TED;
+            int16_t TED_PF = (int16_t) (256 * A1_TED);       //  Conversion Punto Fijo
+            TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
+            TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
             pc.printf("SEND_CONFIG_ANALOG_1 \r\n");
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 5);
+            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
 
         } else if (A2_USO == ON && SEND_CONFIG_ANALOG_2 == ON) {
             TRAMA_CONFIG_ANALOG[3] = 0x02;              //  Posicion que ocupa en el mote
-            TRAMA_CONFIG_ANALOG[4] = A2_TED;
+            int16_t TED_PF = (int16_t) (256 * A2_TED);       //  Conversion Punto Fijo
+            TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
+            TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
             pc.printf("SEND_CONFIG_ANALOG_2 \r\n");
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 5);
+            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
 
         } else if (A3_USO == ON && SEND_CONFIG_ANALOG_3 == ON) {
             TRAMA_CONFIG_ANALOG[3] = 0x03;              //  Posicion que ocupa en el mote
-            TRAMA_CONFIG_ANALOG[4] = A3_TED;
+            int16_t TED_PF = (int16_t) (256 * A3_TED);       //  Conversion Punto Fijo
+            TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
+            TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
             pc.printf("SEND_CONFIG_ANALOG_3 \r\n");
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 5);
+            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
 
         } else if (A4_USO == ON && SEND_CONFIG_ANALOG_4 == ON) {
             TRAMA_CONFIG_ANALOG[3] = 0x04;              //  Posicion que ocupa en el mote
-            TRAMA_CONFIG_ANALOG[4] = A4_TED;
+            int16_t TED_PF = (int16_t) (256 * A4_TED);       //  Conversion Punto Fijo
+            TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
+            TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
             pc.printf("SEND_CONFIG_ANALOG_4 \r\n");
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 5);
+            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
 
         } else if (A5_USO == ON && SEND_CONFIG_ANALOG_5 == ON) {
             TRAMA_CONFIG_ANALOG[3] = 0x05;              //  Posicion que ocupa en el mote
-            TRAMA_CONFIG_ANALOG[4] = A5_TED;
-            pc.printf("SEND_CONFIG_ANALOG_5 \r\n");
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 5);
+            int16_t TED_PF = (int16_t) (256 * A5_TED);  //  Conversion Punto Fijo
+            TRAMA_CONFIG_ANALOG[4] = (int8_t)(TED_PF >> 8);
+            TRAMA_CONFIG_ANALOG[5] = (int8_t)(TED_PF);
+            //pc.printf("SEND_CONFIG_ANALOG_5 %x , %x \r\n", TRAMA_CONFIG_ANALOG[4], TRAMA_CONFIG_ANALOG[5]);
+            //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] );
+            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_ANALOG, 6);
         }
     }
 
@@ -808,66 +921,95 @@
 
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 5);    // Para el RTD
     }
-    //  --  Envio de las lecturas Analogicas.
 
-    /**
-        if (resp_digital_out_7 != 0) {
-            // Envia trama de lectura
-            buf[0] = (0xDD);                    //  Codigo
-            buf[1] = resp_digital_out_7;         //  paquete id
-            buf[2] = (0xD0);                    //  A1| A0| D1| D0
-            buf[3] = (10);                      //  Posicion
-            buf[4] = LED_SET_7;                       //  Valor
-            pc.printf("resp_digital_out_7 %d\r\n", resp_digital_out_7);  // Imprimo en terminal lo que esta enviando desde el mote.
-
-            ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 5);    // Para el RTD
-        }**/
-    //wait_ms(100);
 
     // If digital in changes, report the state
-    if ((BUTTON_2 != state_button_2 && D2_TYPE == IN) || (BUTTON_3 != state_button_3 && D3_TYPE == IN) || (BUTTON_3 != state_button_3 && D3_TYPE == IN) || (BUTTON_4 != state_button_4 && D4_TYPE == IN) || (BUTTON_5 != state_button_5 && D5_TYPE == IN) || (BUTTON_6 != state_button_6 && D6_TYPE == IN) || (BUTTON_7 != state_button_7 && D7_TYPE == IN) || (BUTTON_8 != state_button_8 && D8_TYPE == IN) || (BUTTON_9 != state_button_9 && D9_TYPE == IN) || (BUTTON_10 != state_button_10 && D10_TYPE == IN) || (BUTTON_11 != state_button_11 && D11_TYPE == IN) || (BUTTON_12 != state_button_12 && D12_TYPE == IN) || (BUTTON_13 != state_button_13 && D13_TYPE == IN) || (BUTTON_14 != state_button_14 && D14_TYPE == IN) || (BUTTON_15 != state_button_15 && D15_TYPE == IN)) {
+    //  original
+  //if ((BUTTON_2 != state_button_2 && D2_TYPE == IN) || (BUTTON_3 != state_button_3 && D3_TYPE == IN) || (BUTTON_4 != state_button_4 && D4_TYPE == IN) || (BUTTON_5 != state_button_5 && D5_TYPE == IN) || (BUTTON_6 != state_button_6 && D6_TYPE == IN) || (BUTTON_7 != state_button_7 && D7_TYPE == IN) || (BUTTON_8 != state_button_8 && D8_TYPE == IN) || (BUTTON_9 != state_button_9 && D9_TYPE == IN) || (BUTTON_10 != state_button_10 && D10_TYPE == IN) || (BUTTON_11 != state_button_11 && D11_TYPE == IN) || (BUTTON_12 != state_button_12 && D12_TYPE == IN) || (BUTTON_13 != state_button_13 && D13_TYPE == IN) || (BUTTON_14 != state_button_14 && D14_TYPE == IN) || (BUTTON_15 != state_button_15 && D15_TYPE == IN)) {
+    if ((PIN_D2 != state_button_2 && D2_TYPE == IN) || (PIN_D3 != state_button_3 && D3_TYPE == IN) || (PIN_D4 != state_button_4 && D4_TYPE == IN) || (PIN_D5 != state_button_5 && D5_TYPE == IN) || (PIN_D6 != state_button_6 && D6_TYPE == IN) || (PIN_D7 != state_button_7 && D7_TYPE == IN) || (PIN_D8 != state_button_8 && D8_TYPE == IN) || (PIN_D9 != state_button_9 && D9_TYPE == IN) || (PIN_D10 != state_button_10 && D10_TYPE == IN) || (PIN_D11 != state_button_11 && D11_TYPE == IN) || (PIN_D12 != state_button_12 && D12_TYPE == IN) || (PIN_D13 != state_button_13 && D13_TYPE == IN) || (PIN_D14 != state_button_14 && D14_TYPE == IN) || (PIN_D15 != state_button_15 && D15_TYPE == IN)) {
         //  Lecturas digitales
         readDigitalInputs_Value();
         //  Actualizando estados de las variables auxiliares
-        state_button_2 = (D2_USO == ON && D2_TYPE == IN) ? BUTTON_2 : 0;
-        state_button_3 = (D3_USO == ON && D3_TYPE == IN) ? BUTTON_3:0;
-        state_button_4 = (D4_USO == ON && D4_TYPE == IN) ? BUTTON_4:0;
-        state_button_5 = (D5_USO == ON && D5_TYPE == IN) ? BUTTON_5:0;
-        state_button_6 = (D6_USO == ON && D6_TYPE == IN) ? BUTTON_6:0;
-        state_button_7 = (D7_USO == ON && D7_TYPE == IN) ? BUTTON_7:0;
-        state_button_8 = (D8_USO == ON && D8_TYPE == IN) ? BUTTON_8:0;
-        state_button_9 = (D9_USO == ON && D9_TYPE == IN) ? BUTTON_9:0;
-        state_button_10 = (D10_USO == ON && D10_TYPE == IN) ? BUTTON_10:0;
-        state_button_11 = (D11_USO == ON && D11_TYPE == IN) ? BUTTON_11:0;
-        state_button_12 = (D12_USO == ON && D12_TYPE == IN) ? BUTTON_12:0;
-        state_button_13 = (D13_USO == ON && D13_TYPE == IN) ? BUTTON_13:0;
-        state_button_14 = (D14_USO == ON && D14_TYPE == IN) ? BUTTON_14:0;
-        state_button_15 = (D15_USO == ON && D15_TYPE == IN) ? BUTTON_15:0;
+        state_button_2 = (D2_USO == ON && D2_TYPE == IN) ? PIN_D2 : 0;
+        state_button_3 = (D3_USO == ON && D3_TYPE == IN) ? PIN_D3 : 0;
+        state_button_4 = (D4_USO == ON && D4_TYPE == IN) ? PIN_D4 : 0;
+        state_button_5 = (D5_USO == ON && D5_TYPE == IN) ? PIN_D5 : 0;
+        state_button_6 = (D6_USO == ON && D6_TYPE == IN) ? PIN_D6 : 0;
+        state_button_7 = (D7_USO == ON && D7_TYPE == IN) ? PIN_D7 : 0;
+        state_button_8 = (D8_USO == ON && D8_TYPE == IN) ? PIN_D8 : 0;
+        state_button_9 = (D9_USO == ON && D9_TYPE == IN) ? PIN_D9 : 0;
+        state_button_10 = (D10_USO == ON && D10_TYPE == IN) ? PIN_D10:0;
+        state_button_11 = (D11_USO == ON && D11_TYPE == IN) ? PIN_D11:0;
+        state_button_12 = (D12_USO == ON && D12_TYPE == IN) ? PIN_D12:0;
+        state_button_13 = (D13_USO == ON && D13_TYPE == IN) ? PIN_D13:0;
+        state_button_14 = (D14_USO == ON && D14_TYPE == IN) ? PIN_D14:0;
+        state_button_15 = (D15_USO == ON && D15_TYPE == IN) ? PIN_D15:0;
 
         PAQUETE_ID = 0x3E8;
-        pc.printf("DigitalInput_DATA: %d \r\n", DigitalInput_DATA);
+        pc.printf("ESTADO_ENTRADAS_DIGITALES: %d \r\n", ESTADO_ENTRADAS_DIGITALES);
         LECTURA_DIGITAL[0] = 0xDD;                                      //  Codigo
         LECTURA_DIGITAL[1] = (PAQUETE_ID >> 8);                         //  primera parte del paquete
         LECTURA_DIGITAL[2] = PAQUETE_ID ;                               //  segunda parte del paquete
-        LECTURA_DIGITAL[3] = 0xD0;                                      //  A1| A0| D1| D0
-        LECTURA_DIGITAL[4] = (DigitalInput_DATA >> 8);                  //  Valor de las salidas digitales
-        LECTURA_DIGITAL[5] = (DigitalInput_DATA);                       //  Valor de las salidas digitales
+        LECTURA_DIGITAL[3] = 0xD0;                                      //  D0  --> Digital Output
+        LECTURA_DIGITAL[4] = (ESTADO_ENTRADAS_DIGITALES >> 8);                  //  Valor de las salidas digitales
+        LECTURA_DIGITAL[5] = (ESTADO_ENTRADAS_DIGITALES);                       //  Valor de las salidas digitales
 
         ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 6);    // Para el RTD
     }
 
+//  Envio de las tramas de las lecturas de los sensores habilitados.
+    if (SEND_CONFIG_GENERAL == 0) {
 
-    /**int pt100 = ANALOG_A5.read();
-    pc.printf("pt100: %f Ohm\r\n", pt100);
+        LECTURA_ANALOGICA[0] = 0xDD;                    //  Codigo
+        LECTURA_ANALOGICA[1] = 0x00;                    //  paquete id
+        LECTURA_ANALOGICA[2] = 0x00;                    //  paquete id
+
+
+        //  Si la configuracion ha sido enviada, envio las lecturas. Esta para cumplir con una secuencia.
+        if (A5_USO == ON) {
+            float s = ANALOG_A5.read();
+            if ( value_A5 != s) {
+                value_A5 = s;
+
+                uint16_t value = s * 1024;
+
+
+                float Vtemp = value * 0.0032080078125;
+                float Rtemp = (15111 / Vtemp) - 4630;
+                float Tempfinal = ((Rtemp - 1000) / 3.850);
+
+                //2- Conversion flotante a punto fijo
+                int16_t Temperature_PF = (int16_t) (256 * Tempfinal);
 
-    float Vout = pt100 * (5.0 / 1023.0);
-    float R2 = R1 * 1/(5.0/Vout - 1);
+                LECTURA_ANALOGICA[3] = 0xA1;        //  --> Analog Output (A0)
+                LECTURA_ANALOGICA[4] = 0x05;        //  --> Posicion del sensor
+                LECTURA_ANALOGICA[5] = (int8_t)(Temperature_PF >> 8);
+                LECTURA_ANALOGICA[6] = (int8_t)(Temperature_PF);
+
+                pc.printf("Temperature_PF (Format HEX): %x \r\n", Temperature_PF);
+                ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 7);    // Para el RTD
+            }
+
+
+        }
+    }
+}
 
-    float c =  MultiMap(R2,in,80);
-
-    pc.printf("Resistance: %f Ohm\r\n", R2);
-    pc.printf("Temperature: %f C\r\n", c);
-    */
+void apagarLeds()
+{
+    //  SOLO PARA NRF51822
+    if (D3_TYPE == OUT && D3_USO == ON){
+        PIN_D3 = 0;
+    }
+    if (D4_TYPE == OUT && D4_USO == ON){
+        PIN_D4 = 1;
+    }
+    if (D5_TYPE == OUT && D5_USO == ON){
+        PIN_D5 = 1;
+    }
+    if (D6_TYPE == OUT && D6_USO == ON){
+        PIN_D6 = 0;
+    }
 }
 
 int main(void)
@@ -887,7 +1029,7 @@
     // setup advertising
     ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
     ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
-    ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)"Biscuit", sizeof("Biscuit") - 1);   // Original:  Biscuit
+    ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)"Biscuit2", sizeof("Biscuit2") - 1);   // Original:  Biscuit
     ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
 
     ble.setAdvertisingInterval(160);
@@ -896,11 +1038,19 @@
 
     ble.startAdvertising();
     pc.printf("Advertising Start \r\n");
-
+    apagarLeds();
     //por dixys
     // para probar, luego quitar. Esto hace que cada ticker se envie un dato analogico via BLE
     analog_enabled = 0;
 
+    //  valores refernenciales para los estados de los sensores.
+    value_A0 = ANALOG_A0;
+    value_A1 = ANALOG_A1;
+    value_A2 = ANALOG_A2;
+    value_A3 = ANALOG_A3;
+    value_A4 = ANALOG_A4;
+    value_A5 = ANALOG_A5.read();
+
     while(1) {
         ble.waitForEvent();
     }