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.
Dependents: 7_21_17_FSG 7_26_17_FSG
Fork of Battery_Linear_Actuator_ by
Battery_Linear_Actuator.cpp@0:645ad86abcba, 2017-06-09 (annotated)
- Committer:
- mdavis30
- Date:
- Fri Jun 09 17:32:14 2017 +0000
- Revision:
- 0:645ad86abcba
- Child:
- 1:ca2454ef80d9
Who changed what in which revision?
| User | Revision | Line number | New 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 |
