Gustavo Belduma
/
nRF51822_SimpleControls_1
Macros Corregidas
Diff: main.cpp
- 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(); }