【これは旧バージョンです】 AndroidのBLEラジコンプロポアプリ「BLEPropo」と接続し、RCサーボとDCモータを制御するプログラムです。 mbed HRM1017で動作を確認しています。 BLEPropo → https://github.com/lipoyang/BLEPropo

Dependencies:   BLE_API mbed

Fork of BLE_RCBController2 by Junichi Katsu

BLEを使ったAndroid用ラジコンプロポアプリ「BLEPropo」に対応するmbed HRM1017用ファームウェアです。
BLEPropoは、GitHubにて公開中。
https://github.com/lipoyang/BLEPropo
/media/uploads/lipoyang/blepropo_ui.png
ラジコンは、mbed HRM1017とRCサーボやDCモータを組み合わせて作ります。
/media/uploads/lipoyang/ble_wiring.png

Committer:
jksoft
Date:
Thu Jul 10 14:21:52 2014 +0000
Revision:
0:8c643bfe55b7
Child:
1:48f6e08a3ac2
??

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:8c643bfe55b7 1 #include "mbed.h"
jksoft 0:8c643bfe55b7 2 #include "nRF51822n.h"
jksoft 0:8c643bfe55b7 3 #include "RCBController.h"
jksoft 0:8c643bfe55b7 4
jksoft 0:8c643bfe55b7 5 #define DBG 0
jksoft 0:8c643bfe55b7 6
jksoft 0:8c643bfe55b7 7 nRF51822n nrf;
jksoft 0:8c643bfe55b7 8 Serial pc(USBTX, USBRX);
jksoft 0:8c643bfe55b7 9 /* LEDs for indication: */
jksoft 0:8c643bfe55b7 10 DigitalOut ConnectStateLed(LED1);
jksoft 0:8c643bfe55b7 11 PwmOut ControllerStateLed(LED2);
jksoft 0:8c643bfe55b7 12
jksoft 0:8c643bfe55b7 13
jksoft 0:8c643bfe55b7 14 /* RCBController Service */
jksoft 0:8c643bfe55b7 15 static const uint16_t RCBController_service_uuid = 0xFFF0;
jksoft 0:8c643bfe55b7 16 static const uint16_t RCBController_Characteristic_uuid = 0xFFF1;
jksoft 0:8c643bfe55b7 17 GattService RCBControllerService (RCBController_service_uuid);
jksoft 0:8c643bfe55b7 18 GattCharacteristic Controller (RCBController_Characteristic_uuid,10, 10,
jksoft 0:8c643bfe55b7 19 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
jksoft 0:8c643bfe55b7 20 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
jksoft 0:8c643bfe55b7 21
jksoft 0:8c643bfe55b7 22 /* Advertising data and parameters */
jksoft 0:8c643bfe55b7 23 GapAdvertisingData advData;
jksoft 0:8c643bfe55b7 24 GapAdvertisingData scanResponse;
jksoft 0:8c643bfe55b7 25 GapAdvertisingParams advParams ( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED );
jksoft 0:8c643bfe55b7 26
jksoft 0:8c643bfe55b7 27 uint16_t uuid16_list[] = { RCBController_service_uuid };
jksoft 0:8c643bfe55b7 28
jksoft 0:8c643bfe55b7 29 RCBController controller;
jksoft 0:8c643bfe55b7 30
jksoft 0:8c643bfe55b7 31 // GapEvent
jksoft 0:8c643bfe55b7 32 class GapEventHandler : public GapEvents
jksoft 0:8c643bfe55b7 33 {
jksoft 0:8c643bfe55b7 34
jksoft 0:8c643bfe55b7 35 virtual void onConnected(void)
jksoft 0:8c643bfe55b7 36 {
jksoft 0:8c643bfe55b7 37 ConnectStateLed = 0;
jksoft 0:8c643bfe55b7 38 #if DBG
jksoft 0:8c643bfe55b7 39 pc.printf("Connected\n\r");
jksoft 0:8c643bfe55b7 40 #endif
jksoft 0:8c643bfe55b7 41 }
jksoft 0:8c643bfe55b7 42
jksoft 0:8c643bfe55b7 43 virtual void onDisconnected(void)
jksoft 0:8c643bfe55b7 44 {
jksoft 0:8c643bfe55b7 45 nrf.getGap().startAdvertising(advParams);
jksoft 0:8c643bfe55b7 46 ConnectStateLed = 1;
jksoft 0:8c643bfe55b7 47 #if DBG
jksoft 0:8c643bfe55b7 48 pc.printf("Disconnected\n\r");
jksoft 0:8c643bfe55b7 49 #endif
jksoft 0:8c643bfe55b7 50 }
jksoft 0:8c643bfe55b7 51 };
jksoft 0:8c643bfe55b7 52
jksoft 0:8c643bfe55b7 53 // GattEvent
jksoft 0:8c643bfe55b7 54 class GattServerEventHandler : public GattServerEvents
jksoft 0:8c643bfe55b7 55 {
jksoft 0:8c643bfe55b7 56 virtual void onDataWritten(uint16_t charHandle)
jksoft 0:8c643bfe55b7 57 {
jksoft 0:8c643bfe55b7 58 if (charHandle == Controller.handle) {
jksoft 0:8c643bfe55b7 59 nrf.getGattServer().readValue(Controller.handle, &controller.data[0], sizeof(controller));
jksoft 0:8c643bfe55b7 60 #if DBG
jksoft 0:8c643bfe55b7 61 pc.printf("DATA:%d %d %d %d %d %d %d %d %d %d\n\r",controller.data[0],controller.data[1],controller.data[2],controller.data[3],controller.data[4],
jksoft 0:8c643bfe55b7 62 controller.data[5],controller.data[6],controller.data[7],controller.data[8],controller.data[9]);
jksoft 0:8c643bfe55b7 63 #endif
jksoft 0:8c643bfe55b7 64 ControllerStateLed = (float)controller.status.LeftAnalogLR / 255.0;;
jksoft 0:8c643bfe55b7 65
jksoft 0:8c643bfe55b7 66 }
jksoft 0:8c643bfe55b7 67
jksoft 0:8c643bfe55b7 68 }
jksoft 0:8c643bfe55b7 69 };
jksoft 0:8c643bfe55b7 70
jksoft 0:8c643bfe55b7 71 /**************************************************************************/
jksoft 0:8c643bfe55b7 72 /*!
jksoft 0:8c643bfe55b7 73 @brief Program entry point
jksoft 0:8c643bfe55b7 74 */
jksoft 0:8c643bfe55b7 75 /**************************************************************************/
jksoft 0:8c643bfe55b7 76 int main(void)
jksoft 0:8c643bfe55b7 77 {
jksoft 0:8c643bfe55b7 78 #if DBG
jksoft 0:8c643bfe55b7 79 pc.printf("Start\n\r");
jksoft 0:8c643bfe55b7 80 #endif
jksoft 0:8c643bfe55b7 81 /* Setup an event handler for GAP events i.e. Client/Server connection events. */
jksoft 0:8c643bfe55b7 82 nrf.getGap().setEventHandler(new GapEventHandler());
jksoft 0:8c643bfe55b7 83
jksoft 0:8c643bfe55b7 84 /* Initialise the nRF51822 */
jksoft 0:8c643bfe55b7 85 nrf.init();
jksoft 0:8c643bfe55b7 86
jksoft 0:8c643bfe55b7 87 nrf.getGattServer().setEventHandler(new GattServerEventHandler());
jksoft 0:8c643bfe55b7 88
jksoft 0:8c643bfe55b7 89 /* Make sure we get a clean start */
jksoft 0:8c643bfe55b7 90 nrf.reset();
jksoft 0:8c643bfe55b7 91
jksoft 0:8c643bfe55b7 92 /* Add BLE-Only flag and complete service list to the advertising data */
jksoft 0:8c643bfe55b7 93 advData.addFlags(GapAdvertisingData::BREDR_NOT_SUPPORTED);
jksoft 0:8c643bfe55b7 94 advData.addData(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
jksoft 0:8c643bfe55b7 95 (uint8_t*)uuid16_list, sizeof(uuid16_list));
jksoft 0:8c643bfe55b7 96 nrf.getGap().setAdvertisingData(advData, scanResponse);
jksoft 0:8c643bfe55b7 97
jksoft 0:8c643bfe55b7 98 /* RCBController Service */
jksoft 0:8c643bfe55b7 99 RCBControllerService.addCharacteristic(Controller);
jksoft 0:8c643bfe55b7 100 nrf.getGattServer().addService(RCBControllerService);
jksoft 0:8c643bfe55b7 101
jksoft 0:8c643bfe55b7 102 /* Start advertising (make sure you've added all your data first) */
jksoft 0:8c643bfe55b7 103 nrf.getGap().startAdvertising(advParams);
jksoft 0:8c643bfe55b7 104 ConnectStateLed = 1;
jksoft 0:8c643bfe55b7 105 ControllerStateLed = 1;
jksoft 0:8c643bfe55b7 106
jksoft 0:8c643bfe55b7 107 for (;;)
jksoft 0:8c643bfe55b7 108 {
jksoft 0:8c643bfe55b7 109 wait(1);
jksoft 0:8c643bfe55b7 110 }
jksoft 0:8c643bfe55b7 111 }
jksoft 0:8c643bfe55b7 112