Code for Longboard

Dependencies:   mbed

Committer:
OliviaR
Date:
Thu Apr 26 22:35:44 2018 +0000
Revision:
2:b150c439e583
Parent:
1:e47cc3d6d036
rev2

Who changed what in which revision?

UserRevisionLine numberNew 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