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 by
main.cpp@6:1b978b32118c, 2014-09-11 (annotated)
- Committer:
- lipoyang
- Date:
- Thu Sep 11 14:02:31 2014 +0000
- Revision:
- 6:1b978b32118c
- Parent:
- 5:572c91221792
- Child:
- 7:6115339996eb
2nd test version
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| jksoft | 0:8c643bfe55b7 | 1 | #include "mbed.h" |
| jksoft | 1:48f6e08a3ac2 | 2 | #include "BLEDevice.h" |
| jksoft | 0:8c643bfe55b7 | 3 | |
| jksoft | 1:48f6e08a3ac2 | 4 | #define DBG 1 |
| jksoft | 0:8c643bfe55b7 | 5 | |
| lipoyang | 5:572c91221792 | 6 | // BLE device object |
| jksoft | 1:48f6e08a3ac2 | 7 | BLEDevice ble; |
| jksoft | 0:8c643bfe55b7 | 8 | |
| lipoyang | 5:572c91221792 | 9 | // BluePropo service UUID |
| lipoyang | 5:572c91221792 | 10 | //static const uint16_t UUID_BLUEPROPO = 0xFFF0; |
| lipoyang | 5:572c91221792 | 11 | static const uint8_t UUID_BLUEPROPO[] = |
| lipoyang | 5:572c91221792 | 12 | { 0xc4, 0x9d, 0xfd, 0x1b, 0x86, 0x04, 0x41, 0xd2, 0x89, 0x43, 0x13, 0x6f, 0x21, 0x4d, 0xd0, 0xbf }; |
| lipoyang | 5:572c91221792 | 13 | |
| lipoyang | 5:572c91221792 | 14 | // BluePropo::Stick characteristic UUID |
| lipoyang | 5:572c91221792 | 15 | //static const uint16_t UUID_BLUEPROPO_STICK = 0xFFF1; |
| lipoyang | 5:572c91221792 | 16 | static const uint8_t UUID_BLUEPROPO_STICK[] = |
| lipoyang | 5:572c91221792 | 17 | { 0x74, 0x25, 0xfb, 0xa0, 0x72, 0x15, 0x41, 0x36, 0xaa, 0x3f, 0x07, 0x2a, 0xa0, 0x7d, 0x93, 0x54 }; |
| jksoft | 0:8c643bfe55b7 | 18 | |
| lipoyang | 5:572c91221792 | 19 | // BluePropo::Stick data structure |
| lipoyang | 5:572c91221792 | 20 | union StickData |
| lipoyang | 5:572c91221792 | 21 | { |
| lipoyang | 5:572c91221792 | 22 | struct { |
| lipoyang | 5:572c91221792 | 23 | // F(-128)<- 0 ->B(+127) |
| lipoyang | 5:572c91221792 | 24 | signed char fb; |
| lipoyang | 5:572c91221792 | 25 | // L(-128)<- 0 ->R(+127) |
| lipoyang | 5:572c91221792 | 26 | signed char lr; |
| lipoyang | 5:572c91221792 | 27 | }value; |
| lipoyang | 5:572c91221792 | 28 | unsigned char bytes[2]; |
| lipoyang | 5:572c91221792 | 29 | }; |
| lipoyang | 5:572c91221792 | 30 | StickData stickData; |
| jksoft | 1:48f6e08a3ac2 | 31 | |
| lipoyang | 5:572c91221792 | 32 | // buffer for BluePropo payload |
| lipoyang | 5:572c91221792 | 33 | uint8_t payload[10] = {0,}; |
| lipoyang | 5:572c91221792 | 34 | |
| lipoyang | 5:572c91221792 | 35 | // BluePropo::Stick characteristic |
| lipoyang | 5:572c91221792 | 36 | GattCharacteristic charStick (UUID_BLUEPROPO_STICK, payload, 2, 2, |
| jksoft | 0:8c643bfe55b7 | 37 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE | |
| jksoft | 0:8c643bfe55b7 | 38 | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE); |
| lipoyang | 5:572c91221792 | 39 | // BluePropo characteristics set |
| lipoyang | 5:572c91221792 | 40 | GattCharacteristic *chars[] = {&charStick}; |
| lipoyang | 5:572c91221792 | 41 | // BluePropo service |
| lipoyang | 5:572c91221792 | 42 | GattService serviceBluePropo(UUID_BLUEPROPO, chars, sizeof(chars) / sizeof(GattCharacteristic *)); |
| lipoyang | 5:572c91221792 | 43 | |
| lipoyang | 5:572c91221792 | 44 | // USB COM port for Debug |
| lipoyang | 5:572c91221792 | 45 | Serial pc(USBTX, USBRX); |
| lipoyang | 5:572c91221792 | 46 | |
| lipoyang | 5:572c91221792 | 47 | // pin asign |
| lipoyang | 5:572c91221792 | 48 | DigitalOut tb6612_ain1(P0_28); |
| lipoyang | 5:572c91221792 | 49 | DigitalOut tb6612_ain2(P0_29); |
| lipoyang | 6:1b978b32118c | 50 | //PwmOut tb6612_pwma(P0_30); |
| lipoyang | 6:1b978b32118c | 51 | //PwmOut servo_pwm (P0_12); |
| lipoyang | 6:1b978b32118c | 52 | PwmOut servo_pwm (P0_30); |
| jksoft | 0:8c643bfe55b7 | 53 | |
| lipoyang | 5:572c91221792 | 54 | // DC motor driver (TB6612) |
| lipoyang | 5:572c91221792 | 55 | void motor (float speed) |
| lipoyang | 5:572c91221792 | 56 | { |
| lipoyang | 5:572c91221792 | 57 | if (speed > 0) { |
| lipoyang | 5:572c91221792 | 58 | // CW |
| lipoyang | 6:1b978b32118c | 59 | //tb6612_pwma = speed; |
| lipoyang | 5:572c91221792 | 60 | tb6612_ain1 = 1; |
| lipoyang | 5:572c91221792 | 61 | tb6612_ain2 = 0; |
| lipoyang | 5:572c91221792 | 62 | } else |
| lipoyang | 5:572c91221792 | 63 | if (speed < 0) { |
| lipoyang | 5:572c91221792 | 64 | // CCW |
| lipoyang | 6:1b978b32118c | 65 | //tb6612_pwma = - speed; |
| lipoyang | 5:572c91221792 | 66 | tb6612_ain1 = 0; |
| lipoyang | 5:572c91221792 | 67 | tb6612_ain2 = 1; |
| lipoyang | 5:572c91221792 | 68 | } else { |
| lipoyang | 5:572c91221792 | 69 | // stop |
| lipoyang | 6:1b978b32118c | 70 | //tb6612_pwma = 1; |
| lipoyang | 5:572c91221792 | 71 | tb6612_ain1 = 0; |
| lipoyang | 5:572c91221792 | 72 | tb6612_ain2 = 0; |
| lipoyang | 5:572c91221792 | 73 | // // break |
| lipoyang | 5:572c91221792 | 74 | // tb6612_pwma = 1; |
| lipoyang | 5:572c91221792 | 75 | // tb6612_ain1 = 1; |
| lipoyang | 5:572c91221792 | 76 | // tb6612_ain2 = 1; |
| lipoyang | 5:572c91221792 | 77 | } |
| lipoyang | 5:572c91221792 | 78 | } |
| jksoft | 0:8c643bfe55b7 | 79 | |
| lipoyang | 5:572c91221792 | 80 | // RC servo |
| lipoyang | 5:572c91221792 | 81 | void servo (float deg) |
| lipoyang | 5:572c91221792 | 82 | { |
| lipoyang | 5:572c91221792 | 83 | servo_pwm.pulsewidth_us(1500 + (int)(500.0 * deg)); |
| lipoyang | 5:572c91221792 | 84 | } |
| lipoyang | 5:572c91221792 | 85 | |
| lipoyang | 5:572c91221792 | 86 | // BLE onConnection handler |
| jksoft | 1:48f6e08a3ac2 | 87 | void onConnected(uint16_t h) |
| jksoft | 0:8c643bfe55b7 | 88 | { |
| jksoft | 0:8c643bfe55b7 | 89 | #if DBG |
| jksoft | 1:48f6e08a3ac2 | 90 | pc.printf("Connected\n\r"); |
| jksoft | 0:8c643bfe55b7 | 91 | #endif |
| jksoft | 1:48f6e08a3ac2 | 92 | } |
| jksoft | 0:8c643bfe55b7 | 93 | |
| lipoyang | 5:572c91221792 | 94 | // BLE onDisconnection handler |
| jksoft | 1:48f6e08a3ac2 | 95 | void onDisconnected(uint16_t h) |
| jksoft | 1:48f6e08a3ac2 | 96 | { |
| jksoft | 1:48f6e08a3ac2 | 97 | ble.startAdvertising(); |
| jksoft | 0:8c643bfe55b7 | 98 | #if DBG |
| jksoft | 1:48f6e08a3ac2 | 99 | pc.printf("Disconnected\n\r"); |
| jksoft | 0:8c643bfe55b7 | 100 | #endif |
| jksoft | 1:48f6e08a3ac2 | 101 | } |
| jksoft | 1:48f6e08a3ac2 | 102 | |
| lipoyang | 5:572c91221792 | 103 | // BLE onDataWritten handler (Gatt event) |
| jksoft | 1:48f6e08a3ac2 | 104 | void onDataWritten(uint16_t charHandle) |
| jksoft | 0:8c643bfe55b7 | 105 | { |
| lipoyang | 5:572c91221792 | 106 | if (charHandle == charStick.getHandle()) { |
| jksoft | 1:48f6e08a3ac2 | 107 | uint16_t bytesRead; |
| lipoyang | 5:572c91221792 | 108 | ble.readCharacteristicValue(charStick.getHandle(),payload, &bytesRead); |
| lipoyang | 5:572c91221792 | 109 | memcpy( &stickData.bytes[0], payload, sizeof(stickData)); |
| jksoft | 0:8c643bfe55b7 | 110 | #if DBG |
| jksoft | 1:48f6e08a3ac2 | 111 | |
| lipoyang | 5:572c91221792 | 112 | pc.printf("DATA:%02X %02X\n\r",stickData.bytes[0],stickData.bytes[1]); |
| jksoft | 0:8c643bfe55b7 | 113 | #endif |
| lipoyang | 5:572c91221792 | 114 | float m = (float)stickData.value.fb / 128.0; |
| lipoyang | 5:572c91221792 | 115 | motor(m); |
| lipoyang | 5:572c91221792 | 116 | float s = 0.5 + (float)stickData.value.lr /256.0; |
| lipoyang | 5:572c91221792 | 117 | if(s<0) s=0; |
| lipoyang | 6:1b978b32118c | 118 | //servo(s); |
| jksoft | 1:48f6e08a3ac2 | 119 | } |
| jksoft | 0:8c643bfe55b7 | 120 | |
| jksoft | 1:48f6e08a3ac2 | 121 | } |
| jksoft | 0:8c643bfe55b7 | 122 | |
| lipoyang | 5:572c91221792 | 123 | // Program entry point |
| jksoft | 0:8c643bfe55b7 | 124 | int main(void) |
| jksoft | 0:8c643bfe55b7 | 125 | { |
| jksoft | 0:8c643bfe55b7 | 126 | #if DBG |
| jksoft | 0:8c643bfe55b7 | 127 | pc.printf("Start\n\r"); |
| jksoft | 0:8c643bfe55b7 | 128 | #endif |
| lipoyang | 5:572c91221792 | 129 | // initialize servo & motor |
| lipoyang | 5:572c91221792 | 130 | servo_pwm.period_ms(20); |
| lipoyang | 5:572c91221792 | 131 | servo(0.5); |
| lipoyang | 5:572c91221792 | 132 | motor(0); |
| jksoft | 1:48f6e08a3ac2 | 133 | |
| lipoyang | 5:572c91221792 | 134 | // initialize BLE |
| jksoft | 2:dd85fdc18224 | 135 | ble.init(); |
| jksoft | 1:48f6e08a3ac2 | 136 | ble.onConnection(onConnected); |
| jksoft | 1:48f6e08a3ac2 | 137 | ble.onDisconnection(onDisconnected); |
| jksoft | 1:48f6e08a3ac2 | 138 | ble.onDataWritten(onDataWritten); |
| lipoyang | 5:572c91221792 | 139 | // setup advertising |
| jksoft | 1:48f6e08a3ac2 | 140 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED); |
| jksoft | 1:48f6e08a3ac2 | 141 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
| jksoft | 1:48f6e08a3ac2 | 142 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, |
| lipoyang | 5:572c91221792 | 143 | (const uint8_t *)"MiniSteer HRM1017", sizeof("MiniSteer HRM1017") - 1); |
| jksoft | 1:48f6e08a3ac2 | 144 | ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, |
| lipoyang | 5:572c91221792 | 145 | (const uint8_t *)UUID_BLUEPROPO, sizeof(UUID_BLUEPROPO)); |
| jksoft | 1:48f6e08a3ac2 | 146 | ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */ |
| jksoft | 1:48f6e08a3ac2 | 147 | ble.startAdvertising(); |
| lipoyang | 6:1b978b32118c | 148 | ///ble.addService(serviceBluePropo); |
| jksoft | 0:8c643bfe55b7 | 149 | |
| lipoyang | 5:572c91221792 | 150 | // main loop (wait for BLE event) |
| jksoft | 1:48f6e08a3ac2 | 151 | while (true) { |
| lipoyang | 6:1b978b32118c | 152 | //ble.waitForEvent(); |
| jksoft | 0:8c643bfe55b7 | 153 | } |
| jksoft | 0:8c643bfe55b7 | 154 | } |
