Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 5:a8c07a29df8a
- Parent:
- 4:a43cbe8aed6a
- Child:
- 6:84154a9a8717
--- a/main.cpp Wed Jun 01 15:17:19 2016 +0000
+++ b/main.cpp Tue Jun 14 19:08:23 2016 +0000
@@ -1,5 +1,4 @@
/*
-Primera Linea por Gustavo Belduma
Copyright (c) 2012-2014 RedBearLab
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
@@ -28,18 +27,63 @@
#define TXRX_BUF_LEN 20
-#define DIGITAL_OUT_PIN P0_17 //D7
+#define DIGITAL_OUT_7 P0_17 //D7
+#define DIGITAL_OUT_5 P0_23 //D5
+#define DIGITAL_OUT_4 P0_21 //D4
+
#define DIGITAL_IN_PIN P0_5 //A4
+
#define PWM_PIN P0_16 //D6
//#define SERVO_PIN P0_14 //D10
#define ANALOG_IN_PIN P0_6 //A5
-BLE ble;
+// Declarando los pines
+static int32_t A_0 = 0x00;
+static int32_t A_1 = 0x00;
+static int32_t A_2 = 0x00;
+static int32_t A_3 = 0x00;
+static int32_t A_4 = 0x01;
+static int32_t A_5 = 0x01;
-DigitalOut LED_SET(DIGITAL_OUT_PIN);
+static int32_t D_0 = 0x00;
+static int32_t D_1 = 0x00;
+static int32_t D_2 = 0x00;
+static int32_t D_3 = 0x00;
+static int32_t D_4 = 0x01;
+static int32_t D_5 = 0x01;
+static int32_t D_6 = 0x01;
+static int32_t D_7 = 0x01;
+static int32_t D_8 = 0x00;
+static int32_t D_9 = 0x00;
+static int32_t D_10 = 0x00;
+static int32_t D_11 = 0x00;
+static int32_t D_12 = 0x00;
+static int32_t D_13 = 0x00;
+static int32_t D_14 = 0x00;
+static int32_t D_15 = 0x00;
+static int32_t D_16 = 0x00;
+static int32_t D_17 = 0x00;
+static int32_t D_18 = 0x00;
+
+static int32_t send_config = 0;
+
+BLE ble;
+
+// Digital IN
DigitalIn BUTTON(DIGITAL_IN_PIN);
+
+// Digital OUT
+DigitalOut LED_SET_D7(DIGITAL_OUT_7);
+DigitalOut LED_SET_D5(DIGITAL_OUT_5);
+DigitalOut LED_SET_D4(DIGITAL_OUT_4);
+
+// Analog IN
+AnalogIn ANALOG(ANALOG_IN_PIN);
+
+// Analog OUT
+
+
PwmOut PWM(PWM_PIN);
-AnalogIn ANALOG(ANALOG_IN_PIN);
//Servo MYSERVO(SERVO_PIN);
Serial pc(USBTX, USBRX);
@@ -53,23 +97,21 @@
static const uint8_t uart_rx_uuid[] = {0x71, 0x3D, 0, 2, 0x50, 0x3E, 0x4C, 0x75, 0xBA, 0x94, 0x31, 0x48, 0xF1, 0x8D, 0x94, 0x1E};
static const uint8_t uart_base_uuid_rev[] = {0x1E, 0x94, 0x8D, 0xF1, 0x48, 0x31, 0x94, 0xBA, 0x75, 0x4C, 0x3E, 0x50, 0, 0, 0x3D, 0x71};
+// Declarando los vectores de configuracion para el mote.
+static const uint8_t di_conf [] = {0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, A_2, A_1, A_0}; // length: 10
+static const uint8_t do_conf [] = {0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, A_5, A_4, A_3}; // length: 10
+static const uint8_t ai_conf [] = {D_9, D_8, D_7, D_6, D_5, D_4, D_3, D_2, D_1, D_0}; // length: 10
+static const uint8_t ao_conf [] = {0x00, D_18, D_17, D_16, D_15, D_14, D_13, D_12, D_11, D_10}; // length: 10
+
uint8_t txPayload[TXRX_BUF_LEN] = {0,};
uint8_t rxPayload[TXRX_BUF_LEN] = {0,};
-//static uint8_t rx_buf[TXRX_BUF_LEN];
-//static uint8_t rx_len=0;
-
-
GattCharacteristic txCharacteristic (uart_tx_uuid, txPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
-
GattCharacteristic rxCharacteristic (uart_rx_uuid, rxPayload, 1, TXRX_BUF_LEN, GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
-
GattCharacteristic *uartChars[] = {&txCharacteristic, &rxCharacteristic};
-
GattService uartService(uart_base_uuid, uartChars, sizeof(uartChars) / sizeof(GattCharacteristic *));
-
/*
void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
{
@@ -87,12 +129,22 @@
pc.printf("Disconnected \r\n");
pc.printf("Restart advertising \r\n");
ble.startAdvertising();
-
+ LED_SET_D7 = 0;
+ send_config = 0;
+}
+// Ingresa por este metdo unicamente la primera vez que se conecta al mote.
+// Tomado desde: https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_LEDBlinker/file/dc392bde2b3c/main.cpp
+void connectionCallback(const Gap::ConnectionCallbackParams_t *)
+{
+ pc.printf("connectionCallback \r\n");
+ LED_SET_D7 = 1;
+ send_config = 2;
}
-
+// Recepta las caracteristicas que se desea escribir en el mote.
void WrittenHandler(const GattWriteCallbackParams *Handler)
{
+ pc.printf("WrittenHandler(const GattWriteCallbackParams *Handler) \r\n");
uint8_t buf[TXRX_BUF_LEN];
uint16_t bytesRead, index;
@@ -109,11 +161,15 @@
if(buf[0] == 0x01) {
if(buf[1] == 0x01) {
- LED_SET = 1;
+ LED_SET_D7 = 1;
+ LED_SET_D5 = 1;
+ LED_SET_D4 = 1;
//por dixys
pc.printf("LED SET 1 \r\n");
} else {
- LED_SET = 0;
+ LED_SET_D7 = 0;
+ LED_SET_D5 = 0;
+ LED_SET_D4 = 0;
//por dixys
pc.printf("LED SET 0 \r\n");
}
@@ -123,10 +179,11 @@
//por dixys
pc.printf("ANALOG ENABLE \r\n");
} else {
- //analog_enabled = 0;
+ analog_enabled = 0;
// lo vamos a poner fio enable para hacer pruebas luego lo quitamos
//por dixys
pc.printf("ANALOG DISAABLE \r\n");
+ pc.printf("valor : %d", analog_enabled);
}
} else if(buf[0] == 0x02) {
float value = (float)buf[1]/255;
@@ -141,12 +198,11 @@
analog_enabled = 0;
PWM = 0;
//MYSERVO.write(0);
- LED_SET = 0;
+ LED_SET_D7 = 0;
old_state = 0;
//por dixys
pc.printf("opcion 4 \r\n");
}
-
}
}
/*
@@ -170,7 +226,18 @@
*/
void m_status_check_handle(void)
{
+ uint8_t buf2[12];
uint8_t buf[3];
+
+ if(send_config > 0) {
+ ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), di_conf, 10);
+ ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), do_conf, 10);
+ ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), ai_conf, 10);
+ ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), ao_conf, 10);
+ send_config -= 1;
+ pc.printf("value: %d\r\n", send_config);
+ }
+
if (analog_enabled) { // if analog reading enabled
// Read and send out
float s = ANALOG;
@@ -178,6 +245,14 @@
buf[0] = (0x0B);
buf[1] = (value >> 8);
buf[2] = (value);
+ pc.printf("value: %d\r\n", value); // Imprimo en terminal lo que esta enviando desde el mote.
+
+ buf2[0] = 0xA1;
+ buf2[1] = 0x01;
+ buf2[2] = 0x97;
+ buf2[3] = 0x00;
+ ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf2, 4);
+
ble.updateCharacteristicValue(rxCharacteristic.getValueAttribute().getHandle(), buf, 3);
}
@@ -206,7 +281,7 @@
ble.init();
ble.onDisconnection(disconnectionCallback);
-
+ ble.onConnection(connectionCallback);
ble.onDataWritten(WrittenHandler);
pc.baud(9600);
@@ -233,7 +308,7 @@
//por dixys
// para probar, luego quitar. Esto hace que cada ticker se envie un dato analogico via BLE
- analog_enabled = 1;
+ analog_enabled = 0;
while(1) {
ble.waitForEvent();