Uart serie example, loopback
Dependencies: mbed BLE_API nRF51822
main.cpp
00001 00002 #include "mbed.h" 00003 #include "nrf51.h" 00004 #include "nrf51_bitfields.h" 00005 00006 #include "BLE.h" 00007 #include "UARTService.h" 00008 00009 00010 #define LOG(...) { pc.printf(__VA_ARGS__); } 00011 00012 #define LED_GREEN p21 00013 #define LED_RED p22 00014 #define LED_BLUE p23 00015 #define BUTTON_PIN p17 00016 #define BATTERY_PIN p1 00017 00018 #define MPU6050_SDA p12 00019 #define MPU6050_SCL p13 00020 00021 #define UART_TX p9 00022 #define UART_RX p11 00023 #define UART_CTS p8 00024 #define UART_RTS p10 00025 00026 00027 00028 DigitalOut blue(LED_BLUE); 00029 DigitalOut green(LED_GREEN); 00030 DigitalOut red(LED_RED); 00031 00032 InterruptIn button(BUTTON_PIN); 00033 AnalogIn battery(BATTERY_PIN); 00034 Serial pc(UART_TX, UART_RX); 00035 00036 InterruptIn motion_probe(p14); 00037 00038 int read_none_count = 0; 00039 00040 BLEDevice ble; 00041 UARTService *uartServicePtr; 00042 00043 volatile bool bleIsConnected = false; 00044 volatile uint8_t tick_event = 0; 00045 00046 00047 00048 void check_i2c_bus(void); 00049 unsigned short inv_orientation_matrix_to_scalar( const signed char *mtx); 00050 00051 00052 void connectionCallback(const Gap::ConnectionCallbackParams_t *params) 00053 { 00054 LOG("Connected!\n"); 00055 bleIsConnected = true; 00056 } 00057 00058 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *cbParams) 00059 { 00060 LOG("Disconnected!\n"); 00061 LOG("Restarting the advertising process\n"); 00062 ble.startAdvertising(); 00063 bleIsConnected = false; 00064 } 00065 00066 void tick(void) 00067 { 00068 static uint32_t count = 0; 00069 00070 LOG("%d\r\n", count++); 00071 green = !green; 00072 } 00073 void detect(void) 00074 { 00075 static uint32_t count = 0; 00076 00077 LOG("%d\r\n", count++); 00078 blue = !blue; 00079 } 00080 void flush_uart_ble(){ 00081 //envia un \n para forzar el envio del buffer y vaciarlo, en hex 0x0a 00082 char end='\n'; 00083 uartServicePtr->write(&end,1); 00084 } 00085 00086 void onDataWrittenCallback(const GattWriteCallbackParams *params) {//ocurre cuando llega un dato por bluetooth 00087 if (params->handle == uartServicePtr->getTXCharacteristicHandle()) { 00088 00089 for (int16_t x=0;x<params->len;x++) 00090 pc.printf("%02X ", params->data[x]); 00091 uartServicePtr->write(params->data,params->len); 00092 flush_uart_ble(); 00093 //uartServicePtr->flush(); 00094 00095 } 00096 } 00097 00098 00099 int main(void) 00100 { 00101 blue = 1; 00102 green = 1; 00103 red = 1; 00104 00105 pc.baud(115200); 00106 00107 wait(1); 00108 00109 LOG("---- Seeed Tiny BLE ----\n"); 00110 00111 00112 Ticker ticker; 00113 ticker.attach(tick, 3); 00114 00115 button.fall(detect); 00116 00117 LOG("Initialising the nRF51822\n"); 00118 ble.init(); 00119 ble.gap().onDisconnection(disconnectionCallback); 00120 ble.gap().onConnection(connectionCallback); 00121 ble.onDataWritten(onDataWrittenCallback); 00122 00123 00124 /* setup advertising */ 00125 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); 00126 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 00127 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, 00128 (const uint8_t *)"smurfs", sizeof("smurfs")); 00129 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, 00130 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); 00131 00132 UARTService uartService(ble); 00133 uartServicePtr = &uartService; 00134 //uartService.retargetStdout(); 00135 00136 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ 00137 ble.gap().startAdvertising(); 00138 00139 while (true) { 00140 //hacer algo 00141 ble.waitForEvent(); 00142 } 00143 } 00144 00145 00146 00147 00148
Generated on Sun Jul 24 2022 04:16:16 by 1.7.2