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: Classic_PID iC_MU mbed-rtos mbed
ServiceKeyboard.cpp@4:4dafa4113982, 2015-06-25 (annotated)
- Committer:
- acodd
- Date:
- Thu Jun 25 09:41:26 2015 +0000
- Revision:
- 4:4dafa4113982
- Parent:
- 3:f8a5c1cee1fa
Test Harness for a single axis
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| ms523 | 0:7ce0bc67f60f | 1 | #include "mbed.h" |
| ms523 | 0:7ce0bc67f60f | 2 | #include "iC_MU.h" |
| ms523 | 0:7ce0bc67f60f | 3 | #include "rtos.h" |
| ms523 | 0:7ce0bc67f60f | 4 | #include "Classic_PID.h" |
| ms523 | 0:7ce0bc67f60f | 5 | |
| ms523 | 0:7ce0bc67f60f | 6 | extern Serial pc; |
| ms523 | 0:7ce0bc67f60f | 7 | extern Classic_PID PanVelocityPID; |
| ms523 | 0:7ce0bc67f60f | 8 | extern Classic_PID TiltVelocityPID; |
| acodd | 2:dc684c402296 | 9 | void Profile(void); |
| acodd | 2:dc684c402296 | 10 | extern float Demand_Count_Rate; |
| ms523 | 0:7ce0bc67f60f | 11 | |
| ms523 | 0:7ce0bc67f60f | 12 | extern bool joystick; |
| acodd | 2:dc684c402296 | 13 | extern bool scoping; |
| acodd | 2:dc684c402296 | 14 | |
| acodd | 2:dc684c402296 | 15 | extern float fade_tilt; |
| acodd | 2:dc684c402296 | 16 | extern float fade_time; |
| acodd | 2:dc684c402296 | 17 | extern float D; |
| acodd | 4:4dafa4113982 | 18 | extern float T; |
| acodd | 4:4dafa4113982 | 19 | extern float ts; |
| acodd | 2:dc684c402296 | 20 | extern int DoMove; |
| acodd | 2:dc684c402296 | 21 | extern float T_Position; |
| acodd | 2:dc684c402296 | 22 | extern float T_Kp; |
| acodd | 2:dc684c402296 | 23 | extern float Vff; |
| acodd | 2:dc684c402296 | 24 | float setting; |
| acodd | 2:dc684c402296 | 25 | extern float Time; |
| acodd | 2:dc684c402296 | 26 | |
| acodd | 2:dc684c402296 | 27 | extern float Joy_Zoom; |
| ms523 | 0:7ce0bc67f60f | 28 | |
| acodd | 4:4dafa4113982 | 29 | extern double drive; |
| acodd | 4:4dafa4113982 | 30 | |
| ms523 | 0:7ce0bc67f60f | 31 | // Returns the new set point entered via the keyboard |
| ms523 | 0:7ce0bc67f60f | 32 | int ServiceKeyboard () |
| ms523 | 0:7ce0bc67f60f | 33 | { |
| ms523 | 0:7ce0bc67f60f | 34 | int key; // The keypress by the user |
| ms523 | 0:7ce0bc67f60f | 35 | int value = 0; // The variable to return |
| ms523 | 0:7ce0bc67f60f | 36 | |
| ms523 | 0:7ce0bc67f60f | 37 | key = pc.getc(); // Read the intial keypress |
| ms523 | 0:7ce0bc67f60f | 38 | |
| acodd | 2:dc684c402296 | 39 | switch (key) { |
| acodd | 2:dc684c402296 | 40 | // List keypresses used: |
| acodd | 2:dc684c402296 | 41 | case 'q': |
| acodd | 2:dc684c402296 | 42 | pc.printf("\n\r Toggle joystick = j \n\r Scope = s \n\r Fade = f \n\r Stop = c \n\r Set POS gains k, v, \n\r Set Vel Vff, kp: l, m \n\r Set fade time: t \n\r Save Shot = 1"); |
| acodd | 4:4dafa4113982 | 43 | pc.printf("\n\r Zoom Value (1-10) = z \n\r Drive const speed = d"); |
| acodd | 2:dc684c402296 | 44 | break; |
| acodd | 2:dc684c402296 | 45 | // Save a shot position: |
| acodd | 2:dc684c402296 | 46 | case '1': |
| acodd | 2:dc684c402296 | 47 | |
| acodd | 2:dc684c402296 | 48 | fade_tilt = T_Position; |
| acodd | 2:dc684c402296 | 49 | pc.printf("\n\r Saving this postion as %f", fade_tilt); |
| acodd | 2:dc684c402296 | 50 | break; |
| acodd | 2:dc684c402296 | 51 | // Switch Joystick Mode on and off |
| acodd | 2:dc684c402296 | 52 | case 'j': |
| acodd | 2:dc684c402296 | 53 | joystick = !joystick; |
| acodd | 2:dc684c402296 | 54 | if(joystick) { |
| acodd | 2:dc684c402296 | 55 | pc.printf("\n\r Under Joystick Control"); |
| acodd | 2:dc684c402296 | 56 | } else { |
| acodd | 2:dc684c402296 | 57 | // Stop both axes |
| acodd | 2:dc684c402296 | 58 | //PanVelocityPID.setSetPoint(0); |
| acodd | 2:dc684c402296 | 59 | //TiltVelocityPID.setSetPoint(0); |
| acodd | 3:f8a5c1cee1fa | 60 | pc.printf("\n\r Under Full Profiler Control"); |
| acodd | 2:dc684c402296 | 61 | pc.printf("\n\r"); |
| ms523 | 0:7ce0bc67f60f | 62 | } |
| acodd | 2:dc684c402296 | 63 | break; |
| acodd | 2:dc684c402296 | 64 | // Turn on Scope Tool: |
| acodd | 2:dc684c402296 | 65 | case 's': |
| acodd | 2:dc684c402296 | 66 | if (!scoping) { |
| acodd | 2:dc684c402296 | 67 | Time = 0; |
| acodd | 4:4dafa4113982 | 68 | pc.printf("\n\r Time, Tilt_JoyStickDem, P_Error, T_Position, P, Motor_Speed, Demand_Speed"); |
| acodd | 4:4dafa4113982 | 69 | |
| acodd | 4:4dafa4113982 | 70 | scoping = true; |
| acodd | 2:dc684c402296 | 71 | } else { |
| acodd | 2:dc684c402296 | 72 | scoping = false; |
| acodd | 2:dc684c402296 | 73 | } |
| acodd | 2:dc684c402296 | 74 | |
| acodd | 2:dc684c402296 | 75 | break; |
| acodd | 2:dc684c402296 | 76 | // Calling A Fade: |
| acodd | 2:dc684c402296 | 77 | case 'f': |
| acodd | 2:dc684c402296 | 78 | if (DoMove == 0) { |
| acodd | 4:4dafa4113982 | 79 | //fade_time = 15; |
| acodd | 2:dc684c402296 | 80 | Profile(); |
| acodd | 4:4dafa4113982 | 81 | pc.printf("\n\r Fade Distance: %f", D); |
| acodd | 4:4dafa4113982 | 82 | pc.printf("\n\r Fade Time = %f, Ramp segment = %f",T, ts); |
| acodd | 2:dc684c402296 | 83 | DoMove = 1; |
| acodd | 2:dc684c402296 | 84 | } |
| acodd | 2:dc684c402296 | 85 | break; |
| acodd | 2:dc684c402296 | 86 | // We are going to set the fade time... |
| acodd | 2:dc684c402296 | 87 | case 't': |
| acodd | 2:dc684c402296 | 88 | pc.printf("\n\r New Fade Time: "); |
| acodd | 2:dc684c402296 | 89 | key = pc.getc(); |
| ms523 | 0:7ce0bc67f60f | 90 | do { |
| ms523 | 0:7ce0bc67f60f | 91 | key = pc.getc(); // Wait for a keypress |
| ms523 | 0:7ce0bc67f60f | 92 | if(key >= '0' && key <= '9') { // Check it is a number |
| ms523 | 0:7ce0bc67f60f | 93 | value *= 10; // Index the old number |
| ms523 | 0:7ce0bc67f60f | 94 | value += (key - '0'); // Add on the new number |
| ms523 | 0:7ce0bc67f60f | 95 | pc.printf("%c",key); // Display the new number |
| ms523 | 0:7ce0bc67f60f | 96 | } |
| ms523 | 0:7ce0bc67f60f | 97 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 98 | setting = value; |
| acodd | 2:dc684c402296 | 99 | fade_time = (setting); |
| acodd | 2:dc684c402296 | 100 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 101 | break; |
| acodd | 2:dc684c402296 | 102 | // Stop a fade |
| acodd | 2:dc684c402296 | 103 | case 'c': |
| acodd | 2:dc684c402296 | 104 | if (DoMove == 1) { |
| acodd | 2:dc684c402296 | 105 | pc.printf("\n\r Fade Stop"); |
| acodd | 2:dc684c402296 | 106 | DoMove = 0; |
| acodd | 2:dc684c402296 | 107 | //TiltVelocityPID.setSetPoint(0); |
| acodd | 2:dc684c402296 | 108 | } |
| acodd | 2:dc684c402296 | 109 | break; |
| acodd | 2:dc684c402296 | 110 | // Set Tilt Kp |
| acodd | 2:dc684c402296 | 111 | case 'k': |
| acodd | 2:dc684c402296 | 112 | pc.printf("\n\r New Tilt Pos Kp (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 113 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 114 | do { |
| acodd | 2:dc684c402296 | 115 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 116 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 117 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 118 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 119 | pc.printf("%c",key); // Display the new number |
| ms523 | 0:7ce0bc67f60f | 120 | } |
| acodd | 2:dc684c402296 | 121 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 122 | setting = value; |
| acodd | 2:dc684c402296 | 123 | T_Kp = (setting/100); |
| acodd | 2:dc684c402296 | 124 | //TiltVelocityPID.setKp(value); |
| acodd | 2:dc684c402296 | 125 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 126 | break; |
| acodd | 2:dc684c402296 | 127 | // We are going to set Pos Feedforward gain for tilt... |
| acodd | 2:dc684c402296 | 128 | case 'v': |
| acodd | 2:dc684c402296 | 129 | pc.printf("\n\r New Tilt Pos Vff (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 130 | key = pc.getc(); |
| ms523 | 0:7ce0bc67f60f | 131 | do { |
| ms523 | 0:7ce0bc67f60f | 132 | key = pc.getc(); // Wait for a keypress |
| ms523 | 0:7ce0bc67f60f | 133 | if(key >= '0' && key <= '9') { // Check it is a number |
| ms523 | 0:7ce0bc67f60f | 134 | value *= 10; // Index the old number |
| ms523 | 0:7ce0bc67f60f | 135 | value += (key - '0'); // Add on the new number |
| ms523 | 0:7ce0bc67f60f | 136 | pc.printf("%c",key); // Display the new number |
| ms523 | 0:7ce0bc67f60f | 137 | } |
| ms523 | 0:7ce0bc67f60f | 138 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 139 | setting = value; |
| acodd | 2:dc684c402296 | 140 | Vff = (setting/100); |
| acodd | 2:dc684c402296 | 141 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 142 | break; |
| acodd | 2:dc684c402296 | 143 | // We are going to set Kvelff gain for tilt... |
| acodd | 2:dc684c402296 | 144 | case 'l': |
| acodd | 2:dc684c402296 | 145 | pc.printf("\n\r New Tilt Velocity Vff (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 146 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 147 | do { |
| acodd | 2:dc684c402296 | 148 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 149 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 150 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 151 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 152 | pc.printf("%c",key); // Display the new number |
| acodd | 2:dc684c402296 | 153 | } |
| acodd | 2:dc684c402296 | 154 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 155 | setting = value; |
| acodd | 2:dc684c402296 | 156 | TiltVelocityPID.setKvelff(setting/100); |
| acodd | 2:dc684c402296 | 157 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 158 | break; |
| acodd | 2:dc684c402296 | 159 | // Set Tilt Velocity Kp |
| acodd | 2:dc684c402296 | 160 | case 'm': |
| acodd | 2:dc684c402296 | 161 | pc.printf("\n\r New Tilt Velocity Kp (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 162 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 163 | do { |
| acodd | 2:dc684c402296 | 164 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 165 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 166 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 167 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 168 | pc.printf("%c",key); // Display the new number |
| acodd | 2:dc684c402296 | 169 | } |
| acodd | 2:dc684c402296 | 170 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 171 | setting = value; |
| acodd | 2:dc684c402296 | 172 | TiltVelocityPID.setKp(setting/100); |
| acodd | 2:dc684c402296 | 173 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 174 | break; |
| acodd | 2:dc684c402296 | 175 | // Set Zoom level for Zoom proportional |
| acodd | 2:dc684c402296 | 176 | case 'z': |
| acodd | 2:dc684c402296 | 177 | pc.printf("\n\r Set Zoom Scalar Low 1-9 High): "); |
| acodd | 2:dc684c402296 | 178 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 179 | do { |
| acodd | 2:dc684c402296 | 180 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 181 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 182 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 183 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 184 | pc.printf("%c",key); // Display the new number |
| acodd | 2:dc684c402296 | 185 | } |
| acodd | 2:dc684c402296 | 186 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 187 | setting = value; |
| acodd | 2:dc684c402296 | 188 | Joy_Zoom = (setting); |
| acodd | 2:dc684c402296 | 189 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 190 | break; |
| acodd | 4:4dafa4113982 | 191 | // We are going to set Pos Feedforward gain for tilt... |
| acodd | 4:4dafa4113982 | 192 | case 'd': |
| acodd | 4:4dafa4113982 | 193 | pc.printf("\n\r Drive const speed (Multiply by 100): "); |
| acodd | 4:4dafa4113982 | 194 | key = pc.getc(); |
| acodd | 4:4dafa4113982 | 195 | do { |
| acodd | 4:4dafa4113982 | 196 | key = pc.getc(); // Wait for a keypress |
| acodd | 4:4dafa4113982 | 197 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 4:4dafa4113982 | 198 | value *= 10; // Index the old number |
| acodd | 4:4dafa4113982 | 199 | value += (key - '0'); // Add on the new number |
| acodd | 4:4dafa4113982 | 200 | pc.printf("%c",key); // Display the new number |
| acodd | 4:4dafa4113982 | 201 | } |
| acodd | 4:4dafa4113982 | 202 | } while(key != 0x0D); |
| acodd | 4:4dafa4113982 | 203 | setting = value; |
| acodd | 4:4dafa4113982 | 204 | drive = setting; |
| acodd | 4:4dafa4113982 | 205 | pc.printf("\n\r New Speed is = %f", (drive/100)); |
| acodd | 4:4dafa4113982 | 206 | break; |
| ms523 | 0:7ce0bc67f60f | 207 | } |
| ms523 | 0:7ce0bc67f60f | 208 | return(1); |
| acodd | 2:dc684c402296 | 209 | } |
| acodd | 2:dc684c402296 | 210 | |
| acodd | 2:dc684c402296 | 211 | |
| acodd | 2:dc684c402296 | 212 | |
| acodd | 2:dc684c402296 | 213 | |
| acodd | 3:f8a5c1cee1fa | 214 | |
| acodd | 4:4dafa4113982 | 215 |