Diseño de Firmaware Diseañado en base a los requerimientos definidos durante la etapa de analisis.

Dependencies:   BLE_API mbed

Fork of nRF51822_SimpleControls by Gustavo Belduma

Committer:
Gustavo_Eduardo338
Date:
Wed Aug 10 06:47:28 2016 +0000
Revision:
7:fb4c6c1dd3a9
Parent:
6:84154a9a8717
Child:
8:c4130ea78471
Configuracion Estable NEF51822 ; ; 2 sensores, 3 actuadores

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dixysleo 0:58e350255405 1 /*
dixysleo 0:58e350255405 2 Copyright (c) 2012-2014 RedBearLab
dixysleo 0:58e350255405 3
Gustavo_Eduardo338 4:a43cbe8aed6a 4 Permission is hereby granted, free of charge, to any person obtaining a copy of this software
Gustavo_Eduardo338 4:a43cbe8aed6a 5 and associated documentation files (the "Software"), to deal in the Software without restriction,
Gustavo_Eduardo338 4:a43cbe8aed6a 6 including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
Gustavo_Eduardo338 4:a43cbe8aed6a 7 and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
dixysleo 0:58e350255405 8 subject to the following conditions:
dixysleo 0:58e350255405 9 The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
dixysleo 0:58e350255405 10
Gustavo_Eduardo338 4:a43cbe8aed6a 11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
Gustavo_Eduardo338 4:a43cbe8aed6a 12 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
Gustavo_Eduardo338 4:a43cbe8aed6a 13 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
Gustavo_Eduardo338 4:a43cbe8aed6a 14 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
dixysleo 0:58e350255405 15 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
dixysleo 0:58e350255405 16
dixysleo 0:58e350255405 17 */
dixysleo 0:58e350255405 18
dixysleo 0:58e350255405 19 #include "mbed.h"
dixysleo 0:58e350255405 20 #include "ble/BLE.h"
dixysleo 0:58e350255405 21 #include "GattCallbackParamTypes.h"
dixysleo 0:58e350255405 22
dixysleo 0:58e350255405 23 #define BLE_UUID_TXRX_SERVICE 0x0000 /**< The UUID of the Nordic UART Service. */
dixysleo 0:58e350255405 24 #define BLE_UUID_TX_CHARACTERISTIC 0x0002 /**< The UUID of the TX Characteristic. */
dixysleo 0:58e350255405 25 #define BLE_UUIDS_RX_CHARACTERISTIC 0x0003 /**< The UUID of the RX Characteristic. */
dixysleo 0:58e350255405 26
dixysleo 0:58e350255405 27 #define TXRX_BUF_LEN 20
dixysleo 0:58e350255405 28
Gustavo_Eduardo338 5:a8c07a29df8a 29 #define DIGITAL_OUT_7 P0_17 //D7
Gustavo_Eduardo338 7:fb4c6c1dd3a9 30 #define DIGITAL_OUT_8 P0_19 //D8
Gustavo_Eduardo338 7:fb4c6c1dd3a9 31 #define DIGITAL_OUT_11 P0_12 //D11
Gustavo_Eduardo338 5:a8c07a29df8a 32 #define DIGITAL_OUT_4 P0_21 //D4
Gustavo_Eduardo338 5:a8c07a29df8a 33
dixysleo 0:58e350255405 34 #define DIGITAL_IN_PIN P0_5 //A4
Gustavo_Eduardo338 5:a8c07a29df8a 35
dixysleo 0:58e350255405 36 #define PWM_PIN P0_16 //D6
dixysleo 0:58e350255405 37 #define ANALOG_IN_PIN P0_6 //A5
dixysleo 0:58e350255405 38
Gustavo_Eduardo338 5:a8c07a29df8a 39 // Declarando los pines
Gustavo_Eduardo338 7:fb4c6c1dd3a9 40 //static int32_t send_config = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 41 static int32_t enviar_config_01 = 0;
dixysleo 0:58e350255405 42
Gustavo_Eduardo338 7:fb4c6c1dd3a9 43 static int32_t sen_analog_in_5 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 44 static int32_t sen_digital_in_7 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 45 static int32_t act_analog_out_6 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 46 static int32_t act_analog_out_4 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 47 static int32_t act_analog_out_7 = 0;
Gustavo_Eduardo338 5:a8c07a29df8a 48
Gustavo_Eduardo338 5:a8c07a29df8a 49 BLE ble;
Gustavo_Eduardo338 5:a8c07a29df8a 50
Gustavo_Eduardo338 5:a8c07a29df8a 51 // Digital IN
dixysleo 0:58e350255405 52 DigitalIn BUTTON(DIGITAL_IN_PIN);
Gustavo_Eduardo338 5:a8c07a29df8a 53
Gustavo_Eduardo338 5:a8c07a29df8a 54 // Digital OUT
Gustavo_Eduardo338 5:a8c07a29df8a 55 DigitalOut LED_SET_D7(DIGITAL_OUT_7);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 56 DigitalOut LED_SET_D8(DIGITAL_OUT_8);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 57 DigitalOut LED_SET_D11(DIGITAL_OUT_11);
Gustavo_Eduardo338 5:a8c07a29df8a 58 DigitalOut LED_SET_D4(DIGITAL_OUT_4);
Gustavo_Eduardo338 5:a8c07a29df8a 59
Gustavo_Eduardo338 5:a8c07a29df8a 60 // Analog IN
Gustavo_Eduardo338 5:a8c07a29df8a 61 AnalogIn ANALOG(ANALOG_IN_PIN);
Gustavo_Eduardo338 5:a8c07a29df8a 62
Gustavo_Eduardo338 5:a8c07a29df8a 63 // Analog OUT
Gustavo_Eduardo338 7:fb4c6c1dd3a9 64 PwmOut PWM(PWM_PIN);
Gustavo_Eduardo338 5:a8c07a29df8a 65
Gustavo_Eduardo338 7:fb4c6c1dd3a9 66 // Permite imprimir mensajes en la consola
dixysleo 0:58e350255405 67 Serial pc(USBTX, USBRX);
dixysleo 0:58e350255405 68
dixysleo 0:58e350255405 69 static uint8_t analog_enabled = 0;
dixysleo 0:58e350255405 70 static uint8_t old_state = 0;
dixysleo 0:58e350255405 71
dixysleo 0:58e350255405 72 // The Nordic UART Service
dixysleo 0:58e350255405 73 static const uint8_t uart_base_uuid[] = {0x71, 0x3D, 0, 0, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
dixysleo 0:58e350255405 74 static const uint8_t uart_tx_uuid[] = {0x71, 0x3D, 0, 3, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
dixysleo 0:58e350255405 75 static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
dixysleo 0:58e350255405 76 static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};
dixysleo 0:58e350255405 77
Gustavo_Eduardo338 7:fb4c6c1dd3a9 78 // Trama de Configuracion de los Pines (a).
Gustavo_Eduardo338 7:fb4c6c1dd3a9 79 static const uint8_t di_conf [] = {0xC01,0xA1, 20, 0xA0, 40, 0xD1, 8, 0xD0, 90}; // length: 9
dixysleo 0:58e350255405 80
dixysleo 0:58e350255405 81 uint8_t txPayload[TXRX_BUF_LEN] = {0,};
dixysleo 0:58e350255405 82 uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
dixysleo 0:58e350255405 83
dixysleo 0:58e350255405 84 GattCharacteristic txCharacteristic (uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
dixysleo 0:58e350255405 85 GattCharacteristic rxCharacteristic (uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
dixysleo 0:58e350255405 86 GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic};
dixysleo 0:58e350255405 87 GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
dixysleo 0:58e350255405 88
dixysleo 0:58e350255405 89 // https://developer.mbed.org/forum/repo-61676-BLE_GAP_Example-community/topic/17193/
Gustavo_Eduardo338 4:a43cbe8aed6a 90 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *)
Gustavo_Eduardo338 4:a43cbe8aed6a 91 {
Gustavo_Eduardo338 4:a43cbe8aed6a 92 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
dixysleo 0:58e350255405 93 pc.printf("Disconnected \r\n");
dixysleo 0:58e350255405 94 pc.printf("Restart advertising \r\n");
Gustavo_Eduardo338 4:a43cbe8aed6a 95 ble.startAdvertising();
Gustavo_Eduardo338 7:fb4c6c1dd3a9 96 LED_SET_D11 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 97 analog_enabled = 0; // Deja que envie lecturas el PT 1000
Gustavo_Eduardo338 7:fb4c6c1dd3a9 98
Gustavo_Eduardo338 7:fb4c6c1dd3a9 99 sen_analog_in_5 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 100 sen_digital_in_7 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 101 act_analog_out_6 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 102 act_analog_out_4 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 103 act_analog_out_7 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 104
Gustavo_Eduardo338 7:fb4c6c1dd3a9 105 enviar_config_01 = 0;
Gustavo_Eduardo338 5:a8c07a29df8a 106 }
Gustavo_Eduardo338 5:a8c07a29df8a 107 // Ingresa por este metdo unicamente la primera vez que se conecta al mote.
Gustavo_Eduardo338 5:a8c07a29df8a 108 // Tomado desde: https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_LEDBlinker/file/dc392bde2b3c/main.cpp
Gustavo_Eduardo338 5:a8c07a29df8a 109 void connectionCallback(const Gap::ConnectionCallbackParams_t *)
Gustavo_Eduardo338 5:a8c07a29df8a 110 {
Gustavo_Eduardo338 5:a8c07a29df8a 111 pc.printf("connectionCallback \r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 112 LED_SET_D11 = 1; // Enciendo led que indica que alguien se conecto
Gustavo_Eduardo338 7:fb4c6c1dd3a9 113 enviar_config_01 = 1;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 114 //send_config = 1;
dixysleo 0:58e350255405 115 }
dixysleo 0:58e350255405 116
Gustavo_Eduardo338 5:a8c07a29df8a 117 // Recepta las caracteristicas que se desea escribir en el mote.
dixysleo 0:58e350255405 118 void WrittenHandler(const GattWriteCallbackParams *Handler)
Gustavo_Eduardo338 4:a43cbe8aed6a 119 {
Gustavo_Eduardo338 5:a8c07a29df8a 120 pc.printf("WrittenHandler(const GattWriteCallbackParams *Handler) \r\n");
dixysleo 0:58e350255405 121 uint8_t buf[TXRX_BUF_LEN];
dixysleo 0:58e350255405 122 uint16_t bytesRead, index;
Gustavo_Eduardo338 4:a43cbe8aed6a 123
Gustavo_Eduardo338 4:a43cbe8aed6a 124 if (Handler->handle == txCharacteristic.getValueAttribute().getHandle()) {
dixysleo 0:58e350255405 125 ble.readCharacteristicValue(txCharacteristic.getValueAttribute().getHandle(), buf, &bytesRead);
dixysleo 0:58e350255405 126 memset(txPayload, 0, TXRX_BUF_LEN);
Gustavo_Eduardo338 4:a43cbe8aed6a 127 memcpy(txPayload, buf, TXRX_BUF_LEN);
Gustavo_Eduardo338 4:a43cbe8aed6a 128
dixysleo 0:58e350255405 129 //por dixys
Gustavo_Eduardo338 4:a43cbe8aed6a 130 pc.printf("Buffer recibido desde Android: \r\n");
Gustavo_Eduardo338 4:a43cbe8aed6a 131
dixysleo 0:58e350255405 132 for(index=0; index<bytesRead; index++)
dixysleo 0:58e350255405 133 pc.putc(buf[index]);
Gustavo_Eduardo338 4:a43cbe8aed6a 134
Gustavo_Eduardo338 7:fb4c6c1dd3a9 135 pc.printf("Leemos la trama: \r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 136 for(index=0; index<bytesRead; index++) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 137 pc.printf("buf[%02x]: %02x\r\n", index, buf[index]);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 138
Gustavo_Eduardo338 7:fb4c6c1dd3a9 139 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 140 pc.printf("Fin de la Lectura: \r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 141
Gustavo_Eduardo338 7:fb4c6c1dd3a9 142 // Desde el telefono desactiva el envio de tramas de la Configuracion general del mote.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 143 if (buf[0] == 0xDC && buf[1] == 0xC1) { // Dato Configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 144 enviar_config_01 = buf[2]; // Debe ser cero, hace que ya no se vuelva a enviar la conf general del mote
Gustavo_Eduardo338 7:fb4c6c1dd3a9 145 sen_analog_in_5 = 1; // habilita al Sensor PT1000, para que envie su configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 146 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 147 // PT 1000
Gustavo_Eduardo338 7:fb4c6c1dd3a9 148 if (buf[0] == 0xDC && buf[1] == 0x05 && buf[2] == 0xAA && buf[3] == 20) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 149 sen_analog_in_5 = buf[4]; // Hace que ya no se vuelva a enviar este tipo de configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 150 sen_digital_in_7 = 1; // habilita al Sensor de Luz, para que envie su configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 151 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 152 // sensor de luz
Gustavo_Eduardo338 7:fb4c6c1dd3a9 153 if (buf[0] == 0xDC && buf[1] == 0x05 && buf[2] == 0xDD && buf[3] == 10) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 154 sen_digital_in_7 = buf[4]; // Hace que ya no se vuelva a enviar este tipo de configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 155 act_analog_out_6 = 1; // habilita al atuador PWD, para que envie su configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 156 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 157
Gustavo_Eduardo338 7:fb4c6c1dd3a9 158 // PWD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 159 if (buf[0] == 0xDC && buf[1] == 0xA && buf[2] == 0xAA && buf[3] == 40) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 160 act_analog_out_6 = buf[4]; // Hace que ya no se vuelva a enviar este tipo de configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 161 act_analog_out_4 = 1; // habilita al atuador Bomba, para que envie su configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 162 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 163 // Actuador la Bomba
Gustavo_Eduardo338 7:fb4c6c1dd3a9 164 if (buf[0] == 0xDC && buf[1] == 0xA && buf[2] == 0x0A && buf[3] == 80) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 165 act_analog_out_4 = buf[4]; // Hace que ya no se vuelva a enviar este tipo de configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 166 act_analog_out_7 = 1; // habilita al atuador Foco, para que envie su configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 167
Gustavo_Eduardo338 7:fb4c6c1dd3a9 168 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 169 // Actuador Foco
Gustavo_Eduardo338 7:fb4c6c1dd3a9 170 if (buf[0] == 0xDC && buf[1] == 0xA && buf[2] == 0x0A && buf[3] == 10) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 171 act_analog_out_7 = buf[4]; // Hace que ya no se vuelva a enviar este tipo de configuracion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 172 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 173
Gustavo_Eduardo338 7:fb4c6c1dd3a9 174
Gustavo_Eduardo338 7:fb4c6c1dd3a9 175 // Verifico si es una trama de Escitura.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 176 if(buf[0] == 0xEE) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 177 // Verifico si es un signal Digital Out
Gustavo_Eduardo338 7:fb4c6c1dd3a9 178 if(buf[2] == 0xD0) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 179 if(buf[3] == 0x07 && buf[4] == 0x01) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 180 LED_SET_D7 = 1;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 181 } else {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 182 LED_SET_D7 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 183 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 184
Gustavo_Eduardo338 7:fb4c6c1dd3a9 185 if(buf[3] == 0x04 && buf[4] == 0x01) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 186 LED_SET_D4 = 1;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 187 analog_enabled = 1;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 188 } else {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 189 LED_SET_D4 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 190 analog_enabled = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 191 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 192 // Verifico si es un signal Analog out
Gustavo_Eduardo338 7:fb4c6c1dd3a9 193 } else if(buf[2] == 0xA0) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 194 if(buf[3] == 0x06) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 195 float value = (float)buf[4]/255;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 196 PWM = value;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 197 pc.printf("PWM = %f \r\n", value);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 198 }
dixysleo 0:58e350255405 199 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 200
Gustavo_Eduardo338 4:a43cbe8aed6a 201 } else if(buf[0] == 0xA0) {
Gustavo_Eduardo338 4:a43cbe8aed6a 202 if(buf[1] == 0x01) {
dixysleo 0:58e350255405 203 analog_enabled = 1;
dixysleo 0:58e350255405 204 //por dixys
dixysleo 0:58e350255405 205 pc.printf("ANALOG ENABLE \r\n");
Gustavo_Eduardo338 4:a43cbe8aed6a 206 } else {
Gustavo_Eduardo338 5:a8c07a29df8a 207 analog_enabled = 0;
dixysleo 0:58e350255405 208 // lo vamos a poner fio enable para hacer pruebas luego lo quitamos
dixysleo 0:58e350255405 209 //por dixys
dixysleo 0:58e350255405 210 pc.printf("ANALOG DISAABLE \r\n");
Gustavo_Eduardo338 5:a8c07a29df8a 211 pc.printf("valor : %d", analog_enabled);
dixysleo 0:58e350255405 212 }
Gustavo_Eduardo338 4:a43cbe8aed6a 213 } else if(buf[0] == 0x02) {
dixysleo 0:58e350255405 214 float value = (float)buf[1]/255;
dixysleo 0:58e350255405 215 PWM = value;
dixysleo 0:58e350255405 216 //por dixys
dixysleo 0:58e350255405 217 pc.printf("PWM = %f \r\n", value);
Gustavo_Eduardo338 4:a43cbe8aed6a 218 } else if(buf[0] == 0x03) {
barcejorge 3:53cd39af0b12 219 //MYSERVO.write(buf[1]);
dixysleo 0:58e350255405 220 //por dixys
dixysleo 0:58e350255405 221 pc.printf("SERVO buffer \r\n");
Gustavo_Eduardo338 4:a43cbe8aed6a 222 } else if(buf[0] == 0x04) {
dixysleo 0:58e350255405 223 analog_enabled = 0;
dixysleo 0:58e350255405 224 PWM = 0;
barcejorge 3:53cd39af0b12 225 //MYSERVO.write(0);
Gustavo_Eduardo338 5:a8c07a29df8a 226 LED_SET_D7 = 0;
Gustavo_Eduardo338 4:a43cbe8aed6a 227 old_state = 0;
dixysleo 0:58e350255405 228 //por dixys
dixysleo 0:58e350255405 229 pc.printf("opcion 4 \r\n");
dixysleo 0:58e350255405 230 }
dixysleo 0:58e350255405 231 }
dixysleo 0:58e350255405 232 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 233
dixysleo 0:58e350255405 234 /*
Gustavo_Eduardo338 7:fb4c6c1dd3a9 235 * Desde este metodo envia las tramas al Gateway.
dixysleo 0:58e350255405 236 */
dixysleo 0:58e350255405 237 void m_status_check_handle(void)
Gustavo_Eduardo338 4:a43cbe8aed6a 238 {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 239 uint8_t tiempo_entre_envio_conf = 200;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 240 uint8_t buf[5], conf_02[5];
Gustavo_Eduardo338 7:fb4c6c1dd3a9 241 conf_02[0] = (0xC02); // Codigo que indica que la configuracion sera por cada Pin.
Gustavo_Eduardo338 5:a8c07a29df8a 242
Gustavo_Eduardo338 4:a43cbe8aed6a 243 if (analog_enabled) { // if analog reading enabled
Gustavo_Eduardo338 7:fb4c6c1dd3a9 244 pc.printf("analog_enabled: %d\r\n", analog_enabled);
dixysleo 0:58e350255405 245 // Read and send out
dixysleo 0:58e350255405 246 float s = ANALOG;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 247 pc.printf("value pt 1000 (s): %d\r\n", s);
Gustavo_Eduardo338 4:a43cbe8aed6a 248 uint16_t value = s*1024;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 249 buf[0] = (0xDD); // Codigo
Gustavo_Eduardo338 7:fb4c6c1dd3a9 250 buf[1] = (0x00); // paquete id
Gustavo_Eduardo338 7:fb4c6c1dd3a9 251 buf[2] = (0xA1); // A1| A0| D1| D0
Gustavo_Eduardo338 7:fb4c6c1dd3a9 252 buf[3] = (20); // Posicion
Gustavo_Eduardo338 7:fb4c6c1dd3a9 253 buf[4] = (value); // Valor
Gustavo_Eduardo338 7:fb4c6c1dd3a9 254 pc.printf("value pt 1000: %d\r\n", value); // Imprimo en terminal lo que esta enviando desde el mote.
Gustavo_Eduardo338 5:a8c07a29df8a 255
Gustavo_Eduardo338 7:fb4c6c1dd3a9 256 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 5); // Para el RTD
dixysleo 0:58e350255405 257 }
Gustavo_Eduardo338 4:a43cbe8aed6a 258
dixysleo 0:58e350255405 259 // If digital in changes, report the state
Gustavo_Eduardo338 4:a43cbe8aed6a 260 if (BUTTON != old_state) {
dixysleo 0:58e350255405 261 old_state = BUTTON;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 262 buf[0] = (0xDD); // Codigo de Lecturas de Datos.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 263 buf[1] = (0x00); // Paquete
Gustavo_Eduardo338 7:fb4c6c1dd3a9 264 buf[2] = (0xD1); // A1| A0| D1| D0
Gustavo_Eduardo338 7:fb4c6c1dd3a9 265 buf[3] = (8); // Posicion
Gustavo_Eduardo338 4:a43cbe8aed6a 266 if (BUTTON == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 267 pc.printf("BUTTON == 1\r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 268 LED_SET_D7 = 0;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 269 buf[4] = (0x00); // Valor
Gustavo_Eduardo338 4:a43cbe8aed6a 270 } else {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 271 pc.printf("else BUTTON == 1 \r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 272 LED_SET_D7 = 1;
Gustavo_Eduardo338 7:fb4c6c1dd3a9 273 buf[4] = (0x01); // Valor
dixysleo 0:58e350255405 274 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 275 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 5);
dixysleo 0:58e350255405 276 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 277
Gustavo_Eduardo338 7:fb4c6c1dd3a9 278 //pc.printf("enviar_config %d \r\n", enviar_config_01);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 279 if (enviar_config_01 == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 280 // Envia la configuracion Genaral del Mote.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 281 //wait_ms(tiempo_entre_envio_conf);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 282 pc.printf("enviar_config_01 %d \r\n", enviar_config_01);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 283 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), di_conf, 9);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 284 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 285
Gustavo_Eduardo338 7:fb4c6c1dd3a9 286 // Envia la configuracion del PT 1000.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 287 if (sen_analog_in_5 == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 288 conf_02[1] = (0x05); // Categoria puede ser: A (Actuador) | 5 (Sensor)
Gustavo_Eduardo338 7:fb4c6c1dd3a9 289 conf_02[2] = (0xAA); // Tipo de Signal AA | DD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 290 conf_02[3] = (0); // Codigo del Ted
Gustavo_Eduardo338 7:fb4c6c1dd3a9 291 conf_02[4] = (20); // Posicion que ocupa en el mote
Gustavo_Eduardo338 7:fb4c6c1dd3a9 292
Gustavo_Eduardo338 7:fb4c6c1dd3a9 293 pc.printf("Configuracion Detallada por Pin PT1000\r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 294 //wait_ms(tiempo_entre_envio_conf);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 295 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 296 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 297
Gustavo_Eduardo338 7:fb4c6c1dd3a9 298 // Envia la configuracion del sensor de luz.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 299 if (sen_digital_in_7 == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 300 conf_02[1] = (0x05); // Categoria puede ser: A (Actuador) | 5 (Sensor)
Gustavo_Eduardo338 7:fb4c6c1dd3a9 301 conf_02[2] = (0xDD); // Tipo de Signal AA | DD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 302 conf_02[3] = (0); // Codigo del Ted
Gustavo_Eduardo338 7:fb4c6c1dd3a9 303 conf_02[4] = (10); // Posicion que ocupa en el mote
Gustavo_Eduardo338 7:fb4c6c1dd3a9 304
Gustavo_Eduardo338 7:fb4c6c1dd3a9 305 pc.printf("Configuracion Detallada por sensor de luz\r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 306 //wait_ms(tiempo_entre_envio_conf);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 307 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 308 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 309
Gustavo_Eduardo338 7:fb4c6c1dd3a9 310 // Envia la configuracion del PWD una sola vez.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 311 if (act_analog_out_6 == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 312 conf_02[1] = (0xA); // Categoria puede ser: A (Actuador) | 5 (Sensor)
Gustavo_Eduardo338 7:fb4c6c1dd3a9 313 conf_02[2] = (0xAA); // Tipo de Signal AA | DD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 314 conf_02[3] = (0); // Codigo del Ted
Gustavo_Eduardo338 7:fb4c6c1dd3a9 315 conf_02[4] = (40); // Posicion que ocupa en el mote
Gustavo_Eduardo338 7:fb4c6c1dd3a9 316
Gustavo_Eduardo338 7:fb4c6c1dd3a9 317 pc.printf("Configuracion Detallada por PWD\r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 318 //wait_ms(tiempo_entre_envio_conf);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 319 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 320 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 321
Gustavo_Eduardo338 7:fb4c6c1dd3a9 322 // Envia la configuracion del Actuador la Bomba una sola vez.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 323 if (act_analog_out_4 == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 324 conf_02[1] = (0xA); // Categoria puede ser: A (Actuador) | 5 (Sensor)
Gustavo_Eduardo338 7:fb4c6c1dd3a9 325 conf_02[2] = (0x0A); // Tipo de Signal AA | DD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 326 conf_02[3] = (0); // Codigo del Ted
Gustavo_Eduardo338 7:fb4c6c1dd3a9 327 conf_02[4] = (80); // Posicion que ocupa en el mote
Gustavo_Eduardo338 7:fb4c6c1dd3a9 328
Gustavo_Eduardo338 7:fb4c6c1dd3a9 329 pc.printf("Configuracion Detallada por Actuador la Bomba \r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 330 //wait_ms(tiempo_entre_envio_conf);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 331 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 332 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 333
Gustavo_Eduardo338 7:fb4c6c1dd3a9 334 // Envia la configuracion del Actuador Foco una sola vez.
Gustavo_Eduardo338 7:fb4c6c1dd3a9 335 if (act_analog_out_7 == 1) {
Gustavo_Eduardo338 7:fb4c6c1dd3a9 336 conf_02[1] = (0xA); // Categoria puede ser: A (Actuador) | 5 (Sensor)
Gustavo_Eduardo338 7:fb4c6c1dd3a9 337 conf_02[2] = (0x0A); // Tipo de Signal AA | DD
Gustavo_Eduardo338 7:fb4c6c1dd3a9 338 conf_02[3] = (0); // Codigo del Ted
Gustavo_Eduardo338 7:fb4c6c1dd3a9 339 conf_02[4] = (10); // Posicion que ocupa en el mote
Gustavo_Eduardo338 7:fb4c6c1dd3a9 340
Gustavo_Eduardo338 7:fb4c6c1dd3a9 341 pc.printf("Configuracion Detallada por Actuador Foco \r\n");
Gustavo_Eduardo338 7:fb4c6c1dd3a9 342 //wait_ms(tiempo_entre_envio_conf);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 343 ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), conf_02, 5);
Gustavo_Eduardo338 7:fb4c6c1dd3a9 344 }
Gustavo_Eduardo338 7:fb4c6c1dd3a9 345
Gustavo_Eduardo338 7:fb4c6c1dd3a9 346 wait_ms(100);
dixysleo 0:58e350255405 347 }
dixysleo 0:58e350255405 348
dixysleo 0:58e350255405 349 int main(void)
Gustavo_Eduardo338 4:a43cbe8aed6a 350 {
dixysleo 0:58e350255405 351 Ticker ticker;
dixysleo 0:58e350255405 352 ticker.attach_us(m_status_check_handle, 200000);
Gustavo_Eduardo338 4:a43cbe8aed6a 353
dixysleo 0:58e350255405 354 ble.init();
dixysleo 0:58e350255405 355 ble.onDisconnection(disconnectionCallback);
Gustavo_Eduardo338 5:a8c07a29df8a 356 ble.onConnection(connectionCallback);
Gustavo_Eduardo338 4:a43cbe8aed6a 357 ble.onDataWritten(WrittenHandler);
Gustavo_Eduardo338 4:a43cbe8aed6a 358
dixysleo 0:58e350255405 359 pc.baud(9600);
dixysleo 0:58e350255405 360 pc.printf("SimpleChat Init \r\n");
dixysleo 0:58e350255405 361 //pc.attach( uartCB , pc.RxIrq);
Gustavo_Eduardo338 4:a43cbe8aed6a 362
Gustavo_Eduardo338 4:a43cbe8aed6a 363 // setup advertising
dixysleo 0:58e350255405 364 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
dixysleo 0:58e350255405 365 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
dixysleo 0:58e350255405 366 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
Gustavo_Eduardo338 4:a43cbe8aed6a 367 (const uint8_t *)"Biscuit", sizeof("Biscuit") - 1); // Original: Biscuit
dixysleo 0:58e350255405 368 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
Gustavo_Eduardo338 4:a43cbe8aed6a 369 (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
Gustavo_Eduardo338 4:a43cbe8aed6a 370 // 100ms; in multiples of 0.625ms.
dixysleo 0:58e350255405 371 ble.setAdvertisingInterval(160);
dixysleo 0:58e350255405 372
dixysleo 0:58e350255405 373 ble.addService(uartService);
Gustavo_Eduardo338 4:a43cbe8aed6a 374
Gustavo_Eduardo338 4:a43cbe8aed6a 375 ble.startAdvertising();
Gustavo_Eduardo338 4:a43cbe8aed6a 376
dixysleo 0:58e350255405 377 pc.printf("Advertising Start \r\n");
Gustavo_Eduardo338 4:a43cbe8aed6a 378
dixysleo 0:58e350255405 379 //por dixys
dixysleo 0:58e350255405 380 // para probar, luego quitar. Esto hace que cada ticker se envie un dato analogico via BLE
Gustavo_Eduardo338 5:a8c07a29df8a 381 analog_enabled = 0;
Gustavo_Eduardo338 4:a43cbe8aed6a 382
Gustavo_Eduardo338 4:a43cbe8aed6a 383 while(1) {
Gustavo_Eduardo338 4:a43cbe8aed6a 384 ble.waitForEvent();
dixysleo 0:58e350255405 385 }
Gustavo_Eduardo338 4:a43cbe8aed6a 386 }