![](/media/cache/profiles/8c458fc1ed9bb89c1cd16889cb7e7e68.jpg.50x50_q85.png)
iOSのBLEコントローラアプリ「RCBController」とmbed HRM1017を接続し、RCサーボモータを操作するテストプログラムです。
Dependencies: BLE_API Servo mbed nRF51822
Fork of BLE_RCBController2 by
main.cpp
00001 #include "mbed.h" 00002 #include "BLEDevice.h" 00003 #include "RCBController.h" 00004 #include "Servo.h" 00005 00006 #define DBG 0 00007 00008 BLEDevice ble; 00009 Serial pc(USBTX, USBRX); 00010 /* LEDs for indication: */ 00011 DigitalOut ConnectStateLed(LED1); 00012 PwmOut ControllerStateLed(LED2); 00013 00014 Servo servo1(P0_28), servo2(P0_29); 00015 00016 /* RCBController Service */ 00017 static const uint16_t RCBController_service_uuid = 0xFFF0; 00018 static const uint16_t RCBController_Characteristic_uuid = 0xFFF1; 00019 uint8_t RCBControllerPayload[10] = {0,}; 00020 00021 GattCharacteristic ControllerChar (RCBController_Characteristic_uuid,RCBControllerPayload,10, 10, 00022 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | 00023 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); 00024 GattCharacteristic *ControllerChars[] = {&ControllerChar}; 00025 GattService RCBControllerService(RCBController_service_uuid, ControllerChars, sizeof(ControllerChars) / sizeof(GattCharacteristic *)); 00026 00027 RCBController controller; 00028 00029 void onConnected(Gap::Handle_t handle, const Gap::ConnectionParams_t *params) 00030 { 00031 ConnectStateLed = 0; 00032 #if DBG 00033 pc.printf("Connected\n\r"); 00034 #endif 00035 } 00036 00037 void onDisconnected(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) 00038 { 00039 ble.startAdvertising(); 00040 ConnectStateLed = 1; 00041 #if DBG 00042 pc.printf("Disconnected\n\r"); 00043 #endif 00044 } 00045 00046 00047 // GattEvent 00048 void onDataWritten(uint16_t charHandle, const GattCharacteristicWriteCBParams *params) 00049 { 00050 if (charHandle == ControllerChar.getValueAttribute().getHandle()) { 00051 uint16_t bytesRead; 00052 ble.readCharacteristicValue(ControllerChar.getValueAttribute().getHandle(),RCBControllerPayload, &bytesRead); 00053 memcpy( &controller.data[0], RCBControllerPayload, sizeof(controller)); 00054 #if DBG 00055 00056 pc.printf("DATA:%02X %02X %d %d %d %d %d %d %d %02X\n\r",controller.data[0],controller.data[1],controller.data[2],controller.data[3],controller.data[4], 00057 controller.data[5],controller.data[6],controller.data[7],controller.data[8],controller.data[9]); 00058 #endif 00059 ControllerStateLed = (float)controller.status.LeftAnalogLR / 255.0; 00060 servo1 = (float)controller.status.LeftAnalogUD / 255.0; 00061 servo2 = (float)controller.status.LeftAnalogLR / 255.0; 00062 } 00063 00064 } 00065 00066 /**************************************************************************/ 00067 /*! 00068 @brief Program entry point 00069 */ 00070 /**************************************************************************/ 00071 int main(void) 00072 { 00073 #if DBG 00074 pc.printf("Start\n\r"); 00075 #endif 00076 ConnectStateLed = 1; 00077 servo1.calibrate(0.001,180.0); 00078 servo2.calibrate(0.001,180.0); 00079 servo1 = 0.5; 00080 servo2 = 0.5; 00081 00082 ble.init(); 00083 ble.onConnection(onConnected); 00084 ble.onDisconnection(onDisconnected); 00085 ble.onDataWritten(onDataWritten); 00086 00087 /* setup advertising */ 00088 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); 00089 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 00090 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, 00091 (const uint8_t *)"mbed HRM1017", sizeof("mbed HRM1017") - 1); 00092 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, 00093 (const uint8_t *)RCBController_service_uuid, sizeof(RCBController_service_uuid)); 00094 00095 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ 00096 ble.startAdvertising(); 00097 00098 ble.addService(RCBControllerService); 00099 00100 while (true) { 00101 ble.waitForEvent(); 00102 } 00103 } 00104
Generated on Sat Jul 16 2022 21:18:08 by
![doxygen](doxygen.png)