Code for Longboard
Dependencies: mbed
main.cpp@2:b150c439e583, 2018-04-26 (annotated)
- Committer:
- OliviaR
- Date:
- Thu Apr 26 22:35:44 2018 +0000
- Revision:
- 2:b150c439e583
- Parent:
- 1:e47cc3d6d036
rev2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
edwardvear | 0:41c798d23e8f | 1 | #include "mbed.h" |
OliviaR | 1:e47cc3d6d036 | 2 | #include "Servo.h" |
OliviaR | 1:e47cc3d6d036 | 3 | #include "rtos.h" |
OliviaR | 1:e47cc3d6d036 | 4 | #include "ultrasonic.h" |
OliviaR | 1:e47cc3d6d036 | 5 | |
OliviaR | 1:e47cc3d6d036 | 6 | /// Objects |
OliviaR | 1:e47cc3d6d036 | 7 | DigitalIn pb(p22); |
OliviaR | 1:e47cc3d6d036 | 8 | Serial blue(p28,p27); // Bluetooh |
OliviaR | 1:e47cc3d6d036 | 9 | Servo myservo(p21); // Motor |
OliviaR | 1:e47cc3d6d036 | 10 | Serial pc(USBTX,USBRX); // PC |
OliviaR | 1:e47cc3d6d036 | 11 | Thread t1; |
OliviaR | 1:e47cc3d6d036 | 12 | Thread t2; |
OliviaR | 1:e47cc3d6d036 | 13 | Thread t3; |
OliviaR | 1:e47cc3d6d036 | 14 | |
OliviaR | 1:e47cc3d6d036 | 15 | Mutex off; |
OliviaR | 1:e47cc3d6d036 | 16 | bool close=false; |
edwardvear | 0:41c798d23e8f | 17 | |
OliviaR | 1:e47cc3d6d036 | 18 | void bluetooth() |
OliviaR | 1:e47cc3d6d036 | 19 | { |
OliviaR | 1:e47cc3d6d036 | 20 | char bnum = 0; |
OliviaR | 1:e47cc3d6d036 | 21 | myservo=0.5; |
OliviaR | 1:e47cc3d6d036 | 22 | Thread::wait(2000); |
OliviaR | 1:e47cc3d6d036 | 23 | while(1) { |
OliviaR | 1:e47cc3d6d036 | 24 | |
OliviaR | 1:e47cc3d6d036 | 25 | Thread::wait(50); |
OliviaR | 1:e47cc3d6d036 | 26 | if (blue.getc() == '!') { |
OliviaR | 1:e47cc3d6d036 | 27 | if (blue.getc()=='B') { |
OliviaR | 1:e47cc3d6d036 | 28 | bnum = blue.getc(); |
OliviaR | 1:e47cc3d6d036 | 29 | pc.printf("%s",bnum); |
OliviaR | 1:e47cc3d6d036 | 30 | // Up Arrow |
OliviaR | 1:e47cc3d6d036 | 31 | |
OliviaR | 1:e47cc3d6d036 | 32 | if ((bnum == '5') && (myservo <= 1.0)) { |
OliviaR | 1:e47cc3d6d036 | 33 | myservo = myservo + 0.05; |
OliviaR | 1:e47cc3d6d036 | 34 | pc.printf("\n Servo up\n "); |
OliviaR | 1:e47cc3d6d036 | 35 | |
OliviaR | 1:e47cc3d6d036 | 36 | } |
edwardvear | 0:41c798d23e8f | 37 | |
OliviaR | 1:e47cc3d6d036 | 38 | // Down Arrow |
OliviaR | 1:e47cc3d6d036 | 39 | else if ((bnum == '6') && (myservo >= 0.54)) { |
OliviaR | 1:e47cc3d6d036 | 40 | myservo = myservo - 0.05; |
OliviaR | 1:e47cc3d6d036 | 41 | pc.printf("\n Servo down\n "); |
OliviaR | 1:e47cc3d6d036 | 42 | } |
OliviaR | 1:e47cc3d6d036 | 43 | |
OliviaR | 1:e47cc3d6d036 | 44 | // Left Arrow |
OliviaR | 1:e47cc3d6d036 | 45 | |
OliviaR | 1:e47cc3d6d036 | 46 | else if (bnum == '7') { |
OliviaR | 1:e47cc3d6d036 | 47 | pc.printf("\n brake \n "); |
OliviaR | 1:e47cc3d6d036 | 48 | |
OliviaR | 1:e47cc3d6d036 | 49 | while (myservo > 0.0) { |
OliviaR | 1:e47cc3d6d036 | 50 | if (myservo < 0.05) |
OliviaR | 1:e47cc3d6d036 | 51 | myservo = 0.0; |
OliviaR | 1:e47cc3d6d036 | 52 | else |
OliviaR | 1:e47cc3d6d036 | 53 | myservo = myservo - 0.005; // Brake |
OliviaR | 1:e47cc3d6d036 | 54 | pc.printf("brekae"); |
OliviaR | 1:e47cc3d6d036 | 55 | } |
OliviaR | 1:e47cc3d6d036 | 56 | |
OliviaR | 1:e47cc3d6d036 | 57 | } |
OliviaR | 1:e47cc3d6d036 | 58 | |
OliviaR | 1:e47cc3d6d036 | 59 | // Right Arrow |
OliviaR | 1:e47cc3d6d036 | 60 | |
OliviaR | 1:e47cc3d6d036 | 61 | else if (bnum == '8') { |
OliviaR | 1:e47cc3d6d036 | 62 | //servo.lock(); |
OliviaR | 1:e47cc3d6d036 | 63 | myservo = 0.5; // Neutral |
OliviaR | 1:e47cc3d6d036 | 64 | pc.printf("\n neutral"); |
OliviaR | 1:e47cc3d6d036 | 65 | |
OliviaR | 1:e47cc3d6d036 | 66 | |
OliviaR | 1:e47cc3d6d036 | 67 | } |
OliviaR | 1:e47cc3d6d036 | 68 | } |
OliviaR | 1:e47cc3d6d036 | 69 | } |
OliviaR | 1:e47cc3d6d036 | 70 | } |
OliviaR | 1:e47cc3d6d036 | 71 | |
OliviaR | 1:e47cc3d6d036 | 72 | |
OliviaR | 1:e47cc3d6d036 | 73 | }// ends bluetooh |
OliviaR | 1:e47cc3d6d036 | 74 | |
OliviaR | 1:e47cc3d6d036 | 75 | |
OliviaR | 1:e47cc3d6d036 | 76 | |
OliviaR | 1:e47cc3d6d036 | 77 | void dist(int distance) |
OliviaR | 1:e47cc3d6d036 | 78 | { |
OliviaR | 1:e47cc3d6d036 | 79 | //put code here to execute when the distance has changed |
OliviaR | 1:e47cc3d6d036 | 80 | pc.printf("Distance %d mm\r\n", distance); |
OliviaR | 1:e47cc3d6d036 | 81 | if(distance<400) { |
OliviaR | 1:e47cc3d6d036 | 82 | close=true; |
OliviaR | 1:e47cc3d6d036 | 83 | |
edwardvear | 0:41c798d23e8f | 84 | } |
edwardvear | 0:41c798d23e8f | 85 | } |
OliviaR | 1:e47cc3d6d036 | 86 | |
OliviaR | 1:e47cc3d6d036 | 87 | ultrasonic mu(p6, p7, .1, 1, &dist); |
OliviaR | 1:e47cc3d6d036 | 88 | |
OliviaR | 1:e47cc3d6d036 | 89 | void stop() |
OliviaR | 1:e47cc3d6d036 | 90 | { |
OliviaR | 1:e47cc3d6d036 | 91 | |
OliviaR | 1:e47cc3d6d036 | 92 | |
OliviaR | 1:e47cc3d6d036 | 93 | while (myservo > 0.0) { |
OliviaR | 1:e47cc3d6d036 | 94 | if (myservo < 0.05) |
OliviaR | 1:e47cc3d6d036 | 95 | myservo = 0.0; |
OliviaR | 1:e47cc3d6d036 | 96 | else |
OliviaR | 1:e47cc3d6d036 | 97 | myservo = myservo - 0.008; // Brake |
OliviaR | 1:e47cc3d6d036 | 98 | pc.printf("brake"); |
OliviaR | 1:e47cc3d6d036 | 99 | } |
OliviaR | 1:e47cc3d6d036 | 100 | |
OliviaR | 1:e47cc3d6d036 | 101 | |
OliviaR | 1:e47cc3d6d036 | 102 | |
OliviaR | 1:e47cc3d6d036 | 103 | |
OliviaR | 1:e47cc3d6d036 | 104 | |
OliviaR | 1:e47cc3d6d036 | 105 | }//ends stop |
OliviaR | 1:e47cc3d6d036 | 106 | |
OliviaR | 1:e47cc3d6d036 | 107 | int main() |
OliviaR | 1:e47cc3d6d036 | 108 | { |
OliviaR | 1:e47cc3d6d036 | 109 | pb.mode(PullUp); |
OliviaR | 1:e47cc3d6d036 | 110 | pc.printf("Program Begins "); |
OliviaR | 1:e47cc3d6d036 | 111 | myservo = 0.0; |
OliviaR | 1:e47cc3d6d036 | 112 | wait(0.5); //detects signal |
OliviaR | 1:e47cc3d6d036 | 113 | //Required ESC Calibration/Arming sequence |
OliviaR | 1:e47cc3d6d036 | 114 | //sends longest and shortest PWM pulse to learn and arm at power on |
OliviaR | 1:e47cc3d6d036 | 115 | myservo = 1.0; //send longest PWM |
OliviaR | 1:e47cc3d6d036 | 116 | wait(8); |
OliviaR | 1:e47cc3d6d036 | 117 | myservo = 0.0; //send shortest PWM |
OliviaR | 1:e47cc3d6d036 | 118 | wait(8); |
OliviaR | 1:e47cc3d6d036 | 119 | //ESC now operational using standard servo PWM signals |
OliviaR | 1:e47cc3d6d036 | 120 | pc.printf("Before"); |
OliviaR | 1:e47cc3d6d036 | 121 | |
OliviaR | 1:e47cc3d6d036 | 122 | |
OliviaR | 1:e47cc3d6d036 | 123 | pc.printf("\n SETUP \n "); |
OliviaR | 1:e47cc3d6d036 | 124 | |
OliviaR | 1:e47cc3d6d036 | 125 | t1.start(bluetooth); |
OliviaR | 1:e47cc3d6d036 | 126 | |
OliviaR | 1:e47cc3d6d036 | 127 | mu.startUpdates(); |
OliviaR | 1:e47cc3d6d036 | 128 | |
OliviaR | 1:e47cc3d6d036 | 129 | while (true) { |
OliviaR | 1:e47cc3d6d036 | 130 | |
OliviaR | 1:e47cc3d6d036 | 131 | if(close) { |
OliviaR | 1:e47cc3d6d036 | 132 | pc.printf("\n Thread released \n "); |
OliviaR | 1:e47cc3d6d036 | 133 | t2.start(stop); |
OliviaR | 1:e47cc3d6d036 | 134 | Thread::wait(1000); |
OliviaR | 1:e47cc3d6d036 | 135 | close=false; |
OliviaR | 1:e47cc3d6d036 | 136 | } |
OliviaR | 1:e47cc3d6d036 | 137 | |
OliviaR | 1:e47cc3d6d036 | 138 | mu.checkDistance(); |
OliviaR | 1:e47cc3d6d036 | 139 | |
OliviaR | 1:e47cc3d6d036 | 140 | }//ends While |
OliviaR | 1:e47cc3d6d036 | 141 | |
OliviaR | 1:e47cc3d6d036 | 142 | }// ends Main |