this is ble keypad for nrf52832,ble nano.with ble uart code
Fork of mbed-os-example-ble-BatteryLevel by
source/main.cpp
- Committer:
- linuxsonu
- Date:
- 2018-06-25
- Revision:
- 63:a767379af092
- Parent:
- 46:6b66d08f304e
File content as of revision 63:a767379af092:
#include <events/mbed_events.h> #include <mbed.h> #include "ble/BLE.h" #include "keypad.h" #include "ble/Gap.h" #include "ble/services/UARTService.h" #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console; * it will have an impact on code-size and power consumption. */ #if NEED_CONSOLE_OUTPUT #define DEBUG(STR) { if (uartServicePtr) uartServicePtr->write(STR, strlen(STR)); } #else #define DEBUG(...) /* nothing */ #endif /* #if NEED_CONSOLE_OUTPUT */ Timer timerset; const static char DEVICE_NAME[] = "KeyPad"; static UARTService* uartServicePtr; Thread keyThread; int mainData=0; Serial pc(USBTX, USBRX); char pre; static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE); void keyThreadFun(){ Keypad keypad(p19,p18,p17,p16,p25,p24,p23,p20); keypad.enablePullUp(); char key; bool done=false; int data=0; pc.printf("Please touch a key on the keypad\n\r"); while (1) { key = keypad.getKey(); if(key != KEY_RELEASED) { if(key!='*' && key!='#' && key!='(' && key!=')' && key!=']' && key!='@'){ if(!done){ timerset.start(); data=data*10 + (key-'0'); } } if(key==']'){ timerset.stop(); done=true; } pc.printf("%c\r\n",key); wait(0.6); } if(timerset.read()>=60){ mainData=data; data=0; } } } void updateVal(char v){ char data[4]; sprintf(data, "%c",v); uartServicePtr->writeString(data); uartServicePtr->writeString("\n"); } void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { BLE::Instance().gap().startAdvertising(); } /*void dataReadCallback( const GattReadCallbackParams *params ) { DEBUG("Receive\r\n"); }*/ void onDataWrittenCallback(const GattWriteCallbackParams *params) { if ((uartServicePtr != NULL)) { pre = *(params->data); } } void onBleInitError(BLE &ble, ble_error_t error) { (void)ble; (void)error; } void periodicCallback(void) { updateVal('time'); updateVal(pre); updateVal(mainData); } void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE& ble = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { onBleInitError(ble, error); return; } if (ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { return; } ble.gap().onDisconnection(disconnectionCallback); ble.gattServer().onDataWritten(onDataWrittenCallback); /* Setup primary service. */ uartServicePtr = new UARTService(ble); /* Setup advertising. */ ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS, (uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed)); ble.gap().setAdvertisingInterval(100); /* 100ms */ ble.gap().startAdvertising(); } void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { BLE &ble = BLE::Instance(); eventQueue.call(Callback<void()>(&ble, &BLE::processEvents)); } int main() { Ticker ticker; ticker.attach(periodicCallback,900); BLE &ble = BLE::Instance(); ble.onEventsToProcess(scheduleBleEventsProcessing); ble.init(bleInitComplete); keyThread.start(keyThreadFun); eventQueue.dispatch_forever(); return 0; }