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

main.cpp

Committer:
jared152
Date:
2015-02-03
Revision:
2:72f9b88d0e7c
Parent:
1:f102ace95c79
Child:
3:935aebd40f8a

File content as of revision 2:72f9b88d0e7c:

// Jared Wilkins, Katie MacVarish, Grant LaTerza //
// Capstone Project Code                         //
///////////////////////////////////////////////////

#include "mbed.h"
#include "motordriver.h"

//Initialization//
Motor drive(p26, p25, p24, 1); //drive motor (PWM, fwd, rev, brake
Motor wheel(p23, p22, p21, 1); //flywheel (PWM, fwd, rev, brake)

InterruptIn forward(p15);      //remote signal to drive car forward
InterruptIn reverse(p16);      //signal to drive car in reverse
InterruptIn echo(p29);         //interrupt for range echo pulse
DigitalOut trigger(p30);       //Dout fo the trigger

Timer time;

DigitalOut fwdled(LED1);       //for testing interrupts, etc
DigitalOut revled(LED2);       // ""


int rev = 0, fwd = 0;          //flag for fwd and rev
float = t1, t2, dist;        //global variables for the range sensor
int jump = 0;               //flag for wether or not car is jumping

//Interrupt Service Routines
void driveforward()
{
    fwd = 1;
    rev = 0;
}
void drivereverse()
{
    rev=1;
    fwd = 0;
}
void stop()
{
    fwd = rev = 0;
}
void startechotimer()
{
    t1 = t.read;
}
void endechotime()
{
    t2 = t.read;
}

//Functions
void trigger_pulse()  //trigger pulse for range sensor
{
    trigger = 1;
    for (int i=0; i<3; i++) {
    }
    trigger = 0;
}

void distance()
{
    dist = t2-t1; ///*****convert delay to distance in cm here*****
    if (distance > 4.0)
        jump = 1;
    else
        jump = 0;
}

void flip()  //***** all flip function stuff in here*******
{
    float PWM_wheel = 0.0;      //initialize PWM speed for reactionwheel
    PWM_wheel = 0.20;  //***control law here***
    wheel.speed(PWM_wheel);  //sets PWM for flywheel
}



//Main Program///////////////////////////

int main()
{

    float PWM_drive = 0.0;      //initialize PWM speed for drive wheels


    forward.rise(&driveforward); // rising edge on p15 triggers interrupt to go forward
    forward.fall(&stop);         // falling edge p15 triggers a stop

    reverse.rise(&drivereverse); // rising edge p16 triggers go in reverse
    reverse.fall(&stop);         // falling edge p16 triggers stop

    echo.rise(&startechotimer);  //rising edge of echo
    echo.fall(&endechotimer);    //falling edge of echo

    wheel.speed(0.0); // reaction wheel is initially off

    t.start(); //atart timer

    while(1) {
        trigger_pulse(); //send triggerpulse

        if (jump)
            flip();

        PWM_drive = 0.50;  //***control law here for drive speed***


        if(fwd) {                    //reads flags for drive/rev
            drive.speed(PWM_drive);
            fwdled = 1;     //led1 on
            revled = 0;     //led2 off
        } else if(rev) {
            drive.speed(-PWM_drive);
            fwdled = 0;     //led1 off
            revled = 1;     //led2 on
        } else {
            drive.coast();
            fwdled = revled = 0;
        }
    }
}