FSG / Battery_Linear_Actuator

Dependents:   7_21_17_FSG 7_26_17_FSG

Fork of Battery_Linear_Actuator_ by FSG

Committer:
mdavis30
Date:
Fri Jun 09 17:32:14 2017 +0000
Revision:
0:645ad86abcba
Child:
1:ca2454ef80d9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mdavis30 0:645ad86abcba 1 #include "Battery_Linear_Actuator.h"
mdavis30 0:645ad86abcba 2
mdavis30 0:645ad86abcba 3 #include "MODSERIAL.h"
mdavis30 0:645ad86abcba 4 Serial MC(p28,p27); //tx, rx (pins verified)
mdavis30 0:645ad86abcba 5
mdavis30 0:645ad86abcba 6 //CONSTRUCTOR
mdavis30 0:645ad86abcba 7 Battery_Linear_Actuator::Battery_Linear_Actuator()
mdavis30 0:645ad86abcba 8 {
mdavis30 0:645ad86abcba 9 MC.baud(9600); //motor controller to MBED connection speed
mdavis30 0:645ad86abcba 10 motor_absolute_position = 0; //initialize variables here
mdavis30 0:645ad86abcba 11
mdavis30 0:645ad86abcba 12 linear_actuator_step_size = 1000; //default confirmed with Dan Edwards
mdavis30 0:645ad86abcba 13 linear_actuator_motor_speed = 500; //5 seconds of full travel between 0 and 175,000 (1000 is about 3 seconds)
mdavis30 0:645ad86abcba 14
mdavis30 0:645ad86abcba 15 map_check = 0;
mdavis30 0:645ad86abcba 16 }
mdavis30 0:645ad86abcba 17
mdavis30 0:645ad86abcba 18 //KEYBOARD FUNCTIONS
mdavis30 0:645ad86abcba 19 int Battery_Linear_Actuator::MC_readable()
mdavis30 0:645ad86abcba 20 {
mdavis30 0:645ad86abcba 21 return MC.readable();
mdavis30 0:645ad86abcba 22 }
mdavis30 0:645ad86abcba 23
mdavis30 0:645ad86abcba 24 string Battery_Linear_Actuator::Keyboard_O()
mdavis30 0:645ad86abcba 25 {
mdavis30 0:645ad86abcba 26 //PC.printf("MBED_m_a_p: %d \n", motor_absolute_position); //linear actuator position
mdavis30 0:645ad86abcba 27
mdavis30 0:645ad86abcba 28 MC.printf("pos\r"); //get position from motor controller...maybe rewrite this
mdavis30 0:645ad86abcba 29 //get this from the Faulhaber Motor Controller in MATLAB?
mdavis30 0:645ad86abcba 30
mdavis30 0:645ad86abcba 31 char char_buffer [60];
mdavis30 0:645ad86abcba 32 string Battery_Position_String;
mdavis30 0:645ad86abcba 33 sprintf(char_buffer,"MBED_m_a_p: %d \n", motor_absolute_position); //linear actuator position
mdavis30 0:645ad86abcba 34 Battery_Position_String = char_buffer;
mdavis30 0:645ad86abcba 35 return Battery_Position_String;
mdavis30 0:645ad86abcba 36 }
mdavis30 0:645ad86abcba 37
mdavis30 0:645ad86abcba 38 string Battery_Linear_Actuator::Keyboard_H() //Home linear actuator
mdavis30 0:645ad86abcba 39 {
mdavis30 0:645ad86abcba 40 //reset position in program:
mdavis30 0:645ad86abcba 41 motor_absolute_position = 0;
mdavis30 0:645ad86abcba 42
mdavis30 0:645ad86abcba 43 MC.printf("hosp-100\r"); wait(0.1); //homing speed -100 (verified
mdavis30 0:645ad86abcba 44 MC.printf("ghosp\r"); wait(0.1);//check homing speed
mdavis30 0:645ad86abcba 45 MC.printf("SHL1\r"); wait(0.1);//setup fault and AnIn
mdavis30 0:645ad86abcba 46 MC.printf("gohoseq\r"); wait(0.1);//enable the sequence
mdavis30 0:645ad86abcba 47
mdavis30 0:645ad86abcba 48 char homing_string[80];
mdavis30 0:645ad86abcba 49 sprintf(homing_string,"\nH received! (Homing Sequence In Progress)\nMBED_m_a_p: %d \n", motor_absolute_position);
mdavis30 0:645ad86abcba 50 return homing_string;
mdavis30 0:645ad86abcba 51 }
mdavis30 0:645ad86abcba 52
mdavis30 0:645ad86abcba 53 string Battery_Linear_Actuator::Keyboard_E() //enable linear actuator
mdavis30 0:645ad86abcba 54 {
mdavis30 0:645ad86abcba 55 MC.printf("en\r");
mdavis30 0:645ad86abcba 56 return "\nE received!\nMOTOR ENABLED!";
mdavis30 0:645ad86abcba 57 }
mdavis30 0:645ad86abcba 58
mdavis30 0:645ad86abcba 59 string Battery_Linear_Actuator::Keyboard_Q() //disable linear actuator
mdavis30 0:645ad86abcba 60 {
mdavis30 0:645ad86abcba 61 MC.printf("di\r");
mdavis30 0:645ad86abcba 62 return "\nQ received!\nMOTOR DISABLED!";
mdavis30 0:645ad86abcba 63 }
mdavis30 0:645ad86abcba 64
mdavis30 0:645ad86abcba 65 string Battery_Linear_Actuator::Keyboard_EQUAL_KEY() //INCREASE L.A. step size
mdavis30 0:645ad86abcba 66 {
mdavis30 0:645ad86abcba 67 if (linear_actuator_step_size <= 9800) //arbitrary stop at 10000
mdavis30 0:645ad86abcba 68 linear_actuator_step_size += 200;
mdavis30 0:645ad86abcba 69 char bla_string[80];
mdavis30 0:645ad86abcba 70 sprintf(bla_string, "\n(MBED) Linear Actuator step size INCREASED: %d\nLA_SZ: %d", linear_actuator_step_size, linear_actuator_step_size);
mdavis30 0:645ad86abcba 71
mdavis30 0:645ad86abcba 72 return bla_string;
mdavis30 0:645ad86abcba 73 }
mdavis30 0:645ad86abcba 74
mdavis30 0:645ad86abcba 75 string Battery_Linear_Actuator::Keyboard_DASH_KEY() //DECREASE L.A. step size
mdavis30 0:645ad86abcba 76 {
mdavis30 0:645ad86abcba 77 if (linear_actuator_step_size >= 200)
mdavis30 0:645ad86abcba 78 linear_actuator_step_size -= 200;
mdavis30 0:645ad86abcba 79 char bla_string[80];
mdavis30 0:645ad86abcba 80 sprintf(bla_string, "\n(MBED) Linear Actuator step size DECREASED\nLA_SZ: %d", linear_actuator_step_size, linear_actuator_step_size);
mdavis30 0:645ad86abcba 81
mdavis30 0:645ad86abcba 82 return bla_string;
mdavis30 0:645ad86abcba 83 }
mdavis30 0:645ad86abcba 84
mdavis30 0:645ad86abcba 85 string Battery_Linear_Actuator::Keyboard_LEFT_BRACKET()
mdavis30 0:645ad86abcba 86 { //100 to 30000, DECREASE (100 increments)
mdavis30 0:645ad86abcba 87 if (linear_actuator_motor_speed >= 100)
mdavis30 0:645ad86abcba 88 linear_actuator_motor_speed -= 100;
mdavis30 0:645ad86abcba 89 //PC.printf("\n(MBED) Linear Actuator Motor Speed INCREASED: sp%d\n", linear_actuator_motor_speed);
mdavis30 0:645ad86abcba 90 MC.printf("sp%d\r", linear_actuator_motor_speed); //retesting linear actuator motor speed 5/11/17
mdavis30 0:645ad86abcba 91 //PC.printf("\nLAMSP: %d\n", linear_actuator_motor_speed);
mdavis30 0:645ad86abcba 92
mdavis30 0:645ad86abcba 93 char str[80];
mdavis30 0:645ad86abcba 94 sprintf(str,"(MBED) Linear Actuator Motor Speed DECREASED\nLA_SP: %d", linear_actuator_motor_speed);
mdavis30 0:645ad86abcba 95
mdavis30 0:645ad86abcba 96 return str;
mdavis30 0:645ad86abcba 97 }
mdavis30 0:645ad86abcba 98
mdavis30 0:645ad86abcba 99 string Battery_Linear_Actuator::Keyboard_RIGHT_BRACKET() //disable linear actuator
mdavis30 0:645ad86abcba 100 { //100 to 30000, INCREASE (100 increments)
mdavis30 0:645ad86abcba 101 if (linear_actuator_motor_speed <= 29900)
mdavis30 0:645ad86abcba 102 linear_actuator_motor_speed += 100;
mdavis30 0:645ad86abcba 103 //PC.printf("\n(MBED) Linear Actuator Motor Speed INCREASED: sp%d\n", linear_actuator_motor_speed);
mdavis30 0:645ad86abcba 104 MC.printf("sp%d\r", linear_actuator_motor_speed); //retesting linear actuator motor speed 5/11/17
mdavis30 0:645ad86abcba 105 //PC.printf("\nLAMSP: %d\n", linear_actuator_motor_speed);
mdavis30 0:645ad86abcba 106
mdavis30 0:645ad86abcba 107 char str[80];
mdavis30 0:645ad86abcba 108 sprintf(str,"(MBED) Linear Actuator Motor Speed INCREASED\nLA_SP: %d", linear_actuator_motor_speed);
mdavis30 0:645ad86abcba 109
mdavis30 0:645ad86abcba 110 return str;
mdavis30 0:645ad86abcba 111 }
mdavis30 0:645ad86abcba 112
mdavis30 0:645ad86abcba 113 //http://stackoverflow.com/questions/8011700/how-do-i-extract-specific-n-bits-of-a-32-bit-unsigned-integer-in-c
mdavis30 0:645ad86abcba 114 unsigned createMask(unsigned a, unsigned b) {
mdavis30 0:645ad86abcba 115 unsigned r = 0;
mdavis30 0:645ad86abcba 116 for (unsigned i=a; i<=b; i++)
mdavis30 0:645ad86abcba 117 r |= 1 << i;
mdavis30 0:645ad86abcba 118
mdavis30 0:645ad86abcba 119 return r;
mdavis30 0:645ad86abcba 120 }
mdavis30 0:645ad86abcba 121
mdavis30 0:645ad86abcba 122 string Battery_Linear_Actuator::Keyboard_A()
mdavis30 0:645ad86abcba 123 {
mdavis30 0:645ad86abcba 124 if (motor_absolute_position >= 0)
mdavis30 0:645ad86abcba 125 {
mdavis30 0:645ad86abcba 126 //explicitly written, check if this will not go past 175000
mdavis30 0:645ad86abcba 127 map_check = motor_absolute_position - linear_actuator_step_size;
mdavis30 0:645ad86abcba 128 if (map_check >= 0)
mdavis30 0:645ad86abcba 129 motor_absolute_position -= linear_actuator_step_size;
mdavis30 0:645ad86abcba 130 }
mdavis30 0:645ad86abcba 131
mdavis30 0:645ad86abcba 132 MC.printf("la%d\r", motor_absolute_position);
mdavis30 0:645ad86abcba 133 MC.printf("m\r");
mdavis30 0:645ad86abcba 134
mdavis30 0:645ad86abcba 135 char position[80];
mdavis30 0:645ad86abcba 136 sprintf(position, "\nA received! (MBED) motor_absolute_position\nMBED_m_a_p: %d\n", motor_absolute_position);
mdavis30 0:645ad86abcba 137 return position;
mdavis30 0:645ad86abcba 138 }
mdavis30 0:645ad86abcba 139
mdavis30 0:645ad86abcba 140 string Battery_Linear_Actuator::Keyboard_D()
mdavis30 0:645ad86abcba 141 {
mdavis30 0:645ad86abcba 142 if (motor_absolute_position <= 175000)
mdavis30 0:645ad86abcba 143 {
mdavis30 0:645ad86abcba 144 //explicitly written, check if this will not go past 175000
mdavis30 0:645ad86abcba 145 map_check = motor_absolute_position + linear_actuator_step_size;
mdavis30 0:645ad86abcba 146 if (map_check <= 175000)
mdavis30 0:645ad86abcba 147 motor_absolute_position += linear_actuator_step_size;
mdavis30 0:645ad86abcba 148 }
mdavis30 0:645ad86abcba 149
mdavis30 0:645ad86abcba 150 MC.printf("la%d\r", motor_absolute_position);
mdavis30 0:645ad86abcba 151 MC.printf("m\r");
mdavis30 0:645ad86abcba 152
mdavis30 0:645ad86abcba 153 char position[80];
mdavis30 0:645ad86abcba 154 sprintf(position, "\nA received! (MBED) motor_absolute_position\nMBED_m_a_p: %d\n", motor_absolute_position);
mdavis30 0:645ad86abcba 155 return position;
mdavis30 0:645ad86abcba 156 }
mdavis30 0:645ad86abcba 157
mdavis30 0:645ad86abcba 158 //void Keyboard_P()
mdavis30 0:645ad86abcba 159 //{
mdavis30 0:645ad86abcba 160 // //Buoyancy Engine gets about 14.5 inches of travel before it hits end of screw (inner piston)
mdavis30 0:645ad86abcba 161 // //max voltage on potentiometer is 3.06 volts
mdavis30 0:645ad86abcba 162 // //min voltage on potentiometer is 0.70 volts
mdavis30 0:645ad86abcba 163 // PC.printf("\nP received!\n");
mdavis30 0:645ad86abcba 164 // float pot_check = potentiometer_analog_in.read() * 3.3;
mdavis30 0:645ad86abcba 165 // float pot_check_inches = 6.144 * pot_check - 4.3;
mdavis30 0:645ad86abcba 166 // float percent_travel_check = (pot_check_inches / 14.5) * 100;
mdavis30 0:645ad86abcba 167 // //PC.printf("(MBED) Potentiometer Reading: %f volts %f inches\n", pot_check, pot_check_inches); // Read the input voltage, represented as a float in the range [0.0, 1.0].
mdavis30 0:645ad86abcba 168 //// PC.printf("Potentiometer Reading: %f volts %f inches %f%c\n ", pot_check, pot_check_inches, percent_travel_check, 37);
mdavis30 0:645ad86abcba 169 //// PC.printf("\n(MBED) Linear Actuator position: %d\n", motor_absolute_position); //wait(0.1); //Linear Actuator position
mdavis30 0:645ad86abcba 170 //
mdavis30 0:645ad86abcba 171 // PC.printf("B_E_POS: %d\n", pot_check); //wait(0.1); //Linear Actuator position
mdavis30 0:645ad86abcba 172 // PC.printf("MBED_m_a_p: %d \n", motor_absolute_position);
mdavis30 0:645ad86abcba 173 //
mdavis30 0:645ad86abcba 174 // MC.printf("pos\r");
mdavis30 0:645ad86abcba 175 // //MC.printf("pos\r"); wait(0.1); //position
mdavis30 0:645ad86abcba 176 // //get the next line from the Faulhaber Motor Controller in MATLAB?
mdavis30 0:645ad86abcba 177 //}
mdavis30 0:645ad86abcba 178
mdavis30 0:645ad86abcba 179 //void BE_POSITION()
mdavis30 0:645ad86abcba 180 //{
mdavis30 0:645ad86abcba 181 // float pot_check = potentiometer_analog_in.read() * 3.3;
mdavis30 0:645ad86abcba 182 // float pot_check_inches = 6.144 * pot_check - 4.3;
mdavis30 0:645ad86abcba 183 // float percent_travel_check = (pot_check_inches / 14.5) * 100;
mdavis30 0:645ad86abcba 184 // PC.printf("B_E_POS: %d\n", pot_check); //wait(0.1); //Linear Actuator position
mdavis30 0:645ad86abcba 185 //}
mdavis30 0:645ad86abcba 186
mdavis30 0:645ad86abcba 187 //
mdavis30 0:645ad86abcba 188 //char ioc_char; //linear actuator i/o configuration
mdavis30 0:645ad86abcba 189 //int ioc_array[28]; //http://stackoverflow.com/questions/439573/how-to-convert-a-single-char-into-an-int