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.
Fork of BLE_RCBController2_Motor by
main.cpp
00001 /* 00002 * December 31st, 2015 Modified by Kenji Arai 00003 * January 19th, 2016 00004 * October 12th, 2017 !! Run on Mbed-os5 00005 * http://www.page.sannet.ne.jp/kenjia/index.html 00006 * http://mbed.org/users/kenjiArai/ 00007 * -> Works well with latest Rev. 00008 * 00009 * Original: 00010 * BLE_RCBController2_Motor 00011 * https://developer.mbed.org/users/robo8080/code/BLE_RCBController2_Motor/ 00012 * Tested Controller Device: 00013 * iPhone6 RCBController (Ver1.4.0) 00014 * https://itunes.apple.com/jp/app/rcbcontroller/id689724127?mt=8 00015 */ 00016 00017 // Include --------------------------------------------------------------------------------------- 00018 #include "mbed.h" 00019 #include "ble/BLE.h" 00020 #include "RCBController.h" 00021 #include "Servo.h" 00022 00023 // Definition ------------------------------------------------------------------------------------ 00024 #define NEED_CONSOLE_OUTPUT 1 // Set this if you need debug messages on the console 00025 00026 #if NEED_CONSOLE_OUTPUT 00027 #define DEBUG(...) { printf(__VA_ARGS__); } 00028 #else 00029 #define DEBUG(...) 00030 #endif 00031 00032 #define LED_A_PIN P0_21 00033 #define LED_B_PIN P0_22 00034 #define LED_X_PIN P0_23 00035 #define LED_Y_PIN P0_24 00036 #define SERVO_0_PIN P0_18 00037 #define SERVO_1_PIN P0_16 00038 00039 // Object ---------------------------------------------------------------------------------------- 00040 BLE ble; 00041 Servo SERVO_0(SERVO_0_PIN); 00042 Servo SERVO_1(SERVO_1_PIN); 00043 DigitalOut LED_A(LED_A_PIN); 00044 DigitalOut LED_B(LED_B_PIN); 00045 DigitalOut LED_X(LED_X_PIN); 00046 DigitalOut LED_Y(LED_Y_PIN); 00047 00048 // RAM ------------------------------------------------------------------------------------------- 00049 uint8_t RCBControllerPayload[10] = {0,}; 00050 RCBController controller; 00051 00052 // ROM / Constant data --------------------------------------------------------------------------- 00053 // RCBController Service 00054 static const uint16_t RCBController_service_uuid = 0xFFF0; 00055 static const uint16_t RCBController_Characteristic_uuid = 0xFFF1; 00056 const char *deviceName = "mbedBLE"; 00057 00058 // Function prototypes --------------------------------------------------------------------------- 00059 GattCharacteristic ControllerChar (RCBController_Characteristic_uuid,RCBControllerPayload,10, 10, 00060 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | 00061 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); 00062 GattCharacteristic *ControllerChars[] = {&ControllerChar}; 00063 GattService RCBControllerService(RCBController_service_uuid, ControllerChars, 00064 sizeof(ControllerChars) / sizeof(GattCharacteristic *)); 00065 00066 //------------------------------------------------------------------------------------------------- 00067 // Control Program 00068 //------------------------------------------------------------------------------------------------- 00069 void data_analysis(void){ 00070 static uint8_t cont_flg_A = 0; 00071 static uint8_t cont_flg_B = 0; 00072 static uint8_t cont_flg_X = 0; 00073 static uint8_t cont_flg_Y = 0; 00074 float value; 00075 00076 if (controller.status.A == 1){ 00077 if (cont_flg_A == 0){ 00078 LED_A = !LED_A; 00079 cont_flg_A = 1; 00080 } 00081 } else { 00082 cont_flg_A = 0; 00083 } 00084 if (controller.status.B == 1){ 00085 if (cont_flg_B == 0){ 00086 LED_B = !LED_B; 00087 cont_flg_B = 1; 00088 } 00089 } else { 00090 cont_flg_B = 0; 00091 } 00092 if (controller.status.X == 1){ 00093 if (cont_flg_X == 0){ 00094 LED_X = !LED_X; 00095 cont_flg_X = 1; 00096 } 00097 } else { 00098 cont_flg_X = 0; 00099 } 00100 if (controller.status.Y == 1){ 00101 if (cont_flg_Y == 0){ 00102 LED_Y = !LED_Y; 00103 cont_flg_Y = 1; 00104 } 00105 } else { 00106 cont_flg_Y = 0; 00107 } 00108 value = (float)controller.status.LeftAnalogUD/255 * 150.0f + 20; 00109 SERVO_0.write(value); 00110 value = (float)controller.status.LeftAnalogLR/255 * 150.0f + 20; 00111 SERVO_1.write(value); 00112 } 00113 00114 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){ 00115 DEBUG("Disconnected!\r\n"); 00116 DEBUG("Restarting the advertising process\r\n"); 00117 ble.startAdvertising(); 00118 } 00119 00120 void onDataWritten(const GattWriteCallbackParams *params){ 00121 if (params->handle == ControllerChar.getValueAttribute().getHandle()) { 00122 uint16_t bytesRead; 00123 ble.readCharacteristicValue(ControllerChar.getValueAttribute().getHandle(), 00124 RCBControllerPayload, &bytesRead); 00125 memcpy( &controller.data[0], RCBControllerPayload, sizeof(controller)); 00126 DEBUG("DATA:0x%02x 0x%02x %d %d %d %d %d %d %d 0x%02x\r\n", 00127 controller.data[0],controller.data[1],controller.data[2],controller.data[3], 00128 controller.data[4],controller.data[5],controller.data[6],controller.data[7], 00129 controller.data[8],controller.data[9]); 00130 data_analysis(); 00131 } 00132 } 00133 00134 int main(void){ 00135 DEBUG("\r\nInitialising the nRF51822\r\n"); 00136 ble.init(); 00137 ble.setDeviceName((const uint8_t *)deviceName); 00138 ble.onDisconnection(disconnectionCallback); 00139 ble.onDataWritten(onDataWritten); 00140 DEBUG("Start RCB Controller\r\n"); 00141 /* setup advertising */ 00142 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); 00143 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 00144 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, 00145 (const uint8_t *)deviceName, strlen(deviceName)); 00146 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, 00147 (const uint8_t *)RCBController_service_uuid, 00148 sizeof(RCBController_service_uuid)); 00149 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ 00150 ble.startAdvertising(); 00151 ble.addService(RCBControllerService); 00152 while (true) { 00153 ble.waitForEvent(); 00154 } 00155 }
Generated on Tue Jul 12 2022 21:17:33 by
1.7.2
