Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: BCEmotor Battery_Linear_Actuator Controller_ IMU_code_ LTC1298_7_14 MODSERIAL PosVelFilter System mbed
Fork of 7_21_17_FSG by
Diff: main.cpp
- Revision:
- 6:ce2cf7f4d7d5
- Parent:
- 5:7421776f6b08
- Child:
- 7:10d7fbac30ea
--- a/main.cpp Mon Jul 17 14:28:53 2017 +0000
+++ b/main.cpp Fri Jul 21 13:32:10 2017 +0000
@@ -8,8 +8,6 @@
#include <string>
using namespace std;
-bool debug_mode = false;
-
#include "IMU_code.h" //IMU code
#include "Battery_Linear_Actuator.h" //Battery Linear Actuator code (TROY) (FIX INCLUSION ISSUES, ports)
@@ -28,7 +26,7 @@
DigitalOut led3(LED3);
DigitalOut led4(LED4);
-AnalogIn pressure_analog_in(A5); //Initialize pin20 (read is float value)
+//Pin for limit switch for buoyancy engine
AnalogIn ain(p18);
/* ************ These tickers work independent of any while loops ********** */
@@ -39,64 +37,47 @@
Ticker BCE_ticker; //new 6/5/17
Ticker PID_ticker; //new 6/14/17
Ticker LA_ticker; //new 6/22/17
-
-float positionCmd = 200.0; //250
-
/* ************************************************************************* */
+//Set beginning position for buoyancy and linear actuator
+float positionCmd = 190.0;
float pi = 3.14159265359;
+float la_setPoint = 0.00; //the IMU pitch angle we want (setpoint)
/* PID LOOP STUFF */
-float la_setPoint = 0.00; //the IMU pitch angle we want (setpoint)
-
float la_P_gain = 1.0;
float la_I_gain = 0.00;
float la_D_gain = 0.00;
/* PID LOOP STUFF */
-float IMU_pitch_angle = 0.00;
+float IMU_pitch_angle;
+double double_actual_position = 0.00;
-bool motor_retracting = false;
-bool motor_extending = false;
-
-// 7/10/17
-string actual_position_string = "";
-double double_actual_position = 0.00;
+string MC_readable_string = "";
void IMU_ticking()
{
- led1 = !led1; //flash the IMU LED
-
- if (debug_mode)
- PC.printf("%s\n", IMU_STRING.c_str()); //if there's something there, print it
+ //led1 = !led1; //flash the IMU LED
+
+ //PC.printf("%s\n", IMU_STRING.c_str()); //if there's something there, print it
+ PC.printf("%s\n", IMU_STRING.c_str());
}
void PRESSURE_ticking()
{
- if (debug_mode)
- PC.printf("ressure: %f psi \r", (0.00122*(adc().ch1_filt)*14.931)-0.0845); //read the analog pin
+ PC.printf("pressure: %f psi \r", (0.00122*(adc().ch1_filt)*9.9542)-0.0845); //read the analog pin
//this voltage has been checked and scaled properly (6/28/2017)
}
void BCE_ticking() //new 6/5/17
{
- if (debug_mode)
- PC.printf("Buoyancy_Engine_POS: %3.0f mm BE_vel: %2.2f mm/s Set Point %3.0f posCon.getOutput: % 1.3f \n", pvf().getPosition(), pvf().getVelocity(), positionCmd, posCon().getOutput());
-
- //PC.printf("BE_pos: %3.0f mm BE_vel: %2.2f mm/s Set Point %3.0f controller output: % 1.3f \n", pvf().getPosition(), pvf().getVelocity(), positionCmd, posCon().getOutput());
+ PC.printf("BE_pos: %3.0f mm BE_vel: %2.2f mm/s Set Point %3.0f controller output: % 1.3f \n", pvf().getPosition(), pvf().getVelocity(), positionCmd, posCon().getOutput());
}
int main()
{
- PC.baud(9600); //mbed to PC serial connection speed
- //PC.baud(230400);
- //got screwy when i changed it
- hBridge().stop();
-
- PC.printf("* * * * * * * * * * * * * * * * *\n");
- PC.printf("PV TEST PROGRAM STARTED 7/13/2017\n");
- PC.printf("* * * * * * * * * * * * * * * * *\n");
-
+ PC.baud(9600); //mbed to PC serial connection speed
+ hBridge().stop(); //Stop the buoyancy engine from moving
systemTime().start(); //start the timer, needed for PID loop
/* **************** Linear Actuator MOTOR CONTROLLER **************** */
@@ -117,61 +98,54 @@
//the filter to converge
pvf().init();
-////CHANGED TO GLOBAL VARIABLES
+ //NEW 7/21 Homing the motor
+ PC.printf("### homing the device ###");
+ BLA_object.Keyboard_H();
+ wait(10); //for debugging
+
+
float motor_cmd = 0.0;
-// float positionCmd = 250.0;
float P = 0.10;
float I = 0.00;
float D = 0.00;
float count = 0.0;
- //char userInput; //from Trent's code?
+ float positionCmd_cm;
float la_step = 1.0;
float la_setPoint_temp = 0.0;
- //Start off in manual mode for testing.
- bool BCE_auto = false;
+ bool BCE_auto = true;
bool LA_auto = false;
- float bce_auto_step_raw = 1.0;
- float bce_auto_step_l;
- //float convert = 10000;
- float convert = 1;
- float bce_auto_step_ml = bce_auto_step_raw * convert;
- int bce_manual_step = 10;
- //float volume_bce = 90.0*convert; //Troy: Not sure I get the conversion
- float volume_bce = 0;
+ float bce_auto_step = 0.1;
+ float volume_bce = 1.0;
+ int bce_man_step = 50;
float positionCmd_temp;
- //float ml_to_l= 0.000000001; //Is this a milliliter? TROY: 7/10/17
- float ml_to_l= 0.001; //milliliter???? TROY: 7/10/17
-
- hBridge().run(motor_cmd);
//set the intial gains for the position controller
posCon().setPgain(P);
posCon().setIgain(I);
posCon().setDgain(D);
- posCon().writeSetPoint(positionCmd); //7/13/17 initialize the position of the motor to 200
-
- PC.printf("BCE Test Program Started!\n");
- wait(1);
+ posCon().writeSetPoint(positionCmd);
+ hBridge().reset();
+ hBridge().run(motor_cmd);
/* *************************** LED *************************** */
led1 = 1; //initial values
led2 = 1;
- led3 = 0;
+ led3 = 1;
led4 = 1;
/* *************************** LED *************************** */
-
- int la_cases = 0;
+
+ //PC.printf("Program Started 6/5/17\n");
int count_while = 0;
//hBridge().reset();
- PC.printf("\n```````````Linear Actuator in IMU controlled mode````````````\n\n");
+ //PC.printf("\n```````````Linear Actuator in IMU controlled mode````````````\n\n");
//PC.printf("Hit shift + \"H\" to home the battery Linear Actuator\n");
- /* ************************** Pressure Sensor ************************** */
- PRESSURE_ticker.attach(&PRESSURE_ticking, 3.0);
- /* ************************** Pressure Sensor ************************** */
+ /* *************************** Potentiometer *************************** */
+ //PRESSURE_ticker.attach(&PRESSURE_ticking, 3.0);
+ /* *************************** Potentiometer *************************** */
/* *************************** MOTOR CONTROLLER *************************** */
//Battery_Linear_Actuator BLA_object; //create the IMU object from the imported class
@@ -179,30 +153,20 @@
/* *************************** IMU *************************** */
IMU_code IMU_object; //create the IMU object from the imported class
- IMU_ticker.attach(&IMU_ticking, 3.0);
+ IMU_ticker.attach(&IMU_ticking, 5.0);
/* *************************** IMU *************************** */
/* *************************** BCE *************************** */
//float previous_positionCmd = -1;
- //BCE_ticker.attach(&BCE_ticking, 3.0);
+ //BCE_ticker.attach(&BCE_ticking, 10.0);
/* *************************** BCE *************************** */
while(1)
{
- //PC.printf("DEBUG: POT position: %f velocity: %f adc_count: %d VS conv_distance: %f adc_ch0_filter: %f\n ", pvf().getPosition(), pvf().getVelocity(), adc().ch0_filt, pvf().getVelocity(), adc().get_ch0_filt); //DEBUG TROY
- if (debug_mode)
- {
- PC.printf("DEBUG: POT position: %6.3f velocity: %6.3f adc_count: %d VS conv_distance: %6.3f adc_ch0_filter: %6.3f\n", pvf().getPosition(), pvf().getVelocity(), adc().ch0_filt, pvf().get_conv_distance(), adc().get_ch0_filt()); //DEBUG TROY
- PC.printf("DEBUG: dt: %f current_time: %f last_time: %f\n", pvf().getDt(), pvf().get_curr_time(), pvf().get_last_time()); //DEBUG TROY
- PC.printf("DEBUG: x1: %f x2: %f x1_dot: %f x2_dot: %f\n", pvf().get_x1(), pvf().get_x2(), pvf().get_x1_dot(), pvf().get_x2_dot()); //DEBUG TROY
- }
-
/* *************************** IMU *************************** */
IMU_STRING = IMU_object.IMU_run(); //grab the IMU string each iteration through the loop
- IMU_pitch_angle = 1.0 * IMU_object.IMU_pitch(); //get the pitch update constantly?
-
- if (debug_mode)
- PC.printf("pitch angle... %f set pitch angle: %f\n", IMU_pitch_angle, la_setPoint);
+ IMU_pitch_angle = 1.0 * IMU_object.IMU_pitch(); //get the pitch update constantly?
+ //PC.printf("pitch angle... %f set pitch angle: %f\n", IMU_yaw_angle, la_setPoint);
/* *************************** IMU *************************** */
/* Buoyancy Engine */
@@ -218,13 +182,15 @@
//FOR DEBUGGING
//PC.printf("BE_pos: %3.0f mm BE_vel: %2.2f mm/s Set Point %3.0f controller output: % 1.3f P: %1.3f I: %1.4f D: %1.4f\r", pvf().getPosition(), pvf().getVelocity(), positionCmd, posCon().getOutput(), P, I, D);
+ //PC.printf("WHILE LOOP\n"); //DEBUG
if (PC.readable())
{
- led4 = !led4; //read indicator changes
- Key=PC.getc();
+ //led4 != led4;
+ //PC.printf("DEBUG: PC IS READABLE\n"); //DEBUG
+ Key=PC.getc();
//Universal MBED Controls
- if(Key == '!') //RESET THE MBED
+ if(Key=='!') //RESET THE MBED
{
PC.printf("MBED RESET KEY (!) PRESSED\n");
PC.printf("Linear Actuator Motor disabled!\n");
@@ -233,49 +199,50 @@
wait(0.5); //500 milliseconds
mbed_reset(); //reset the mbed!
}
-
- else if(Key == '~') // (shift + '`')
- {
- debug_mode = !debug_mode; //shift it back and forth
- PC.printf(" # # # # # # DEBUG MODE: %d # # # # # # \n", debug_mode);
- }
-
- else if(Key == 'H') //homing sequence
+ else if(Key =='H') //homing sequence
{
PC.printf("### homing the device ###");
BLA_object.Keyboard_H();
- wait(5); //for debugging
+ wait(10); //for debugging
- ////TEST THIS
- //PC.printf("BE_pos: 0\n");
- //PC.printf("### position is %d ###\n", BLA_object.get_pos().c_str()); //flip this back and forth
-
- //TROY: TEST THIS 7/11/2017
const char *char_actual_position = BLA_object.get_pos().c_str();
//actual_position_string = BLA_object.get_pos().c_str();
sscanf(char_actual_position, "%lf", &double_actual_position);
// 7/10/17
- PC.printf("### position is\nBEP: %lf ###\n", double_actual_position);
+ PC.printf("LA actual position: %lf \n", double_actual_position);
+
+ //TROY NOTES on Linear Actuator commands:
+ //"pos" returns integer value "66813 for example"
+ //"hosp-100" is the setting of the motor, it retracts at 100 rpm
+ //"gohoseq" to home it, it will not give you feedback
+ //print the position after you do this to see where the LA is
+ }
+ else if(Key=='p' or Key == 'P')
+ {
+ PC.printf("BCE piston position: %f velocity? %f (BCE active? %d)\n", pvf().getPosition(), pvf().getVelocity(),posCon().getOutput()); //DEBUG TROY
- wait(1); //for debugging
- }
- else if(Key == 'p' or Key == 'P')
- {
// 7/10/17
//actual_position_string = BLA_object.get_pos();
//actual_position_string = BLA_object.get_pos().c_str();
//const char *char_actual_position = string_actual_position.c_str();
+
const char *char_actual_position = BLA_object.get_pos().c_str();
//actual_position_string = BLA_object.get_pos().c_str();
sscanf(char_actual_position, "%lf", &double_actual_position);
// 7/10/17
- PC.printf("### position is\nBEP: %lf ###\n", double_actual_position); //flip this back and forth
+ PC.printf("### L.A. position is\nLA_AP: %lf ###\n", double_actual_position); //flip this back and forth
+
+ if (double_actual_position > 180000)
+ PC.printf(" <<<< REACHED MAXIMUM L.A. POSITION! >>>>\n");
+ else if (double_actual_position < 0)
+ PC.printf(" <<<< REACHED MINIMUM L.A. POSITION! >>>>\n");
+
wait(1); //for debugging
- // "-999999" means it is not working
+ // "-999999" means it is not working
}
//Buoyancy Engine Controls
@@ -304,57 +271,12 @@
}
}
//BCE Automatic Controls
- else if (Key == 's' or Key == 'S')
+ else if(Key =='d' or Key == 'D')
{
if (BCE_auto == true)
{
- //PC.printf("BCE Automatic Step Size Change\n");
- if (bce_auto_step_raw == 1.0)
- {
- bce_auto_step_raw = 5.0;
- }
- else if (bce_auto_step_raw == 5.0)
- {
- bce_auto_step_raw = 10.0;
- }
- else if (bce_auto_step_raw == 10.0)
- {
- bce_auto_step_raw = 50.0;
- }
- else if (bce_auto_step_raw == 50.0)
- {
- bce_auto_step_raw = 100.0;
- }
- else if (bce_auto_step_raw == 100.0)
- {
- bce_auto_step_raw = 1.0;
- }
- bce_auto_step_ml = bce_auto_step_raw * convert;
- PC.printf("BCE Auto Step Size Now\n BE_ST_ML: %7.0f milliliters\n", bce_auto_step_ml);
- }
- else
- {
- PC.printf("ERROR: In BCE Manual Mode, this is a auto command\n");
-
- }
- }
- else if(Key == 'd' or Key == 'D') //0 mm = 0 mL, 350 mm = 1816 mL
- {
- PC.printf("(d) volume_bce: %f\n", volume_bce);
- if (BCE_auto == true)
- {
- PC.printf("(d) BCE_auto: %d\n", BCE_auto);
- if (volume_bce >= 1) //350 mm retracted from end = 1816 mL in buyoancy engine tube
- {
- volume_bce -= bce_auto_step_ml;
- float calc_height = (volume_bce * 1000) / (pi*40.64*40.64);
- PC.printf("Buoyancy Engine Volume VBE: %1.5f milliliters (Distance: %f mm)\n", volume_bce, calc_height); //to read in MATLAB
- }
- else if (volume_bce < 1)
- {
- PC.printf("Volume reset to 1 mL!\n"); //keep the volume at zero mL
- volume_bce = 1;
- }
+ volume_bce -= bce_auto_step;
+ PC.printf("The volume for the buoyancy motor is\nVBE: %1.3f liters\n", volume_bce); //to read in MATLAB
}
else
{
@@ -363,21 +285,10 @@
}
else if(Key == 'f' or Key == 'F')
{
- PC.printf("(f) volume_bce: %f\n", volume_bce);
if (BCE_auto == true)
{
- PC.printf("(f) BCE_auto: %d\n", BCE_auto);
- if (volume_bce <= 1816) //350 mm retracted from end = 1816 mL in buyoancy engine tube
- {
- volume_bce += bce_auto_step_ml;
- float calc_height = (volume_bce * 1000) / (pi*40.64*40.64);
- PC.printf("Buoyancy Engine Volume VBE: %1.5f milliliters (Distance: %f mm)\n", volume_bce, calc_height); //to read in MATLAB
- }
- else if (volume_bce > 1816)
- {
- PC.printf("Volume reset to 1816 mL (max volume)!\n"); //keep the volume at 1816 mL (max)
- volume_bce = 1816;
- }
+ volume_bce += bce_auto_step;
+ PC.printf("The volume for the buoyancy motor is\nVBE: %1.3f liters\n", volume_bce); //to read in MATLAB
}
else
{
@@ -389,19 +300,19 @@
if (BCE_auto == true)
{
PC.printf("\nR received!\n");
-
- //Troy equation (volume 1 mL = 1000 mm^3)
- positionCmd = (volume_bce * 1000) / (pi*40.64*40.64); //volume / (pi * r^2)
- PC.printf("\nBCE volume sent was %d mL (distance: %f mm)\n", volume_bce, positionCmd);
- PC.printf("(BCE Distance) VBE_SENT: %3.0f\n", positionCmd);
-
- posCon().writeSetPoint(positionCmd); //write the setPoint (target)
-
- hBridge().run(posCon().getOutput()); //run the h-bridge until it reaches the target
+ positionCmd_cm=(1000/(16*pi))*volume_bce;
+ positionCmd = positionCmd_cm*10;
+ //positionCmd= positionCmd_temp*0.000000001;
+ //PC.printf("BCE engine going to position: %3.2f\n", positionCmd);
+ PC.printf("\nBASETP: %3.0f\n", positionCmd);
+ posCon().writeSetPoint(positionCmd);
+ //posCon().setPgain(P);
+ //posCon().setIgain(I);
+ //posCon().setDgain(D);
+ hBridge().run(posCon().getOutput());
+
- hBridge().reset(); //reset to start this process of moving the h-bridge
-
- count = 0; //not sure...
+ count = 0;
}
else
{
@@ -414,88 +325,73 @@
if (BCE_auto == false)
{
PC.printf("BCE Manual Step Size Change\n");
- if (bce_manual_step == 1)
+ if (bce_man_step == 50)
{
- bce_manual_step = 10;
+ bce_man_step = 25;
}
- else if (bce_manual_step == 10)
+ else if (bce_man_step == 25)
{
- bce_manual_step = 25;
+ bce_man_step = 10;
}
- else if (bce_manual_step == 25)
+ else if (bce_man_step == 10)
{
- bce_manual_step = 50;
+ bce_man_step = 1;
}
- else if (bce_manual_step == 50)
+ else if (bce_man_step == 1)
{
- bce_manual_step = 1;
+ bce_man_step = 50;
}
- PC.printf("BCE Manual Step Size Now\nBEM_ST: %d\n", bce_manual_step);
- }
- else
- {
- PC.printf("ERROR: BCE in Auto Mode, this is a manual command\n");
- }
- }
- else if (Key == 'z' or Key == 'Z')
- {
- if (BCE_auto == false)
- {
- positionCmd -= bce_manual_step;
- //PC.printf(">>> BEM_P: %3.0f\n", positionCmd); //to read in MATLAB (DEBUG)
-
- //decrement the duty cycle
- if (positionCmd >= 50 && positionCmd <=350) //limit buoyancy engine position 25 to 375
- {
- PC.printf("Commanded BCE position is BEM_P: %3.0f\n", positionCmd); //to read in MATLAB
- }
- else if (positionCmd < 50)
- {
- PC.printf("BCE past limits! Reset to 50\n"); //to read in MATLAB
- positionCmd = 50;
- }
- }
- else
- {
- PC.printf("ERROR: BCE in Auto Mode, this is a manual command\n");
- }
- }
- else if (Key == 'l' or Key == 'L')
- PC.printf("DEBUG: String position? %f velocity? %f (BCE active: %d)\n", pvf().getPosition(), pvf().getVelocity(),posCon().getOutput()); //DEBUG TROY
-
- else if (Key == 'x' or Key == 'X')
- {
- if (BCE_auto == false)
- {
- positionCmd += bce_manual_step;
- //PC.printf(">>> BEM_P: %3.0f\n", positionCmd); //to read in MATLAB (DEBUG)
-
- //decrement the duty cycle
- if (positionCmd >= 50 && positionCmd <=350) //limit buoyancy engine position 25 to 375
- {
- PC.printf("Commanded BCE position is BEM_P: %3.0f\n", positionCmd); //to read in MATLAB
- }
- else if (positionCmd >350)
- {
- PC.printf("BCE past limits! Reset to 350\n"); //to read in MATLAB
- positionCmd = 350;
- }
+ PC.printf("BCE Manual Step Size Now %d\n", bce_man_step);
}
else
{
PC.printf("ERROR: In BCE Auto Mode, this is a manual command\n");
}
}
- else if(Key == 'w' or Key == 'W')
+ else if (Key == 'z' or Key =='Z')
+ {
+ if (BCE_auto == false and positionCmd < 395)
+ {
+ //increment the duty cycle
+ positionCmd -= bce_man_step;
+ PC.printf("The position for the buoyancy motor is\nBEP: %3.0f\n", positionCmd); //to read in MATLAB
+ }
+ else if (positionCmd > 395)
+ {
+ PC.printf("ERROR: Cannot move past 395 mm\n");
+ positionCmd = 370;
+ }
+ else
+ {
+ PC.printf("ERROR: In BCE Auto Mode, this is a manual command\n");
+ }
+ }
+ else if (Key == 'x' or Key == 'X')
+ {
+ if (BCE_auto == false and positionCmd > -25)
+ {
+ //decrement the duty cycle
+ positionCmd += bce_man_step;
+ PC.printf("The position for the buoyancy motor is\nBEP: %3.0f\n", positionCmd); //to read in MATLAB
+ }
+ else if (positionCmd < -25)
+ {
+ PC.printf("ERROR: Cannot move past -5 mm\n");
+ positionCmd = -5;
+ }
+ else
+ {
+ PC.printf("ERROR: In BCE Auto Mode, this is a manual command\n");
+ }
+ }
+ else if(Key=='w' or Key =='W')
{
if (BCE_auto == false)
{
PC.printf("\nW received!\n");
- PC.printf("BEM_SND: %3.0f\n", positionCmd);
-
- posCon().writeSetPoint(positionCmd); //writing once doesn't work sometimes
-
+ PC.printf("BASETP: %3.0f\n", positionCmd);
+ posCon().writeSetPoint(positionCmd);
//posCon().setPgain(P);
//posCon().setIgain(I);
//posCon().setDgain(D);
@@ -511,6 +407,8 @@
PC.printf("ERROR: In BCE Auto Mode, this is a manual command\n");
}
}
+ else if (Key == 'l' or Key == 'L')
+ PC.printf("DEBUG: String position? %f velocity? %f (BCE active: %d)\n", pvf().getPosition(), pvf().getVelocity(),posCon().getOutput()); //DEBUG TROY
//Linear Actuator Controls
else if(Key == 'c' or Key == 'C')
@@ -522,8 +420,7 @@
else
{
LA_auto = true;
- PC.printf("```````````LA now in IMU (Auto) Controlled Mode```````````````\n");
- la_cases = 0;
+ PC.printf("```````````Now in IMU Controlled Mode```````````````\n");
count_while = 0;
}
}
@@ -532,55 +429,46 @@
if (LA_auto == true)
{
LA_auto = false;
- //Change cases: go from imu controlled to manual
- PC.printf("```````````LA now in Manual Mode````````````````````\n");
- la_cases = 1;
+ //go from imu controlled to manual
+ PC.printf("```````````Now in Manual Mode````````````````````\n");
count_while = 0;
}
else
{
PC.printf("ERROR: LA already in manual mode\n");
- PC.printf("LA_auto ==> %d\n", LA_auto); //should show "0" (false)
}
}
else if (Key == '0' or Key == ')')
{
- if (LA_auto == true)
+ PC.printf(") recieved\n");
+ if (la_step == 0.5)
+ {
+ la_step = 1.0;
+ }
+ else if (la_step == 1.0)
+ {
+ la_step = 5.0;
+ }
+ else if (la_step == 5.0)
{
- PC.printf(") recieved\n");
- if (la_step == 0.5)
- {
- la_step = 1.0;
- }
- else if (la_step == 1.0)
- {
- la_step = 5.0;
- }
- else if (la_step == 5.0)
- {
- la_step = 10.0;
- }
- else if (la_step == 10.0)
- {
- la_step = 15.0;
- }
- else if (la_step == 15.0)
- {
- la_step = 0.5;
- }
- PC.printf("LA Step Size Now\nLA_ST_SZ: %f\n", la_step);
+ la_step = 10.0;
+ }
+ else if (la_step == 10.0)
+ {
+ la_step = 15.0;
}
- else
- {
- PC.printf("ERROR: LA in manual mode!\n");
+ else if (la_step == 15.0)
+ {
+ la_step = 0.5;
}
+ PC.printf("LA Step Size Now %f\n", la_step);
}
-
- else if (Key == '-' or Key == '_')
+
+ else if (Key=='-' or Key == '_')
{
if (LA_auto == true)
{
- la_setPoint_temp -= la_step; //IMU_pitch_angle -= 1.0;
+ la_setPoint_temp -= la_step; //IMU_yaw_angle -= 1.0;
PC.printf("- recieved\n");
PC.printf("LA auto step size: %f\n", la_step);
PC.printf("LA angle changed to\nLA_ANG: %f\n", la_setPoint_temp);
@@ -590,11 +478,12 @@
PC.printf("ERROR: LA in manual mode!\n");
}
}
- else if (Key == '=' or Key == '+')
+
+ else if (Key =='=' or Key == '+')
{
if (LA_auto == true)
{
- la_setPoint_temp += la_step; //IMU_pitch_angle += 1.0;
+ la_setPoint_temp += la_step; //IMU_yaw_angle += 1.0;
PC.printf("+ recieved\n");
PC.printf("LA auto step size: %f\n", la_step);
PC.printf("LA angle changed to\nLA_ANG: %f\n", la_setPoint_temp);
@@ -604,8 +493,9 @@
PC.printf("ERROR: LA in manual mode!\n");
}
}
+
else if (Key == 'A' or Key == 'a')
- {
+ {
if (LA_auto == true)
{
PC.printf("A recieved\n");
@@ -616,51 +506,11 @@
{
PC.printf("ERROR: LA in manual mode!\n");
}
- }
+ }
- else if (Key == '[' or Key == '{')
- {
- la_P_gain -= 0.1;
- PC.printf("[ key pressed\n");
- PC.printf("P gain is now %f\n", la_P_gain);
-
- }
- else if (Key == ']' or Key == '}')
- {
- la_P_gain += 0.1;
- PC.printf("] key pressed\n");
- PC.printf("P gain is now %f\n", la_P_gain);
-
- }
- else if (Key == ';')
- {
- la_I_gain -= 0.1;
- PC.printf("; key pressed\n");
- PC.printf("I gain is now %f\n", la_I_gain);
-
- }
- else if (Key == '\'')
- {
- la_I_gain += 0.1;
- PC.printf("\\ key pressed\n");
- PC.printf("I gain is now %f\n", la_I_gain);
- }
- else if (Key == '.')
- {
- la_D_gain -= 0.1;
- PC.printf(". key pressed\n");
- PC.printf("D gain is now %f\n", la_D_gain);
- }
- else if (Key == '/')
- {
- la_D_gain += 0.1;
- PC.printf("/ key pressed\n");
- PC.printf("D gain is now %f\n", la_D_gain);
- }
-
else if(Key == 'n' or Key == 'N')
- {
+ {
if (LA_auto == false)
{
PC.printf("N key pressed. \n");
@@ -672,6 +522,7 @@
PC.printf("ERROR: In LA in Auto Mode, this is a manual command\n");
}
}
+
else if(Key == 'm' or Key == 'M')
{
if (LA_auto == false)
@@ -685,6 +536,7 @@
PC.printf("ERROR: In LA in Auto Mode, this is a manual command\n");
}
}
+
else if(Key == 'j' or Key == 'J')
{
if (LA_auto == false)
@@ -698,6 +550,7 @@
PC.printf("ERROR: In LA in Auto Mode, this is a manual command\n");
}
}
+
else if(Key == 'k' or Key == 'K')
{
if (LA_auto == false)
@@ -711,12 +564,6 @@
PC.printf("ERROR: In LA in Auto Mode, this is a manual command\n");
}
}
-
- else if (Key == 't')
- {
- PC.printf("VELOCITY?\n%s\n",BLA_object.get_vel());
- }
-
else
{
@@ -725,16 +572,16 @@
}
wait_us(100); //for PC readable
- //PC.printf("%s\n", BLA_object.PID_velocity_control(la_setPoint, IMU_pitch_angle, la_P_gain, la_I_gain, la_D_gain).c_str()); //get output string
- //BLA_object.PID_velocity_control(la_setPoint, IMU_pitch_angle, la_P_gain, la_I_gain, la_D_gain).c_str();
+ //PC.printf("%s\n", BLA_object.PID_velocity_control(la_setPoint, IMU_yaw_angle, la_P_gain, la_I_gain, la_D_gain).c_str()); //get output string
+ //BLA_object.PID_velocity_control(la_setPoint, IMU_yaw_angle, la_P_gain, la_I_gain, la_D_gain).c_str();
}
-
+ //end of PC readBLE
+
//MC readable
- string MC_readable_string = "";
MC_readable_string = BLA_object.MC_readable_redux();
//PC.printf("CHECK_MC_readable:\n%s\n", MC_readable_string);
- if (LA_auto == false)
+ /* if (LA_auto == false)
{
if (!MC_readable_string.empty()) //if this string is empty
{
@@ -745,65 +592,71 @@
;
//PC.printf("NOTHING?\n");
}
- }
-
- //change between automatic and manual mode of linear actuator? Troy: 7/11/2017
-
- if (la_cases==0)
+ }*/
+ if (LA_auto==true)
{
- if (debug_mode) //debug mode true
- PC.printf("%s\n", BLA_object.PID_velocity_control(la_setPoint, IMU_pitch_angle, la_P_gain, la_I_gain, la_D_gain).c_str()); //get output string
- else //debug mode false
- BLA_object.PID_velocity_control(la_setPoint, IMU_pitch_angle, la_P_gain, la_I_gain, la_D_gain).c_str();
+ //PC.printf("LA_auto true\n");
+ //PC.printf("%s\n", BLA_object.PID_velocity_control(la_setPoint, IMU_pitch_angle, la_P_gain, la_I_gain, la_D_gain).c_str()); //get output string
+ BLA_object.PID_velocity_control(la_setPoint, IMU_pitch_angle, la_P_gain, la_I_gain, la_D_gain).c_str();
+ //wait_us(100); //for PC readable (0.1 ms)
}
- else if (la_cases==1)
- {
+ else if (LA_auto == false)
+ {
+ //PC.printf("LA_auto false\n");
+// if (!MC_readable_string.empty()) //if this string is empty
+// {
+// PC.printf("%s\n", MC_readable_string); //get responses from the linear actuator motor controller
+// }
+// else
+// {
+// ;
+// //PC.printf("NOTHING?\n");
+// }
- while (count_while==0)
- {
- PC.printf("%s\n", BLA_object.Keyboard_U().c_str()); //velocity = 0, motor disabled
- PC.printf("%s\n", BLA_object.Keyboard_Q().c_str()); //turn off motor
- wait(1);
- PC.printf("%s\n", BLA_object.Keyboard_E().c_str()); //turn on motor
- wait(1);
- PC.printf("\n```````````Linear Actuator in Manual controlled mode````````````\n\n");
- count_while++;
- }
+// while (count_while==0)
+// {
+//// PC.printf("%s\n", BLA_object.Keyboard_U().c_str()); //velocity = 0, motor disabled
+//// PC.printf("%s\n", BLA_object.Keyboard_Q().c_str()); //turn off motor
+//// wait(1);
+//// PC.printf("%s\n", BLA_object.Keyboard_E().c_str()); //turn on motor
+//// wait(1);
+//// PC.printf("\n```````````Linear Actuator in Manual controlled mode````````````\n\n");
+//// count_while++;
+//
+// BLA_object.Keyboard_E(); //turn on motor
+// BLA_object.velocity_only(0); //set the velocity to zero just in case
+// PC.printf("\n```````````Linear Actuator in Manual controlled mode````````````\n\n");
+// count_while++;
+// }
}
+
if ((abs(pvf().getVelocity())<0.1) && (posCon().getOutput()>0.0))
{
count ++;
//pc().printf("We have a small issue\n");
- //PC.printf("posCon().getOutput() %f\n", posCon().getOutput()); //what is this again?
- //always 1?
- if(count==10)
- {
- //PC.printf("> > > Bad pot issue?\n");
- //hBridge().stop();
- count = 0; //reset counter
- }
+ if(count==10)
+ {
+ pc().printf("Bad pot issue\n");
+ //hBridge().stop();
+ count = 0;
+ }
}
else if ((5.0*ain.read())<1.0)
{
- PC.printf("Hit the limit switch??\n");
+ pc().printf("Hit the limit switch??\n");
hBridge().stop();
}
-
-
- /* buoyancy engine potentiometer string snaps */
+ //string snaps
else if (pvf().getVelocity() > 100)
{
PC.printf("DEBUG: String position? %f velocity? %f\n", pvf().getPosition(), pvf().getVelocity()); //DEBUG TROY
//hBridge().stop();
//PC.printf("PosVelFilter B.E. Velocity: %f\n", pvf().getVelocity());
- PC.printf("********** String broke? *********\n");
+ PC.printf("********** String broke? *********\n");
}
-
- if (debug_mode)
- PC.printf("+");
- //PC.printf("DEBUG: End of while loop?\n");
- } //end of while loop
+
+ }
}
\ No newline at end of file
