fdfdf

Dependencies:   Motordriver mbed

Video of everything working: https://drive.google.com/a/usna.edu/file/d/0B6gx9qlkekGOSXVlQkN1RWpVcDg/view?usp=sharing

Updated Schematic /media/uploads/jared152/capstone_schematic.png

Committer:
jared152
Date:
Wed Feb 04 20:55:22 2015 +0000
Revision:
11:3953288dc1bd
Parent:
10:0ee2d6d8d965
Child:
12:008016f03ca1
updated ping sample count

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jared152 0:e3a927f789f0 1 // Jared Wilkins, Katie MacVarish, Grant LaTerza //
jared152 0:e3a927f789f0 2 // Capstone Project Code //
jared152 0:e3a927f789f0 3 ///////////////////////////////////////////////////
jared152 0:e3a927f789f0 4
jared152 0:e3a927f789f0 5 #include "mbed.h"
jared152 9:fe3a1e9b08b7 6 #include "motordriver.h" //additional library to expand capabilities of PWMOut for use with motor drivers written by
jared152 0:e3a927f789f0 7
jared152 9:fe3a1e9b08b7 8 //Initialization/////////////////////////////
jared152 0:e3a927f789f0 9 Motor drive(p26, p25, p24, 1); //drive motor (PWM, fwd, rev, brake
jared152 0:e3a927f789f0 10 Motor wheel(p23, p22, p21, 1); //flywheel (PWM, fwd, rev, brake)
jared152 2:72f9b88d0e7c 11
jared152 0:e3a927f789f0 12 InterruptIn forward(p15); //remote signal to drive car forward
jared152 0:e3a927f789f0 13 InterruptIn reverse(p16); //signal to drive car in reverse
jared152 2:72f9b88d0e7c 14 InterruptIn echo(p29); //interrupt for range echo pulse
jared152 5:77b574b21fcc 15
jared152 2:72f9b88d0e7c 16 DigitalOut trigger(p30); //Dout fo the trigger
jared152 2:72f9b88d0e7c 17
jared152 3:935aebd40f8a 18 Timer t; //initializes timer
jared152 2:72f9b88d0e7c 19
jared152 1:f102ace95c79 20 DigitalOut fwdled(LED1); //for testing interrupts, etc
jared152 1:f102ace95c79 21 DigitalOut revled(LED2); // ""
jared152 5:77b574b21fcc 22 DigitalOut jumpled(LED3); // ""
jared152 9:fe3a1e9b08b7 23 DigitalOut testled(LED4); // ""
jared152 0:e3a927f789f0 24
jared152 1:f102ace95c79 25
jared152 2:72f9b88d0e7c 26 int rev = 0, fwd = 0; //flag for fwd and rev
jared152 9:fe3a1e9b08b7 27 int t1, t2, //global variables for the echo pulse. c
jared152 9:fe3a1e9b08b7 28 t3, t4; //timer within flip
jared152 9:fe3a1e9b08b7 29 int jump = 0; //flag for wether or not car is jumping
jared152 10:0ee2d6d8d965 30
jared152 9:fe3a1e9b08b7 31 //Interrupt Service Routines////////////////
jared152 0:e3a927f789f0 32 void driveforward()
jared152 0:e3a927f789f0 33 {
jared152 0:e3a927f789f0 34 fwd = 1;
jared152 1:f102ace95c79 35 rev = 0;
jared152 0:e3a927f789f0 36 }
jared152 0:e3a927f789f0 37 void drivereverse()
jared152 0:e3a927f789f0 38 {
jared152 0:e3a927f789f0 39 rev=1;
jared152 1:f102ace95c79 40 fwd = 0;
jared152 0:e3a927f789f0 41 }
jared152 0:e3a927f789f0 42 void stop()
jared152 0:e3a927f789f0 43 {
jared152 0:e3a927f789f0 44 fwd = rev = 0;
jared152 0:e3a927f789f0 45 }
jared152 2:72f9b88d0e7c 46 void startechotimer()
jared152 7:2bcff72b450b 47 {
jared152 4:335d5a21f9f7 48 t1 = t.read_us();
jared152 2:72f9b88d0e7c 49 }
jared152 4:335d5a21f9f7 50 void endechotimer()
jared152 2:72f9b88d0e7c 51 {
jared152 7:2bcff72b450b 52 t2 = t.read_us();
jared152 2:72f9b88d0e7c 53 }
jared152 2:72f9b88d0e7c 54
jared152 9:fe3a1e9b08b7 55 //Functions//////////////////////////
jared152 7:2bcff72b450b 56
jared152 7:2bcff72b450b 57 float read_ultrasonic(int number_of_samples) //function that takes returns an average of multiple distance samples
jared152 2:72f9b88d0e7c 58 {
jared152 7:2bcff72b450b 59
jared152 7:2bcff72b450b 60 float dist = 0.0;
jared152 7:2bcff72b450b 61
jared152 7:2bcff72b450b 62 for (int i = 0; i< number_of_samples; i++) {
jared152 7:2bcff72b450b 63 trigger = 1; // begin pulse
jared152 7:2bcff72b450b 64 wait(.000015); // 15 us
jared152 7:2bcff72b450b 65 trigger = 0; // end pulse
jared152 10:0ee2d6d8d965 66 //wait(.001); //wait for return pulse
jared152 7:2bcff72b450b 67 dist+= (t2-t1)/58.0; //converts time to distance in cm
jared152 7:2bcff72b450b 68 }
jared152 7:2bcff72b450b 69
jared152 7:2bcff72b450b 70 dist = dist/number_of_samples; //take average
jared152 2:72f9b88d0e7c 71
jared152 7:2bcff72b450b 72 return dist;
jared152 7:2bcff72b450b 73 } //end distance() function
jared152 7:2bcff72b450b 74
jared152 7:2bcff72b450b 75 void flip() //all flip function stuff in here
jared152 2:72f9b88d0e7c 76 {
jared152 7:2bcff72b450b 77 t3 = t.read();
jared152 10:0ee2d6d8d965 78 if (t3 - t4 >= 3) { //ensures that this can only run once every six seconds
jared152 10:0ee2d6d8d965 79 t3 = t.read();
jared152 10:0ee2d6d8d965 80 testled = 1;
jared152 7:2bcff72b450b 81 float PWM_wheel = 0.0; //initialize PWM speed for reactionwheel
jared152 7:2bcff72b450b 82 PWM_wheel = 0.20; //***control law here***
jared152 7:2bcff72b450b 83 wheel.speed(PWM_wheel); //sets PWM for flywheel
jared152 7:2bcff72b450b 84 t4 = t.read();
jared152 10:0ee2d6d8d965 85 testled = 0;
jared152 10:0ee2d6d8d965 86 } else
jared152 10:0ee2d6d8d965 87 testled = 0;
jared152 10:0ee2d6d8d965 88
jared152 10:0ee2d6d8d965 89
jared152 7:2bcff72b450b 90 } //end flip function
jared152 2:72f9b88d0e7c 91
jared152 2:72f9b88d0e7c 92
jared152 2:72f9b88d0e7c 93
jared152 2:72f9b88d0e7c 94 //Main Program///////////////////////////
jared152 0:e3a927f789f0 95
jared152 0:e3a927f789f0 96 int main()
jared152 0:e3a927f789f0 97 {
jared152 7:2bcff72b450b 98
jared152 2:72f9b88d0e7c 99
jared152 1:f102ace95c79 100 float PWM_drive = 0.0; //initialize PWM speed for drive wheels
jared152 7:2bcff72b450b 101 float range = 0.0; // variable to hold the range sensor value
jared152 10:0ee2d6d8d965 102
jared152 8:78f190f3a5aa 103 fwdled = 0; //intializes all LEDS to off
jared152 10:0ee2d6d8d965 104 revled = 0; //
jared152 8:78f190f3a5aa 105 testled = 0; //
jared152 8:78f190f3a5aa 106 jumpled = 0; //
jared152 0:e3a927f789f0 107
jared152 1:f102ace95c79 108 forward.rise(&driveforward); // rising edge on p15 triggers interrupt to go forward
jared152 1:f102ace95c79 109 forward.fall(&stop); // falling edge p15 triggers a stop
jared152 0:e3a927f789f0 110
jared152 1:f102ace95c79 111 reverse.rise(&drivereverse); // rising edge p16 triggers go in reverse
jared152 1:f102ace95c79 112 reverse.fall(&stop); // falling edge p16 triggers stop
jared152 1:f102ace95c79 113
jared152 2:72f9b88d0e7c 114 echo.rise(&startechotimer); //rising edge of echo
jared152 2:72f9b88d0e7c 115 echo.fall(&endechotimer); //falling edge of echo
jared152 2:72f9b88d0e7c 116
jared152 2:72f9b88d0e7c 117 wheel.speed(0.0); // reaction wheel is initially off
jared152 7:2bcff72b450b 118 drive.speed(0.0); //drive motor initially off
jared152 2:72f9b88d0e7c 119
jared152 10:0ee2d6d8d965 120 t1 = t2 = t4 = 0; //initialize all timers variables to 0
jared152 10:0ee2d6d8d965 121 t3 = 10;
jared152 7:2bcff72b450b 122 t.start(); //start timer
jared152 2:72f9b88d0e7c 123
jared152 1:f102ace95c79 124 while(1) {
jared152 7:2bcff72b450b 125 PWM_drive = 0.50; //****control law here for drive speed****
jared152 2:72f9b88d0e7c 126
jared152 11:3953288dc1bd 127 range = read_ultrasonic(20); //read distance for average of 10 samples
jared152 7:2bcff72b450b 128
jared152 10:0ee2d6d8d965 129 if (range > 6.0) { //when distance is greater than 6.0 cm it will do the flip function
jared152 10:0ee2d6d8d965 130 jumpled = 1; // lights LED 3 when in jump flag is true
jared152 10:0ee2d6d8d965 131 flip();
jared152 7:2bcff72b450b 132 } else {
jared152 3:935aebd40f8a 133 jumpled = 0; // if not in jump mode led is off
jared152 3:935aebd40f8a 134 }
jared152 7:2bcff72b450b 135
jared152 1:f102ace95c79 136 if(fwd) { //reads flags for drive/rev
jared152 1:f102ace95c79 137 drive.speed(PWM_drive);
jared152 1:f102ace95c79 138 fwdled = 1; //led1 on
jared152 1:f102ace95c79 139 revled = 0; //led2 off
jared152 2:72f9b88d0e7c 140 } else if(rev) {
jared152 0:e3a927f789f0 141 drive.speed(-PWM_drive);
jared152 1:f102ace95c79 142 fwdled = 0; //led1 off
jared152 1:f102ace95c79 143 revled = 1; //led2 on
jared152 1:f102ace95c79 144 } else {
jared152 0:e3a927f789f0 145 drive.coast();
jared152 1:f102ace95c79 146 fwdled = revled = 0;
jared152 1:f102ace95c79 147 }
jared152 0:e3a927f789f0 148 }
jared152 0:e3a927f789f0 149 }