![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ble controlled magician robot
Dependencies: BLE_nRF8001 Motordriver mbed
main.cpp@0:1be634fcf3e8, 2015-04-16 (annotated)
- Committer:
- K_J
- Date:
- Thu Apr 16 21:07:54 2015 +0000
- Revision:
- 0:1be634fcf3e8
upload
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
K_J | 0:1be634fcf3e8 | 1 | #include "mbed.h" |
K_J | 0:1be634fcf3e8 | 2 | #include "BLEPeripheral.h" |
K_J | 0:1be634fcf3e8 | 3 | #include "motordriver.h" |
K_J | 0:1be634fcf3e8 | 4 | #include "stdint.h" |
K_J | 0:1be634fcf3e8 | 5 | |
K_J | 0:1be634fcf3e8 | 6 | //******************************* |
K_J | 0:1be634fcf3e8 | 7 | // Must define Serial serial and SPI spi |
K_J | 0:1be634fcf3e8 | 8 | // BLE_RDY and BLE_REQ |
K_J | 0:1be634fcf3e8 | 9 | //******************************* |
K_J | 0:1be634fcf3e8 | 10 | |
K_J | 0:1be634fcf3e8 | 11 | Serial serial(USBTX, USBRX); |
K_J | 0:1be634fcf3e8 | 12 | // The SPI construct, REQN and RDYN IO construct should be modified manually |
K_J | 0:1be634fcf3e8 | 13 | // It depend on the board you are using and the REQN&RDYN configuration on BLE Shield |
K_J | 0:1be634fcf3e8 | 14 | SPI spi(p5, p6, p7); |
K_J | 0:1be634fcf3e8 | 15 | DigitalInOut BLE_RDY(p8); |
K_J | 0:1be634fcf3e8 | 16 | DigitalInOut BLE_REQ(p9); |
K_J | 0:1be634fcf3e8 | 17 | DigitalInOut BLE_RST(p10); |
K_J | 0:1be634fcf3e8 | 18 | |
K_J | 0:1be634fcf3e8 | 19 | //Motor Pins |
K_J | 0:1be634fcf3e8 | 20 | Motor left(p21, p22, p23, 1); //pwm fwd ref has brake feature |
K_J | 0:1be634fcf3e8 | 21 | Motor right(p26,p25,p24, 1); |
K_J | 0:1be634fcf3e8 | 22 | |
K_J | 0:1be634fcf3e8 | 23 | //maybe ir sensors |
K_J | 0:1be634fcf3e8 | 24 | |
K_J | 0:1be634fcf3e8 | 25 | /*----- BLE Utility -------------------------------------------------------------------------*/ |
K_J | 0:1be634fcf3e8 | 26 | // create peripheral instance, see pinouts above |
K_J | 0:1be634fcf3e8 | 27 | BLEPeripheral blePeripheral = BLEPeripheral(&BLE_REQ, &BLE_RDY, &BLE_RST); |
K_J | 0:1be634fcf3e8 | 28 | |
K_J | 0:1be634fcf3e8 | 29 | // create service |
K_J | 0:1be634fcf3e8 | 30 | BLEService uartService = BLEService("713d0000503e4c75ba943148f18d941e"); |
K_J | 0:1be634fcf3e8 | 31 | |
K_J | 0:1be634fcf3e8 | 32 | // create characteristic |
K_J | 0:1be634fcf3e8 | 33 | BLECharacteristic txCharacteristic = BLECharacteristic("713d0002503e4c75ba943148f18d941e", BLENotify, 20); |
K_J | 0:1be634fcf3e8 | 34 | BLECharacteristic rxCharacteristic = BLECharacteristic("713d0003503e4c75ba943148f18d941e", BLEWriteWithoutResponse, 20); |
K_J | 0:1be634fcf3e8 | 35 | /*--------------------------------------------------------------------------------------------*/ |
K_J | 0:1be634fcf3e8 | 36 | |
K_J | 0:1be634fcf3e8 | 37 | |
K_J | 0:1be634fcf3e8 | 38 | unsigned char buf[16] = {0}; |
K_J | 0:1be634fcf3e8 | 39 | unsigned char len = 0; |
K_J | 0:1be634fcf3e8 | 40 | |
K_J | 0:1be634fcf3e8 | 41 | |
K_J | 0:1be634fcf3e8 | 42 | int main() |
K_J | 0:1be634fcf3e8 | 43 | { |
K_J | 0:1be634fcf3e8 | 44 | |
K_J | 0:1be634fcf3e8 | 45 | serial.baud(9600); |
K_J | 0:1be634fcf3e8 | 46 | serial.printf("Serial begin!\r\n"); |
K_J | 0:1be634fcf3e8 | 47 | |
K_J | 0:1be634fcf3e8 | 48 | /*----- BLE Utility ---------------------------------------------*/ |
K_J | 0:1be634fcf3e8 | 49 | // set advertised local name and service UUID |
K_J | 0:1be634fcf3e8 | 50 | blePeripheral.setLocalName("BLE Shield"); |
K_J | 0:1be634fcf3e8 | 51 | |
K_J | 0:1be634fcf3e8 | 52 | blePeripheral.setAdvertisedServiceUuid(uartService.uuid()); |
K_J | 0:1be634fcf3e8 | 53 | |
K_J | 0:1be634fcf3e8 | 54 | // add service and characteristic |
K_J | 0:1be634fcf3e8 | 55 | blePeripheral.addAttribute(uartService); |
K_J | 0:1be634fcf3e8 | 56 | blePeripheral.addAttribute(rxCharacteristic); |
K_J | 0:1be634fcf3e8 | 57 | blePeripheral.addAttribute(txCharacteristic); |
K_J | 0:1be634fcf3e8 | 58 | |
K_J | 0:1be634fcf3e8 | 59 | // begin initialization |
K_J | 0:1be634fcf3e8 | 60 | blePeripheral.begin(); |
K_J | 0:1be634fcf3e8 | 61 | /*---------------------------------------------------------------*/ |
K_J | 0:1be634fcf3e8 | 62 | serial.printf("BLE UART Peripheral begin!\r\n"); |
K_J | 0:1be634fcf3e8 | 63 | |
K_J | 0:1be634fcf3e8 | 64 | while(1) |
K_J | 0:1be634fcf3e8 | 65 | { |
K_J | 0:1be634fcf3e8 | 66 | BLECentral central = blePeripheral.central(); |
K_J | 0:1be634fcf3e8 | 67 | |
K_J | 0:1be634fcf3e8 | 68 | if (central) |
K_J | 0:1be634fcf3e8 | 69 | { |
K_J | 0:1be634fcf3e8 | 70 | // central connected to peripheral |
K_J | 0:1be634fcf3e8 | 71 | serial.printf("Connected to central\r\n"); |
K_J | 0:1be634fcf3e8 | 72 | |
K_J | 0:1be634fcf3e8 | 73 | int count = 0; |
K_J | 0:1be634fcf3e8 | 74 | float leftval = 0; |
K_J | 0:1be634fcf3e8 | 75 | float rightval = 0; |
K_J | 0:1be634fcf3e8 | 76 | while (central.connected()) |
K_J | 0:1be634fcf3e8 | 77 | { |
K_J | 0:1be634fcf3e8 | 78 | // central still connected to peripheral |
K_J | 0:1be634fcf3e8 | 79 | if (rxCharacteristic.written()) |
K_J | 0:1be634fcf3e8 | 80 | { |
K_J | 0:1be634fcf3e8 | 81 | count = 0; |
K_J | 0:1be634fcf3e8 | 82 | unsigned char len = rxCharacteristic.valueLength(); |
K_J | 0:1be634fcf3e8 | 83 | const unsigned char *val = rxCharacteristic.value(); |
K_J | 0:1be634fcf3e8 | 84 | |
K_J | 0:1be634fcf3e8 | 85 | //1 = north, 2 = south, 3 = east, 4 = west |
K_J | 0:1be634fcf3e8 | 86 | leftval = sqrt(pow((float)val[0]/255,2) + pow((float)val[2]/255,2)) - sqrt(pow((float)val[1]/255,2) + pow((float)val[3]/255,2)); |
K_J | 0:1be634fcf3e8 | 87 | rightval = sqrt(pow((float)val[0]/255,2) + pow((float)val[3]/255,2)) - sqrt(pow((float)val[1]/255,2) + pow((float)val[2]/255,2)); |
K_J | 0:1be634fcf3e8 | 88 | |
K_J | 0:1be634fcf3e8 | 89 | if (leftval > 1) leftval = 1; |
K_J | 0:1be634fcf3e8 | 90 | if (leftval < -1) leftval = -1; |
K_J | 0:1be634fcf3e8 | 91 | if (rightval > 1) rightval = 1; |
K_J | 0:1be634fcf3e8 | 92 | if (rightval < -1) rightval = -1; |
K_J | 0:1be634fcf3e8 | 93 | |
K_J | 0:1be634fcf3e8 | 94 | left.speed(leftval); |
K_J | 0:1be634fcf3e8 | 95 | right.speed(rightval); |
K_J | 0:1be634fcf3e8 | 96 | |
K_J | 0:1be634fcf3e8 | 97 | serial.printf("%f, %f\n", leftval, rightval); |
K_J | 0:1be634fcf3e8 | 98 | } |
K_J | 0:1be634fcf3e8 | 99 | } |
K_J | 0:1be634fcf3e8 | 100 | // central disconnected |
K_J | 0:1be634fcf3e8 | 101 | serial.printf("Disconnected from central\r\n"); |
K_J | 0:1be634fcf3e8 | 102 | } |
K_J | 0:1be634fcf3e8 | 103 | } |
K_J | 0:1be634fcf3e8 | 104 | } |