Boa-Lin Lai
/
robot
main.cpp
- Committer:
- ece4180fl16
- Date:
- 2016-11-04
- Revision:
- 1:26b2b1545e13
- Parent:
- 0:609a09b59dc5
File content as of revision 1:26b2b1545e13:
/* ECE 4180 GATECH Fall 2016 Boa-Lin Lai, Sameual Choi */ #include "mbed.h" #include "Motor.h" #include "ble.h" #include <stdlib.h> #include <algorithm> DigitalOut myled1(LED1); DigitalOut myled2(LED2); DigitalOut myled3(LED3); DigitalOut myled4(LED4); AnalogIn wallSensor(p19); AnalogIn edgeSensor(p20); PwmOut speaker(p21); Serial pc(USBTX, USBRX); Motor ml(p23, p12, p11); // pwm, fwd, rev Motor mr(p24, p14, p13); // pwm, fwd, rev //Interrupt routine to parse message with one new character per serial RX interrupt volatile bool isOn = false; volatile bool edge = false; volatile bool wall = false; volatile double speed = 0.0; volatile double wallDis = 0.0; volatile double edgeDis = 0.0; Ticker edge_detector; Ticker wall_detector; void edgeMove() { ml.speed(-0.3); mr.speed(-0.3); for (int i=0; i<10; i=i+2) { speaker.period(1.0/969.0); speaker = float(i)/50.0; wait(.25); speaker.period(1.0/800.0); wait(.25); } edge = false; wall = false; speaker = 0; ml.speed(-0.5); mr.speed(0.5); wait(0.5); } void isEdge() { if(edgeDis > 2.5) { speed = 0; edge = true; } else { edge = false; } } void isWall() { if(wallDis > 0.7) { speed = 0; wall = true; } else { wall = false; } } void BLE_action() { if(button_ready && (bnum=='1')) { // button 4 changed if(isOn == true) { speed += 0.1; if(speed > 0.7) speed = 0.7; } myled1 = bhit - '0'; //turn led4 on/off button_ready = 0; //reset flag after reading button message } else if(button_ready && (bnum=='2')) { // button 4 changed if(isOn == true) { speed -= 0.1; if(speed < 0.3 ) speed = 0.3; } myled2 = bhit - '0'; //turn led4 on/off button_ready = 0; //reset flag after reading button message } else if(button_ready && (bnum=='3')) { // button 4 changed speed = 0; isOn = false; myled3 = bhit - '0'; //turn led4 on/off button_ready = 0; //reset flag after reading button message } else if(button_ready && (bnum=='4')) { // button 4 changed isOn = true; speed = 0.3; myled4 = bhit - '0'; //turn led4 on/off button_ready = 0; //reset flag after reading button message } } void print_speed() { pc.printf("%-76s%0.2f\n",speed); } int main() { //attach interrupt function for each new Bluetooth serial character Blue.attach(&parse_message,Serial::RxIrq); edge_detector.attach(&isEdge, 0.02); wall_detector.attach(&isWall , 0.02); while(1) { //check for a new button message ready BLE_action(); //do other tasks in main - interrupts will process button message characters myled4 = 1; wallDis = wallSensor; edgeDis = 1/edgeSensor; wait(0.05); myled4 = 0; wait(0.05); ml.speed(speed); mr.speed(pow(speed,0.2)); if((edge == true) || (wall == true)) { edgeMove(); } //pc.printf("IR sensor reads %2.2f\n ", a); //pc.printf("\rDistance is %2.2f cm \n ", a); //pc.printf("%0.5f\n",dis); } }