試作テストバージョン

Dependencies:   BLE_API TB6612FNG mbed

Fork of BLE_RCBController2 by Junichi Katsu

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "BLEDevice.h"
00003 #include "RCBController.h"
00004 #include "TB6612.h"
00005 
00006 #define DBG 1
00007 
00008 BLEDevice  ble;
00009 Serial  pc(USBTX, USBRX);
00010 /* LEDs for indication: */
00011 DigitalOut  ConnectStateLed(P0_18);
00012 DigitalOut  outlow(P0_20);
00013 //PwmOut  ControllerStateLed(LED2);
00014 
00015 TB6612 left(P0_29,P0_24,P0_23);
00016 TB6612 right(P0_28,P0_30,P0_0);
00017 
00018 /* RCBController Service */
00019 static const uint16_t RCBController_service_uuid = 0xFFF0;
00020 static const uint16_t RCBController_Characteristic_uuid = 0xFFF1;
00021 uint8_t RCBControllerPayload[10] = {0,};
00022 
00023 GattCharacteristic  ControllerChar (RCBController_Characteristic_uuid,RCBControllerPayload,10, 10,
00024                                 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | 
00025                                 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
00026 GattCharacteristic *ControllerChars[] = {&ControllerChar};
00027 GattService         RCBControllerService(RCBController_service_uuid, ControllerChars, sizeof(ControllerChars) / sizeof(GattCharacteristic *));
00028 
00029 RCBController controller;
00030 
00031 void onConnected(uint16_t h)
00032 {
00033     ConnectStateLed = 0;
00034 #if DBG
00035     pc.printf("Connected\n\r");
00036 #endif
00037 }
00038 
00039 void onDisconnected(uint16_t h)
00040 {
00041     ble.startAdvertising();
00042     ConnectStateLed = 1;
00043 #if DBG
00044     pc.printf("Disconnected\n\r");
00045 #endif
00046 }
00047 
00048 
00049 // GattEvent
00050 void onDataWritten(uint16_t charHandle)
00051 {
00052     if (charHandle == ControllerChar.getHandle()) {
00053         uint16_t bytesRead;
00054         ble.readCharacteristicValue(ControllerChar.getHandle(),RCBControllerPayload, &bytesRead);
00055         memcpy( &controller.data[0], RCBControllerPayload, sizeof(controller));
00056 #if DBG
00057 
00058         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],
00059                                                                controller.data[5],controller.data[6],controller.data[7],controller.data[8],controller.data[9]);
00060 #endif
00061             left = ((float)((int)controller.status.LeftAnalogUD -128) / 128.0);
00062             right = ((float)((int)controller.status.RightAnalogUD -128) / 128.0);
00063         //ControllerStateLed = (float)controller.status.LeftAnalogLR / 255.0;       
00064     }
00065          
00066 }
00067 
00068 /**************************************************************************/
00069 /*!
00070     @brief  Program entry point
00071 */
00072 /**************************************************************************/
00073 int main(void)
00074 {
00075     pc.baud(921600);
00076     
00077     
00078     ConnectStateLed = 1;
00079 #if DBG
00080         pc.printf("Start\n\r");
00081 #endif
00082     outlow = 0;
00083     
00084     ble.init(); 
00085     ble.onConnection(onConnected);
00086     ble.onDisconnection(onDisconnected);
00087     ble.onDataWritten(onDataWritten);
00088     
00089     /* setup advertising */
00090     ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
00091     ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
00092     ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
00093                                     (const uint8_t *)"mbed WallbotBLE", sizeof("mbed WallbotBLE") - 1);
00094     ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
00095                                     (const uint8_t *)RCBController_service_uuid, sizeof(RCBController_service_uuid));
00096 
00097     ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
00098     ble.startAdvertising();
00099 
00100     ble.addService(RCBControllerService);
00101     
00102 
00103     while (true) {
00104         ble.waitForEvent();
00105     }
00106 }
00107