iOSのBLEコントローラアプリ「RCBController」とmbed HRM1017を接続し、RCサーボモータを操作するテストプログラムです。

Dependencies:   BLE_API Servo mbed nRF51822

Fork of BLE_RCBController2 by Junichi Katsu

• ライブラリ類はUpdateしないでください。コンパイルエラーになります。

うまく接続できない時は、iPhone/iPadのBluetoothをOFF->ONしてキャッシュをクリアしてみてください。

/media/uploads/robo8080/img_1560.jpg

Committer:
robo8080
Date:
Fri Sep 19 04:04:05 2014 +0000
Revision:
5:d6d898857b2a
Parent:
2:dd85fdc18224
test1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:8c643bfe55b7 1 #include "mbed.h"
jksoft 1:48f6e08a3ac2 2 #include "BLEDevice.h"
jksoft 0:8c643bfe55b7 3 #include "RCBController.h"
robo8080 5:d6d898857b2a 4 #include "Servo.h"
jksoft 0:8c643bfe55b7 5
robo8080 5:d6d898857b2a 6 #define DBG 0
jksoft 0:8c643bfe55b7 7
jksoft 1:48f6e08a3ac2 8 BLEDevice ble;
jksoft 0:8c643bfe55b7 9 Serial pc(USBTX, USBRX);
jksoft 0:8c643bfe55b7 10 /* LEDs for indication: */
jksoft 0:8c643bfe55b7 11 DigitalOut ConnectStateLed(LED1);
jksoft 0:8c643bfe55b7 12 PwmOut ControllerStateLed(LED2);
jksoft 0:8c643bfe55b7 13
robo8080 5:d6d898857b2a 14 Servo servo1(P0_28), servo2(P0_29);
jksoft 0:8c643bfe55b7 15
jksoft 0:8c643bfe55b7 16 /* RCBController Service */
jksoft 0:8c643bfe55b7 17 static const uint16_t RCBController_service_uuid = 0xFFF0;
jksoft 0:8c643bfe55b7 18 static const uint16_t RCBController_Characteristic_uuid = 0xFFF1;
jksoft 1:48f6e08a3ac2 19 uint8_t RCBControllerPayload[10] = {0,};
jksoft 1:48f6e08a3ac2 20
jksoft 1:48f6e08a3ac2 21 GattCharacteristic ControllerChar (RCBController_Characteristic_uuid,RCBControllerPayload,10, 10,
jksoft 0:8c643bfe55b7 22 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
jksoft 0:8c643bfe55b7 23 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
jksoft 1:48f6e08a3ac2 24 GattCharacteristic *ControllerChars[] = {&ControllerChar};
jksoft 1:48f6e08a3ac2 25 GattService RCBControllerService(RCBController_service_uuid, ControllerChars, sizeof(ControllerChars) / sizeof(GattCharacteristic *));
jksoft 0:8c643bfe55b7 26
jksoft 0:8c643bfe55b7 27 RCBController controller;
jksoft 0:8c643bfe55b7 28
robo8080 5:d6d898857b2a 29 void onConnected(Gap::Handle_t handle, const Gap::ConnectionParams_t *params)
jksoft 0:8c643bfe55b7 30 {
jksoft 1:48f6e08a3ac2 31 ConnectStateLed = 0;
jksoft 0:8c643bfe55b7 32 #if DBG
jksoft 1:48f6e08a3ac2 33 pc.printf("Connected\n\r");
jksoft 0:8c643bfe55b7 34 #endif
jksoft 1:48f6e08a3ac2 35 }
jksoft 0:8c643bfe55b7 36
robo8080 5:d6d898857b2a 37 void onDisconnected(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
jksoft 1:48f6e08a3ac2 38 {
jksoft 1:48f6e08a3ac2 39 ble.startAdvertising();
jksoft 1:48f6e08a3ac2 40 ConnectStateLed = 1;
jksoft 0:8c643bfe55b7 41 #if DBG
jksoft 1:48f6e08a3ac2 42 pc.printf("Disconnected\n\r");
jksoft 0:8c643bfe55b7 43 #endif
jksoft 1:48f6e08a3ac2 44 }
jksoft 1:48f6e08a3ac2 45
jksoft 0:8c643bfe55b7 46
jksoft 0:8c643bfe55b7 47 // GattEvent
robo8080 5:d6d898857b2a 48 void onDataWritten(uint16_t charHandle, const GattCharacteristicWriteCBParams *params)
jksoft 0:8c643bfe55b7 49 {
robo8080 5:d6d898857b2a 50 if (charHandle == ControllerChar.getValueAttribute().getHandle()) {
jksoft 1:48f6e08a3ac2 51 uint16_t bytesRead;
robo8080 5:d6d898857b2a 52 ble.readCharacteristicValue(ControllerChar.getValueAttribute().getHandle(),RCBControllerPayload, &bytesRead);
jksoft 1:48f6e08a3ac2 53 memcpy( &controller.data[0], RCBControllerPayload, sizeof(controller));
jksoft 0:8c643bfe55b7 54 #if DBG
jksoft 1:48f6e08a3ac2 55
jksoft 1:48f6e08a3ac2 56 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],
jksoft 0:8c643bfe55b7 57 controller.data[5],controller.data[6],controller.data[7],controller.data[8],controller.data[9]);
jksoft 0:8c643bfe55b7 58 #endif
jksoft 1:48f6e08a3ac2 59 ControllerStateLed = (float)controller.status.LeftAnalogLR / 255.0;
robo8080 5:d6d898857b2a 60 servo1 = (float)controller.status.LeftAnalogUD / 255.0;
robo8080 5:d6d898857b2a 61 servo2 = (float)controller.status.LeftAnalogLR / 255.0;
jksoft 1:48f6e08a3ac2 62 }
jksoft 0:8c643bfe55b7 63
jksoft 1:48f6e08a3ac2 64 }
jksoft 0:8c643bfe55b7 65
jksoft 0:8c643bfe55b7 66 /**************************************************************************/
jksoft 0:8c643bfe55b7 67 /*!
jksoft 0:8c643bfe55b7 68 @brief Program entry point
jksoft 0:8c643bfe55b7 69 */
jksoft 0:8c643bfe55b7 70 /**************************************************************************/
jksoft 0:8c643bfe55b7 71 int main(void)
jksoft 0:8c643bfe55b7 72 {
jksoft 0:8c643bfe55b7 73 #if DBG
jksoft 0:8c643bfe55b7 74 pc.printf("Start\n\r");
jksoft 0:8c643bfe55b7 75 #endif
robo8080 5:d6d898857b2a 76 ConnectStateLed = 1;
robo8080 5:d6d898857b2a 77 servo1.calibrate(0.001,180.0);
robo8080 5:d6d898857b2a 78 servo2.calibrate(0.001,180.0);
robo8080 5:d6d898857b2a 79 servo1 = 0.5;
robo8080 5:d6d898857b2a 80 servo2 = 0.5;
jksoft 1:48f6e08a3ac2 81
jksoft 2:dd85fdc18224 82 ble.init();
jksoft 1:48f6e08a3ac2 83 ble.onConnection(onConnected);
jksoft 1:48f6e08a3ac2 84 ble.onDisconnection(onDisconnected);
jksoft 1:48f6e08a3ac2 85 ble.onDataWritten(onDataWritten);
jksoft 1:48f6e08a3ac2 86
jksoft 1:48f6e08a3ac2 87 /* setup advertising */
jksoft 1:48f6e08a3ac2 88 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
jksoft 1:48f6e08a3ac2 89 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
jksoft 1:48f6e08a3ac2 90 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
jksoft 1:48f6e08a3ac2 91 (const uint8_t *)"mbed HRM1017", sizeof("mbed HRM1017") - 1);
jksoft 1:48f6e08a3ac2 92 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
jksoft 1:48f6e08a3ac2 93 (const uint8_t *)RCBController_service_uuid, sizeof(RCBController_service_uuid));
jksoft 0:8c643bfe55b7 94
jksoft 1:48f6e08a3ac2 95 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
jksoft 1:48f6e08a3ac2 96 ble.startAdvertising();
jksoft 0:8c643bfe55b7 97
jksoft 1:48f6e08a3ac2 98 ble.addService(RCBControllerService);
jksoft 0:8c643bfe55b7 99
jksoft 1:48f6e08a3ac2 100 while (true) {
jksoft 1:48f6e08a3ac2 101 ble.waitForEvent();
jksoft 0:8c643bfe55b7 102 }
jksoft 0:8c643bfe55b7 103 }
jksoft 0:8c643bfe55b7 104