Commented Logic Control

Dependencies:   Motor mbed

main.cpp

Committer:
m193672
Date:
2017-03-12
Revision:
0:70e2da623aa5

File content as of revision 0:70e2da623aa5:

/*************************************************************************************
Program Name: ES202 Laboratory Experiment 4, week 1

Description:
This program takes two values (the number of measurements to collect out and the motor
pwm) from a user. The program then collects the prescribed number measurements
and sends the iteration stamped values across the serial port.
NOTE: YOU MUST CHANGE THE PWM PERIOD IN THE MOTOR.CPP FILE! CHANGE TO _pwm.period_us(50);
Author: Levi DeVries, PhD, USNA, 2/1/17
**************************************************************************************/

#include "mbed.h"
#include "Motor.h"

Serial pc(USBTX,USBRX);   // serial comms with PC

// ENTER CORRECT PIN NUMBER HERE
AnalogIn sensor(p20);    // analog sensor

// ENTER CORRECT MOTOR PINS HERE
Motor mot(p26,p30,p29);   // motor object

int counter;      // counter variable to print across serial port
int Ncnts = 0;    // number of iterations to count to
float aval = 0.0; // analog measurement value
float mDC = 0.0;  // motor duty cycle
float dheight=0.0;
float meas_height;
float height_error;
int main()
{
    pc.baud(115200); // baud rate

    while(1) {
        mot.speed(0.0);  // turn motor off at start of program

        pc.scanf("%d,%f",&Ncnts,&dheight);
        // ENTER CODE HERE TO READ NUMBER OF COUNTS AND DUTY CYCLE FROM SERIAL PORT!!!


        counter = 1; // set counter to 1 for new experiment
        while(counter<=Ncnts) {

            aval=sensor.read();// Read from sensor
            meas_height = 568.3*pow(aval,3) - 797.8*pow(aval,2) + 381*pow(aval,1) - 41; //polyfit funciton coefficients used to accurately model the height
            height_error = dheight - meas_height; //determine the distance between the desired height and actual height
            // logic control
            if(height_error > 1.0) { //when the elevator is greater than 1 inch below the desired height
                mDC = 1.0; //drive the elevator up
            } else if(height_error < -1.0) { //when the elevator is greater than one inch above the desired height
                mDC = -1.0; //drive the elevator down
            } else { //if the elevator is between 1 inch above and 1 inch below the desired height
                mDC = 0.0; // stop the elevator by turning off the DC Motor
            }

            pc.printf("%d,%f,%f\n",counter,meas_height,mDC);
            mot.speed(mDC);// ENTER CODE HERE TO SET MOTOR DUTY CYCLE

            //pc.printf("%d,%f,%f\n",counter,aval,mDC);// PRINT ITERATION #, SENSOR MEASUREMENT, AND DUTY CYCLE TO SERIAL PORT




            counter++; // update counter
            wait(0.05); // wait 0.05 seconds to allow sensor to refresh

        } // end while(counter)
    }// end while(1)
} // end main