
Macros Corregidas
Revision 12:ff38af85a4ba, committed 2016-11-04
- Comitter:
- Gustavo_Eduardo338
- Date:
- Fri Nov 04 20:19:08 2016 +0000
- Parent:
- 11:965d5afe3a63
- Commit message:
- Version Estable
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Oct 01 18:03:24 2016 +0000 +++ b/main.cpp Fri Nov 04 20:19:08 2016 +0000 @@ -141,46 +141,29 @@ ********************************************************************************************************/ #define A0_USO OFF //-> Divisor de voltaje para medir bateria VDD -#define A1_USO OFF //-> Temperatura PT1000 (Borneras Shield de pruebas) Borneras +#define A1_USO ON //-> 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 ON //-> Conectarlo al LM35 - -#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 39.10 // ºC temperatura ambiental con el LM35 +#define A5_USO OFF //-> Conectarlo al LM35 -#define D0_USO OFF //Ejemplo: ON -#define D1_USO OFF //Ejemplo: OFF -#define D2_USO OFF -#define D3_USO ON -#define D4_USO ON -#define D5_USO ON -#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) -#define D13_USO OFF -#define D14_USO OFF -#define D15_USO OFF +#define A0_TED 39.10 //Volts, bateria +#define A1_TED 39.10 // ºC temperatura PT 1000 +#define A2_TED 39.10 // ºC temperatura PT 1000 +#define A3_TED 39.10 +#define A4_TED 39.10 +#define A5_TED 39.10 // ºC temperatura ambiental con el LM35 #define D0_TYPE NONE // Ejemplo: OUT #define D1_TYPE NONE // Ejemplo: IN #define D2_TYPE NONE // Para medir Humedad con Resistencia AC -#define D3_TYPE OUT // Led encienden con 1 +#define D3_TYPE NONE // 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 D5_TYPE NONE // Led encienden con 0 +#define D6_TYPE PWM // Led encienden con 1 +#define D7_TYPE OUT // Pushbuttons (Activos en bajo) +#define D8_TYPE IN // 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 @@ -201,189 +184,147 @@ *************************************************************************************/ //Macros analogicas -AnalogIn ANALOG_A0(A0); //Bateria +AnalogIn ANALOG_A0(A0); AnalogIn ANALOG_A1(A1); AnalogIn ANALOG_A2(A2); AnalogIn ANALOG_A3(A3); AnalogIn ANALOG_A4(A4); AnalogIn ANALOG_A5(A5); //Temperatura ambiental con LM35 -#if D0_USO == ON - #if D0_TYPE == IN - DigitalIn PIN_D0(D0); - #else - DigitalOut PIN_D0(D0); - #endif -#endif +// Indica si alguien esta conectado al dispositivo. +DigitalOut PIN_CONNECT(D13); -#if D1_USO == ON - #if D1_TYPE == IN - DigitalIn PIN_D1(D1); - #else - DigitalOut PIN_D1(D1); - #endif +#if D2_TYPE == IN + DigitalIn PIN_D2(D2); +#elif D2_TYPE == OUT + DigitalOut PIN_D2(D2); +#else + int PIN_D2 = 0; #endif -#if D2_USO == ON - #if D2_TYPE == IN - DigitalIn PIN_D2(D2); - #else - DigitalOut PIN_D2(D2); - #endif +#if D3_TYPE == IN + DigitalIn PIN_D3(D3); +#elif D3_TYPE == OUT + DigitalOut PIN_D3(D3); #else - static int PIN_D2 = 0; + int PIN_D3 = 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 +#if D4_TYPE == NONE + static int PIN_D4 = 0; +#elif D4_TYPE == IN + DigitalIn PIN_D4(D4); +#elif D4_TYPE == OUT + DigitalOut PIN_D4(D4); +#else + int PIN_D4 = 0; #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 +#if D5_TYPE == IN + DigitalIn PIN_D5(D5); +#elif D5_TYPE == OUT + DigitalOut PIN_D5(D5); +#elif D5_TYPE == PWM + PwmOut PIN_D5(D5); +#else + int PIN_D5 = 0; +#endif + +#if D6_TYPE == IN + DigitalIn PIN_D6(D6); +#elif D6_TYPE == OUT + DigitalOut PIN_D6(D6); +#elif D6_TYPE == PWM + PwmOut PIN_D6(D6); +#else + int PIN_D6 = 0; #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 +#if D7_TYPE == IN + DigitalIn PIN_D7(D7); +#elif D7_TYPE == OUT + DigitalOut PIN_D7(D7); +#else + int PIN_D7 = 0; #endif -#if D7_USO == ON - #if D7_TYPE == IN - DigitalIn PIN_D7(D7); - #endif - #if D7_TYPE == OUT - DigitalOut PIN_D7(D7); - #endif +#if D8_TYPE == IN + DigitalIn PIN_D8(D8); +#elif D8_TYPE == OUT + DigitalOut PIN_D8(D8); #else - static int PIN_D7 = 0; + int PIN_D8 = 0; #endif -#if D8_USO == ON - #if D8_TYPE == IN - DigitalIn PIN_D8(D8); - #endif - #if D8_TYPE == OUT - DigitalOut PIN_D8(D8); - #endif +#if D9_TYPE == IN + DigitalIn PIN_D9(D9); +#elif D9_TYPE == OUT + DigitalOut PIN_D9(D9); +#elif D9_TYPE == PWM + PwmOut PIN_D9(D9); #else - static int PIN_D8 = 0; + int PIN_D9 = 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 +#if D10_TYPE == IN + DigitalIn PIN_D10(D10); +#elif D10_TYPE == OUT + DigitalOut PIN_D10(D10); #else - static int PIN_D9 = 0; + int PIN_D10 = 0; #endif -#if D10_USO == ON - #if D10_TYPE == IN - DigitalIn PIN_D10(D10); - #endif - #if D10_TYPE == OUT - DigitalOut PIN_D10(D10); - #endif +#if D11_TYPE == IN + DigitalIn PIN_D11(D11); +#elif D11_TYPE == OUT + DigitalOut PIN_D11(D11); #else - static int PIN_D10 = 0; -#endif - -#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; + 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 +#if D12_TYPE == IN + DigitalIn PIN_D12(D12); +#elif D12_TYPE == OUT + DigitalOut PIN_D12(D12); #else - static int PIN_D12 = 0; + 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 +#if D13_TYPE == IN + DigitalIn PIN_D13(D13); +#elif D13_TYPE == OUT + DigitalOut PIN_D13(D13); #else - static int PIN_D13 = 0; + 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 +#if D14_TYPE == IN + DigitalIn PIN_D14(D14); +#elif D14_TYPE == OUT + DigitalOut PIN_D14(D14); #else - static int PIN_D14 = 0; + 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 +#if D15_TYPE == IN + DigitalIn PIN_D15(D15); +#elif D15_TYPE == OUT + DigitalOut PIN_D15(D15); #else - static int PIN_D15 = 0; + 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 DigitalInput_DATA = 0x0000; // Mapa de bits con los valores de la entrada digital segun la posicion +uint16_t DigitalOutput_DATA = 0x0000; // Mapa de bits con los valores de la entrada digital segun la posicion +uint16_t ESTADO_ENTRADAS_DIGITALES = 0x0000; // Mapa de bits de los estados de las entradas digitales +uint16_t ESTADO_SALIDAS_DIGITALES = 0x0000; // Mapa de bits de las salidas digitales +uint16_t ESTADO_ENTRADAS_DIGITALES_OLD = 0x0000;// Almacena temporalmente el estado de las salidas digitales. uint16_t PAQUETE_ID = 0; - +static bool CONNECTED; 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 //Digital input, cantidad, posiciones --> de todos, ted = 0, tipico hasta 16 @@ -406,22 +347,19 @@ static int8_t SEND_CONFIG_GENERAL = 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; - +static bool publish_D0; // Indica si es necesario informar al gateway sobre estado de las salidas digitales +static bool publish_D1; // Indica si es necesario informar al gateway sobre estado de las entradas digitales BLE ble; // Permite imprimir mensajes en la consola Serial pc(USBTX, USBRX); -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; +static float value_A5, value_A4, value_A3, value_A2, value_A1, value_A0; + // 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}; @@ -431,6 +369,9 @@ // Trama de Configuracion de los Pines (a). static uint8_t TRAMA_CONFIG_GENERAL[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 , 0x00}; // Length 12 +static uint8_t TRAMA_CONFIG_ANALOG[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Length 6 +static uint8_t LECTURA_DIGITAL[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Length 6 +static uint8_t LECTURA_ANALOGICA[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Length 5 uint8_t txPayload[TXRX_BUF_LEN] = {0,}; uint8_t rxPayload[TXRX_BUF_LEN] = {0,}; @@ -448,7 +389,6 @@ pc.printf("Disconnected \r\n"); pc.printf("Restart advertising \r\n"); ble.startAdvertising(); - analog_enabled = 0; // Deja que envie lecturas el PT 1000 SEND_CONFIG_GENERAL = 0; @@ -459,22 +399,40 @@ SEND_CONFIG_ANALOG_3 = OFF; SEND_CONFIG_ANALOG_4 = OFF; SEND_CONFIG_ANALOG_5 = OFF; - + CONNECTED = false; + PIN_CONNECT = 0; } // Carga la configuración de las entradas digitales del MOTE. void readDigitalInputs_Value () { - // 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)); } +// Crea el Mapa de bits de las posiciones ocupadas de los pines digitales de salidas. +void readActuadoresDigitales() +{ + 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); + 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); + 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); + DigitalOutput_DATA |= (uint16_t) ((D3_TYPE == OUT ? 1 : 0) << 3) | ((D2_TYPE == OUT ? 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)); +// Crea el Mapa de bits de los estados de los pines digitales de entrada. +void cargarEstadoEntradasDigitales() +{ + 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); + 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); + 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); + ESTADO_ENTRADAS_DIGITALES |= (uint16_t) ((D3_TYPE == IN ? PIN_D3 : 0) << 3) | ((D2_TYPE == IN ? PIN_D2 : 0) << 2) ; +} + +// Crea el Mapa de bits de los estados de los pines digitales de salida. +void cargarEstadosSalidasDigitales() +{ + 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); + 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); + 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); + ESTADO_SALIDAS_DIGITALES |= (uint16_t) ((D3_TYPE == OUT ? PIN_D3 : 0) << 3) | ((D2_TYPE == OUT ? PIN_D2 : 0) << 2) ; } //Funcion para crear los extra bytes @@ -488,161 +446,23 @@ AnalogInput_Ted [4] = A4_TED; AnalogInput_Ted [5] = A5_TED; - if (D15_USO == ON && D15_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D15_USO << 15); - - if (D14_USO == ON && D14_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D14_USO << 14); - - if (D13_USO == ON && D13_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D13_USO << 13); - - if (D12_USO == ON && D12_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D12_USO << 12); - - if (D11_USO == ON && D11_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D11_USO << 11); - - if (D10_USO == ON && D10_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D10_USO << 10); - - if (D9_USO == ON && D9_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D9_USO << 9); - - if (D8_USO == ON && D8_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D8_USO << 8); - - if (D7_USO == ON && D7_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D7_USO << 7); - - if (D6_USO == ON && D6_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D6_USO << 6); - - if (D5_USO == ON && D5_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D5_USO << 5); - - if (D4_USO == ON && D4_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D4_USO << 4); - - if (D3_USO == ON && D3_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D3_USO << 3); - - if (D2_USO == ON && D2_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D2_USO << 2); - - if (D1_USO == ON && D1_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D1_USO << 1); - - if (D0_USO == ON && D0_TYPE == IN) - DigitalInput_Pos |= (uint16_t) (D0_USO << 0); - - - - - if (D15_USO == 1 && D15_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D15_USO << 15); - - if (D14_USO == 1 && D14_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D14_USO << 14); - - if (D13_USO == 1 && D13_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D13_USO << 13); - - if (D12_USO == 1 && D12_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D12_USO << 12); - - if (D11_USO == 1 && D11_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D11_USO << 11); - - if (D10_USO == 1 && D10_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D10_USO << 10); - - if (D9_USO == 1 && D9_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D9_USO << 9); - - if (D8_USO == 1 && D8_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D8_USO << 8); - - if (D7_USO == 1 && D7_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D7_USO << 7); + 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); + 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); + 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); + 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)); - if (D6_USO == 1 && D6_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D6_USO << 6); - - if (D5_USO == 1 && D5_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D5_USO << 5); - - if (D4_USO == 1 && D4_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D4_USO << 4); - - if (D3_USO == 1 && D3_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D3_USO << 3); - - if (D2_USO == 1 && D2_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D2_USO << 2); - - if (D1_USO == 1 && D1_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D1_USO << 1); - - if (D0_USO == 1 && D0_TYPE == OUT) - DigitalOutput_Pos |= (uint16_t) (D0_USO << 0); - - - - if (D15_USO == 1 && D15_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D15_USO << 15); - - if (D14_USO == 1 && D14_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D14_USO << 14); - - if (D13_USO == 1 && D13_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D13_USO << 13); - - if (D12_USO == 1 && D12_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D12_USO << 12); - - if (D11_USO == 1 && D11_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D11_USO << 11); + 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); + 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); + 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); + 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)); - if (D10_USO == 1 && D10_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D10_USO << 10); - - if (D9_USO == 1 && D9_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D9_USO << 9); - - if (D8_USO == 1 && D8_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D8_USO << 8); - - if (D7_USO == 1 && D7_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D7_USO << 7); - - if (D6_USO == 1 && D6_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D6_USO << 6); - - if (D5_USO == 1 && D5_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D5_USO << 5); - - if (D4_USO == 1 && D4_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D4_USO << 4); - - if (D3_USO == 1 && D3_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D3_USO << 3); - - if (D2_USO == 1 && D2_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D2_USO << 2); - - if (D1_USO == 1 && D1_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D1_USO << 1); - - if (D0_USO == 1 && D0_TYPE == PWM) - DigitalPwm_Pos |= (uint16_t) (D0_USO << 0); - - - //Digital inputs + 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); + 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); + 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); + 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)); + AnalogInput_Pos = (uint16_t) ((A5_USO << 5) | (A4_USO << 4) | (A3_USO << 3) | (A2_USO << 2) | (A1_USO << 1) | (A0_USO << 0)); - //Digital Outputs - - + //para probar pc.printf("DigitalInput_Pos = %x \r\n", DigitalInput_Pos); @@ -664,7 +484,6 @@ TRAMA_CONFIG_GENERAL [9] = 0xD0; // Codigo de las salidas difitales TRAMA_CONFIG_GENERAL [10] = (DigitalOutput_Pos>> 8); TRAMA_CONFIG_GENERAL [11] = DigitalOutput_Pos; - } @@ -674,15 +493,17 @@ void connectionCallback(const Gap::ConnectionCallbackParams_t *) { pc.printf("connectionCallback \r\n"); + PIN_CONNECT = 1; makeExtraBytes_CONFIG(); SEND_CONFIG_GENERAL = 1; + CONNECTED = true; } // Recepta las caracteristicas que se desea escribir en el mote. void WrittenHandler(const GattWriteCallbackParams *Handler) { - pc.printf("WrittenHandler(const GattWriteCallbackParams *Handler) \r\n"); + //pc.printf("WrittenHandler(const GattWriteCallbackParams *Handler) \r\n"); uint8_t buf[TXRX_BUF_LEN]; uint16_t bytesRead, index; @@ -694,10 +515,10 @@ for(index=0; index<bytesRead; index++) pc.putc(buf[index]); - pc.printf("Leemos la trama: \r\n"); - for(index=0; index<bytesRead; index++) { - pc.printf("buf[%02x]: %02x\r\n", index, buf[index]); - } + //pc.printf("Leemos la trama: \r\n"); + //for(index=0; index<bytesRead; index++) { + //pc.printf("buf[%02x]: %02x\r\n", index, buf[index]); + //} // Desde el telefono desactiva el envio de tramas de configuracion general o de cada sensor. if (buf[0] == 0xDC) { // Dato Configuracion @@ -713,6 +534,9 @@ SEND_CONFIG_ANALOG_3 = (A3_USO == ON)?1:0; SEND_CONFIG_ANALOG_4 = (A4_USO == ON)?1:0; SEND_CONFIG_ANALOG_5 = (A5_USO == ON)?1:0; + + publish_D1 = true; // bandera a true, para que el Mote deba obligatoriamente enviar al gateway el estado de las entradas digitales. + publish_D0 = true; // bandera a true, para que el Mote deba obligatoriamente enviar al gateway el estado de las entradas digitales. } // Maneja las Tramas de confirmacion de la configuracion detallada de cada senssor analogico @@ -738,88 +562,132 @@ break; } } + }else if (buf[0] == 0xAD) { + // Desde el gateway asignamos el nuevo valor del paquete id + // de esta manera al ser el paquete id = 0, no volvera hacer enviado de nuevo las lecturas de digital out al gateway + PAQUETE_ID = (((buf[1] << 8) & 0xFF00) | (buf[2] & 0xFF)); } // Verifico si es una trama de Escitura. if(buf[0] == 0xEE) { - PAQUETE_ID = buf[1]; + PAQUETE_ID = (((buf[1] << 8) & 0xFF00) | (buf[2] & 0xFF)); + //pc.printf("PAQUETE_ID: %d\r\n", PAQUETE_ID); // Verifico si es un signal Digital Out - if(buf[2] == 0xD0) { + if(buf[3] == 0xD0) { + publish_D0 = true; // indica que el satado de las salidas digitales deben ser enviadas para informar al gateway el estado de las mismas. // Evaluo sobre que pin se debe actuar. - switch (buf[3]) { + switch (buf[4]) { case 0x02: - #ifdef PIN_D2 - PIN_D2 = (buf[4] == 0x01) ? 1:0; + #if D2_TYPE == OUT + PIN_D2 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x03: - PIN_D3 = (buf[4] == 0x01) ? 1:0; break; + #if D3_TYPE == OUT + PIN_D3 = (buf[5] == 0x01) ? 1:0; + #endif + break; case 0x04: - PIN_D4 = (buf[4] == 0x00) ? 1:0; break; + #if D4_TYPE == OUT + PIN_D4 = (buf[5] == 0x01) ? 1:0; + #endif + break; case 0x05: - PIN_D5 = (buf[4] == 0x00) ? 1:0; break; + #if D5_TYPE == OUT + PIN_D5 = (buf[5] == 0x01) ? 1:0; + #endif + break; case 0x06: - PIN_D6 = (buf[4] == 0x01) ? 1:0; break; + #if D6_TYPE == OUT + PIN_D6 = (buf[5] == 0x01) ? 1:0; + #endif + break; case 0x07: - #ifdef PIN_D7 - PIN_D7 = (buf[4] == 0x01) ? 1:0; + #if D7_TYPE == OUT + PIN_D7 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x08: - #ifdef PIN_D8 - PIN_D8 = (buf[4] == 0x01) ? 1:0; + #if D8_TYPE == OUT + PIN_D8 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x09: - #ifdef PIN_D9 - PIN_D9 = (buf[4] == 0x01) ? 1:0; + #if D9_TYPE == OUT + PIN_D9 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x10: - #ifdef PIN_D10 - PIN_D10 = (buf[4] == 0x01) ? 1:0; + #if D10_TYPE == OUT + PIN_D10 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x11: - #ifdef PIN_D11 - PIN_D11 = (buf[4] == 0x01) ? 1:0; + #if D11_TYPE == OUT + PIN_D11 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x12: - #ifdef PIN_D12 - PIN_D12 = (buf[4] == 0x01) ? 1:0; + #if D12_TYPE == OUT + PIN_D12 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x13: - #ifdef PIN_D13 - PIN_D13 = (buf[4] == 0x01) ? 1:0; + #if D13_TYPE == OUT + PIN_D13 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x14: - #ifdef PIN_D14 - PIN_D14 = (buf[4] == 0x01) ? 1:0; + #if D14_TYPE == OUT + PIN_D14 = (buf[5] == 0x01) ? 1:0; #endif break; case 0x15: - #ifdef PIN_D15 - PIN_D15 = (buf[4] == 0x01) ? 1:0; + #if D15_TYPE == OUT + PIN_D15 = (buf[5] == 0x01) ? 1:0; #endif break; } // Verifico si es un signal Analog out - } else if(buf[2] == 0xA0) { - float value = (float)buf[4]/255; - switch (buf[3]) { + } else if(buf[3] == 0xA0) { + float value = (float)buf[5]/255; + bool enviar_trama = false; + int posicion = 0x00; + switch (buf[4]) { case 0x05: - PIN_D5 = value; break; + #if D5_TYPE == PWM + PIN_D5 = value; + posicion = 0x05; + enviar_trama = true; + #endif + break; case 0x06: - PIN_D6 = value; break; - case 0x09: - #ifdef PIN_D9 - PIN_D9 = value; + #if D6_TYPE == PWM + PIN_D6 = value; + posicion = 0x06; + enviar_trama = true; #endif break; + case 0x09: + #if D9_TYPE == PWM + PIN_D9 = value; + posicion = 0x09; + enviar_trama = true; + #endif + break; + } + + if (enviar_trama){ + LECTURA_DIGITAL[0] = 0xDD; // Codigo Datos + LECTURA_DIGITAL[1] = 0xA0; // A0 --> Codigo Senial (Analog Output) + LECTURA_DIGITAL[2] = posicion; // Posicion de la interfaz + LECTURA_DIGITAL[3] = (int8_t)(PAQUETE_ID >> 8); // primera parte del paquete + LECTURA_DIGITAL[4] = (int8_t)PAQUETE_ID ; // segunda parte del paquete + LECTURA_DIGITAL[5] = buf[5]; // Valor de las salidas digitales + PAQUETE_ID = 0; + pc.printf("PWM LECTURA_DIGITAL %x \r\n", LECTURA_DIGITAL); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 6); // Para el RTD } } } @@ -831,166 +699,247 @@ * Desde este metodo envia las tramas al Gateway. */ void m_status_check_handle(void) -{ - - uint8_t TRAMA_CONFIG_ANALOG[5]; - uint8_t LECTURA_DIGITAL[6]; - uint8_t LECTURA_ANALOGICA[6]; - - //pc.printf("enviar_config %d \r\n", enviar_config_01); - if (SEND_CONFIG_GENERAL == 1) { - // Envia la configuracion Genaral del Mote. - pc.printf("TRAMA_CONFIG_GENERAL0 %d \r\n", TRAMA_CONFIG_GENERAL[0]); - pc.printf("TRAMA_CONFIG_GENERAL1 %d \r\n", TRAMA_CONFIG_GENERAL[1]); - pc.printf("SEND_CONFIG_GENERAL %d \r\n", SEND_CONFIG_GENERAL); - ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_GENERAL, 12); - } - -// Envio de las tramas de Configuracion del Mote. - // -- Configuracion detallada de los sensores. - // Evalua si se encuentra pendiente enviar la configuracion de los sensores. - 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) { - - TRAMA_CONFIG_ANALOG[0] = (0xC2); // Codigo que indica que la configuracion sera por cada Pin. - TRAMA_CONFIG_ANALOG[1] = (0x05); // Categoria puede ser: A (Actuador) | 5 (Sensor) - TRAMA_CONFIG_ANALOG[2] = (0xAA); // Tipo de Signal AA | DD - - if (A0_USO == ON && SEND_CONFIG_ANALOG_0 == ON) { - TRAMA_CONFIG_ANALOG[3] = 0x00; // Posicion que ocupa en el mote - 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, 6); - - } else if (A1_USO == ON && SEND_CONFIG_ANALOG_1 == ON) { - TRAMA_CONFIG_ANALOG[3] = 0x01; // Posicion que ocupa en el mote - 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, 6); - - } else if (A2_USO == ON && SEND_CONFIG_ANALOG_2 == ON) { - TRAMA_CONFIG_ANALOG[3] = 0x02; // Posicion que ocupa en el mote - 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, 6); - - } else if (A3_USO == ON && SEND_CONFIG_ANALOG_3 == ON) { - TRAMA_CONFIG_ANALOG[3] = 0x03; // Posicion que ocupa en el mote - 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, 6); - - } else if (A4_USO == ON && SEND_CONFIG_ANALOG_4 == ON) { - TRAMA_CONFIG_ANALOG[3] = 0x04; // Posicion que ocupa en el mote - 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, 6); - - } else if (A5_USO == ON && SEND_CONFIG_ANALOG_5 == ON) { - TRAMA_CONFIG_ANALOG[3] = 0x05; // Posicion que ocupa en el mote - 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); +{ + // Verifica si alguien esta conectado para enviar las tramas a través de Bluetooth. + if (CONNECTED){ + if (SEND_CONFIG_GENERAL == 1) { + // Envia la configuracion Genaral del Mote. + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), TRAMA_CONFIG_GENERAL, 12); + } + + // Envio de las tramas de Configuracion de los sensores. + // Evalua si se encuentra pendiente enviar la configuracion de los sensores. + 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) { + + TRAMA_CONFIG_ANALOG[0] = (0xC2); // Codigo que indica que la configuracion sera por cada Pin. + TRAMA_CONFIG_ANALOG[1] = (0x05); // Categoria puede ser: A (Actuador) | 5 (Sensor) + TRAMA_CONFIG_ANALOG[2] = (0xAA); // Tipo de Signal AA | DD + + if (A0_USO == ON && SEND_CONFIG_ANALOG_0 == ON) { + TRAMA_CONFIG_ANALOG[3] = 0x00; // Posicion que ocupa en el mote + 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, 6); + + } else if (A1_USO == ON && SEND_CONFIG_ANALOG_1 == ON) { + TRAMA_CONFIG_ANALOG[3] = 0x01; // Posicion que ocupa en el mote + 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, 6); + + } else if (A2_USO == ON && SEND_CONFIG_ANALOG_2 == ON) { + TRAMA_CONFIG_ANALOG[3] = 0x02; // Posicion que ocupa en el mote + 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, 6); + + } else if (A3_USO == ON && SEND_CONFIG_ANALOG_3 == ON) { + TRAMA_CONFIG_ANALOG[3] = 0x03; // Posicion que ocupa en el mote + 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, 6); + + } else if (A4_USO == ON && SEND_CONFIG_ANALOG_4 == ON) { + TRAMA_CONFIG_ANALOG[3] = 0x04; // Posicion que ocupa en el mote + 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, 6); + + } else if (A5_USO == ON && SEND_CONFIG_ANALOG_5 == ON) { + TRAMA_CONFIG_ANALOG[3] = 0x05; // Posicion que ocupa en el mote + 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); + } + } + // Envio de las tramas de lecturas del Mote. + cargarEstadoEntradasDigitales(); // Leemos los estados digitales. + //pc.printf("ESTADO_ENTRADAS_DIGITALES_OLD %x - ESTADO_ENTRADAS_DIGITALES %x \r\n", ESTADO_ENTRADAS_DIGITALES_OLD, ESTADO_ENTRADAS_DIGITALES); + if (ESTADO_ENTRADAS_DIGITALES_OLD != ESTADO_ENTRADAS_DIGITALES || publish_D1) { + if (publish_D1){ + publish_D1 = false; + } + ESTADO_ENTRADAS_DIGITALES_OLD = ESTADO_ENTRADAS_DIGITALES; + + LECTURA_DIGITAL[0] = 0xDD; // Codigo de lectura de datos + LECTURA_DIGITAL[1] = 0xD1; // Digital Input + LECTURA_DIGITAL[2] = (int8_t)(ESTADO_ENTRADAS_DIGITALES >> 8); // valores de las interfaces digitales + LECTURA_DIGITAL[3] = (int8_t)(ESTADO_ENTRADAS_DIGITALES); // valores de las interfaces digitales + pc.printf("Envio LECTURA_DIGITAL %x \r\n", ESTADO_ENTRADAS_DIGITALES); // Imprimo en terminal lo que esta enviando desde el mote. + + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 4); // Para el RTD + + }else if (PAQUETE_ID != 0 || publish_D0) { + if (publish_D0){ + publish_D0 = false; + } + // Lecturas digitales + cargarEstadosSalidasDigitales(); + + pc.printf("ESTADO_SALIDAS_DIGITALES: %x \r\n", ESTADO_SALIDAS_DIGITALES); + LECTURA_DIGITAL[0] = 0xDD; // Codigo + LECTURA_DIGITAL[1] = 0xD0; // D0 --> Digital Output + LECTURA_DIGITAL[2] = (int8_t)(PAQUETE_ID >> 8); // primera parte del paquete + LECTURA_DIGITAL[3] = (int8_t)PAQUETE_ID ; // segunda parte del paquete + LECTURA_DIGITAL[4] = (int8_t)(ESTADO_SALIDAS_DIGITALES >> 8); // Valor de las salidas digitales + LECTURA_DIGITAL[5] = (int8_t)(ESTADO_SALIDAS_DIGITALES); // Valor de las salidas digitales + + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 6); // Para el RTD } - } - -// Envio de las tramas de lecturas del Mote. - // -- Envio las lecturas digitales - if (PAQUETE_ID != 0) { - PAQUETE_ID = 0; - readDigitalInputs_Value(); // Leemos los estados digitales. - - LECTURA_DIGITAL[0] = (0xDD); // Codigo - LECTURA_DIGITAL[1] = PAQUETE_ID; // paquete id - LECTURA_DIGITAL[2] = PAQUETE_ID; // paquete id - LECTURA_DIGITAL[3] = 0xDD; // A1| A0| D1| D0 - LECTURA_DIGITAL[4] = DigitalInput_DATA; // Posicion - pc.printf("Envio LECTURA_DIGITAL \r\n"); // Imprimo en terminal lo que esta enviando desde el mote. - - ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_DIGITAL, 5); // Para el RTD - } - - - // If digital in changes, report the state - // 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) ? 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("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; // 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) { - - 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); - - 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 + + // Envio de las tramas de las lecturas de los sensores habilitados. + if (SEND_CONFIG_GENERAL == 0) { + + LECTURA_ANALOGICA[0] = 0xDD; // Codigo Datos + LECTURA_ANALOGICA[1] = 0xA1; // --> Analog Input (A1) + + + // Si la configuracion ha sido enviada, envio las lecturas. Esta para cumplir con una secuencia. + if (A5_USO == ON) { + float s = ANALOG_A5; + 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); + + LECTURA_ANALOGICA[2] = 0x05; // --> Posicion del sensor + LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8); + LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF); + + pc.printf("ANALOG_A5 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD + } + } + if (A4_USO == ON) { + float s = ANALOG_A4; + if (value_A4 != s) { + value_A4 = 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); + + LECTURA_ANALOGICA[2] = 0x04; // --> Posicion del sensor + LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8); + LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF); + + pc.printf("ANALOG_A4 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD + } } - - + if (A3_USO == ON) { + float s = ANALOG_A3; + if (value_A3 != s) { + value_A3 = 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); + + LECTURA_ANALOGICA[2] = 0x03; // --> Posicion del sensor + LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8); + LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF); + + pc.printf("ANALOG_A3 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD + } + } + if (A2_USO == ON) { + float s = ANALOG_A2; + if (value_A2 != s) { + value_A2 = 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); + + LECTURA_ANALOGICA[2] = 0x02; // --> Posicion del sensor + LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8); + LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF); + + pc.printf("ANALOG_A2 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD + } + } + if (A1_USO == ON) { + float s = ANALOG_A1; + if (value_A1 != s) { + value_A1 = 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); + + LECTURA_ANALOGICA[2] = 0x01; // --> Posicion del sensor + LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8); + LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF); + + pc.printf("ANALOG_A1 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD + } + } + if (A0_USO == ON) { + float s = ANALOG_A0; + if (value_A0 != s) { + value_A0 = 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); + + LECTURA_ANALOGICA[2] = 0x00; // --> Posicion del sensor + LECTURA_ANALOGICA[3] = (int8_t)(Temperature_PF >> 8); + LECTURA_ANALOGICA[4] = (int8_t)(Temperature_PF); + + pc.printf("ANALOG_A0 (Format HEX): %x , LECTURA_ANALOGICA: %x \r\n", Temperature_PF, LECTURA_ANALOGICA); + ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), LECTURA_ANALOGICA, 5); // Para el RTD + } + } } } } @@ -998,17 +947,17 @@ void apagarLeds() { // SOLO PARA NRF51822 - if (D3_TYPE == OUT && D3_USO == ON){ - PIN_D3 = 0; + if (D3_TYPE == OUT) { + //PIN_D3 = 0; } - if (D4_TYPE == OUT && D4_USO == ON){ - PIN_D4 = 1; + if (D4_TYPE == OUT) { + //PIN_D4 = 1; } - if (D5_TYPE == OUT && D5_USO == ON){ - PIN_D5 = 1; + if (D5_TYPE == OUT) { + //PIN_D5 = 1; } - if (D6_TYPE == OUT && D6_USO == ON){ - PIN_D6 = 0; + if (D6_TYPE == OUT) { + //PIN_D6 = 0; } } @@ -1041,15 +990,44 @@ 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(); + + #if A0_USO == ON + value_A0 = ANALOG_A0.read(); + #else + value_A0 = 0; + #endif + + #if A1_USO == ON + value_A1 = ANALOG_A1.read(); + #else + value_A1 = 0; + #endif + + #if A2_USO == ON + value_A2 = ANALOG_A2.read(); + #else + value_A2 = 0; + #endif + + #if A3_USO == ON + value_A3 = ANALOG_A3.read(); + #else + value_A3 = 0; + #endif + + #if A4_USO == ON + value_A4 = ANALOG_A4.read(); + #else + value_A4 = 0; + #endif + + #if A5_USO == ON + value_A5 = ANALOG_A5.read(); + #else + value_A5 = 0; + #endif while(1) { ble.waitForEvent();