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@2:dc684c402296, 2015-05-27 (annotated)
- Committer:
- acodd
- Date:
- Wed May 27 07:13:54 2015 +0000
- Revision:
- 2:dc684c402296
- Parent:
- 1:1ad84260ff59
- Child:
- 3:f8a5c1cee1fa
First version of a full control loop for the T3 head
;
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 | 2:dc684c402296 | 18 | extern int DoMove; |
| acodd | 2:dc684c402296 | 19 | extern float T_Position; |
| acodd | 2:dc684c402296 | 20 | extern float T_Kp; |
| acodd | 2:dc684c402296 | 21 | extern float Vff; |
| acodd | 2:dc684c402296 | 22 | float setting; |
| acodd | 2:dc684c402296 | 23 | extern float Time; |
| acodd | 2:dc684c402296 | 24 | |
| acodd | 2:dc684c402296 | 25 | extern float Joy_Zoom; |
| ms523 | 0:7ce0bc67f60f | 26 | |
| ms523 | 0:7ce0bc67f60f | 27 | // Returns the new set point entered via the keyboard |
| ms523 | 0:7ce0bc67f60f | 28 | int ServiceKeyboard () |
| ms523 | 0:7ce0bc67f60f | 29 | { |
| ms523 | 0:7ce0bc67f60f | 30 | int key; // The keypress by the user |
| ms523 | 0:7ce0bc67f60f | 31 | int value = 0; // The variable to return |
| ms523 | 0:7ce0bc67f60f | 32 | |
| ms523 | 0:7ce0bc67f60f | 33 | key = pc.getc(); // Read the intial keypress |
| ms523 | 0:7ce0bc67f60f | 34 | |
| acodd | 2:dc684c402296 | 35 | switch (key) { |
| acodd | 2:dc684c402296 | 36 | // List keypresses used: |
| acodd | 2:dc684c402296 | 37 | case 'q': |
| acodd | 2:dc684c402296 | 38 | 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 | 2:dc684c402296 | 39 | pc.printf("\n\r Zoom Value (1-10) = z"); |
| acodd | 2:dc684c402296 | 40 | break; |
| acodd | 2:dc684c402296 | 41 | // Save a shot position: |
| acodd | 2:dc684c402296 | 42 | case '1': |
| acodd | 2:dc684c402296 | 43 | |
| acodd | 2:dc684c402296 | 44 | fade_tilt = T_Position; |
| acodd | 2:dc684c402296 | 45 | pc.printf("\n\r Saving this postion as %f", fade_tilt); |
| acodd | 2:dc684c402296 | 46 | break; |
| acodd | 2:dc684c402296 | 47 | // Switch Joystick Mode on and off |
| acodd | 2:dc684c402296 | 48 | case 'j': |
| acodd | 2:dc684c402296 | 49 | joystick = !joystick; |
| acodd | 2:dc684c402296 | 50 | if(joystick) { |
| acodd | 2:dc684c402296 | 51 | pc.printf("\n\r Under Joystick Control"); |
| acodd | 2:dc684c402296 | 52 | } else { |
| acodd | 2:dc684c402296 | 53 | // Stop both axes |
| acodd | 2:dc684c402296 | 54 | //PanVelocityPID.setSetPoint(0); |
| acodd | 2:dc684c402296 | 55 | //TiltVelocityPID.setSetPoint(0); |
| acodd | 2:dc684c402296 | 56 | pc.printf("\n\r Under PC Control"); |
| acodd | 2:dc684c402296 | 57 | pc.printf("\n\r"); |
| ms523 | 0:7ce0bc67f60f | 58 | } |
| acodd | 2:dc684c402296 | 59 | break; |
| acodd | 2:dc684c402296 | 60 | // Turn on Scope Tool: |
| acodd | 2:dc684c402296 | 61 | case 's': |
| acodd | 2:dc684c402296 | 62 | if (!scoping) { |
| acodd | 2:dc684c402296 | 63 | Time = 0; |
| acodd | 2:dc684c402296 | 64 | pc.printf("\n\r Time, Tilt_JoyStickDem, P_Error, T_Position, P"); |
| acodd | 2:dc684c402296 | 65 | scoping = true; |
| acodd | 2:dc684c402296 | 66 | } else { |
| acodd | 2:dc684c402296 | 67 | scoping = false; |
| acodd | 2:dc684c402296 | 68 | } |
| acodd | 2:dc684c402296 | 69 | |
| acodd | 2:dc684c402296 | 70 | break; |
| acodd | 2:dc684c402296 | 71 | // Calling A Fade: |
| acodd | 2:dc684c402296 | 72 | case 'f': |
| acodd | 2:dc684c402296 | 73 | if (DoMove == 0) { |
| acodd | 2:dc684c402296 | 74 | fade_time = 15; |
| acodd | 2:dc684c402296 | 75 | Profile(); |
| acodd | 2:dc684c402296 | 76 | pc.printf("\n\r Fade Distance: %f", D); |
| acodd | 2:dc684c402296 | 77 | DoMove = 1; |
| acodd | 2:dc684c402296 | 78 | } |
| acodd | 2:dc684c402296 | 79 | break; |
| acodd | 2:dc684c402296 | 80 | // We are going to set the fade time... |
| acodd | 2:dc684c402296 | 81 | case 't': |
| acodd | 2:dc684c402296 | 82 | pc.printf("\n\r New Fade Time: "); |
| acodd | 2:dc684c402296 | 83 | key = pc.getc(); |
| ms523 | 0:7ce0bc67f60f | 84 | do { |
| ms523 | 0:7ce0bc67f60f | 85 | key = pc.getc(); // Wait for a keypress |
| ms523 | 0:7ce0bc67f60f | 86 | if(key >= '0' && key <= '9') { // Check it is a number |
| ms523 | 0:7ce0bc67f60f | 87 | value *= 10; // Index the old number |
| ms523 | 0:7ce0bc67f60f | 88 | value += (key - '0'); // Add on the new number |
| ms523 | 0:7ce0bc67f60f | 89 | pc.printf("%c",key); // Display the new number |
| ms523 | 0:7ce0bc67f60f | 90 | } |
| ms523 | 0:7ce0bc67f60f | 91 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 92 | setting = value; |
| acodd | 2:dc684c402296 | 93 | fade_time = (setting); |
| acodd | 2:dc684c402296 | 94 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 95 | break; |
| acodd | 2:dc684c402296 | 96 | // Stop a fade |
| acodd | 2:dc684c402296 | 97 | case 'c': |
| acodd | 2:dc684c402296 | 98 | if (DoMove == 1) { |
| acodd | 2:dc684c402296 | 99 | pc.printf("\n\r Fade Stop"); |
| acodd | 2:dc684c402296 | 100 | DoMove = 0; |
| acodd | 2:dc684c402296 | 101 | //TiltVelocityPID.setSetPoint(0); |
| acodd | 2:dc684c402296 | 102 | } |
| acodd | 2:dc684c402296 | 103 | break; |
| acodd | 2:dc684c402296 | 104 | // Set Tilt Kp |
| acodd | 2:dc684c402296 | 105 | case 'k': |
| acodd | 2:dc684c402296 | 106 | pc.printf("\n\r New Tilt Pos Kp (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 107 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 108 | do { |
| acodd | 2:dc684c402296 | 109 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 110 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 111 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 112 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 113 | pc.printf("%c",key); // Display the new number |
| ms523 | 0:7ce0bc67f60f | 114 | } |
| acodd | 2:dc684c402296 | 115 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 116 | setting = value; |
| acodd | 2:dc684c402296 | 117 | T_Kp = (setting/100); |
| acodd | 2:dc684c402296 | 118 | //TiltVelocityPID.setKp(value); |
| acodd | 2:dc684c402296 | 119 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 120 | break; |
| acodd | 2:dc684c402296 | 121 | // We are going to set Pos Feedforward gain for tilt... |
| acodd | 2:dc684c402296 | 122 | case 'v': |
| acodd | 2:dc684c402296 | 123 | pc.printf("\n\r New Tilt Pos Vff (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 124 | key = pc.getc(); |
| ms523 | 0:7ce0bc67f60f | 125 | do { |
| ms523 | 0:7ce0bc67f60f | 126 | key = pc.getc(); // Wait for a keypress |
| ms523 | 0:7ce0bc67f60f | 127 | if(key >= '0' && key <= '9') { // Check it is a number |
| ms523 | 0:7ce0bc67f60f | 128 | value *= 10; // Index the old number |
| ms523 | 0:7ce0bc67f60f | 129 | value += (key - '0'); // Add on the new number |
| ms523 | 0:7ce0bc67f60f | 130 | pc.printf("%c",key); // Display the new number |
| ms523 | 0:7ce0bc67f60f | 131 | } |
| ms523 | 0:7ce0bc67f60f | 132 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 133 | setting = value; |
| acodd | 2:dc684c402296 | 134 | Vff = (setting/100); |
| acodd | 2:dc684c402296 | 135 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 136 | break; |
| acodd | 2:dc684c402296 | 137 | // We are going to set Kvelff gain for tilt... |
| acodd | 2:dc684c402296 | 138 | case 'l': |
| acodd | 2:dc684c402296 | 139 | pc.printf("\n\r New Tilt Velocity Vff (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 140 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 141 | do { |
| acodd | 2:dc684c402296 | 142 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 143 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 144 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 145 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 146 | pc.printf("%c",key); // Display the new number |
| acodd | 2:dc684c402296 | 147 | } |
| acodd | 2:dc684c402296 | 148 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 149 | setting = value; |
| acodd | 2:dc684c402296 | 150 | TiltVelocityPID.setKvelff(setting/100); |
| acodd | 2:dc684c402296 | 151 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 152 | break; |
| acodd | 2:dc684c402296 | 153 | // Set Tilt Velocity Kp |
| acodd | 2:dc684c402296 | 154 | case 'm': |
| acodd | 2:dc684c402296 | 155 | pc.printf("\n\r New Tilt Velocity Kp (Multiply by 100): "); |
| acodd | 2:dc684c402296 | 156 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 157 | do { |
| acodd | 2:dc684c402296 | 158 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 159 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 160 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 161 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 162 | pc.printf("%c",key); // Display the new number |
| acodd | 2:dc684c402296 | 163 | } |
| acodd | 2:dc684c402296 | 164 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 165 | setting = value; |
| acodd | 2:dc684c402296 | 166 | TiltVelocityPID.setKp(setting/100); |
| acodd | 2:dc684c402296 | 167 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 168 | break; |
| acodd | 2:dc684c402296 | 169 | // Set Zoom level for Zoom proportional |
| acodd | 2:dc684c402296 | 170 | case 'z': |
| acodd | 2:dc684c402296 | 171 | pc.printf("\n\r Set Zoom Scalar Low 1-9 High): "); |
| acodd | 2:dc684c402296 | 172 | key = pc.getc(); |
| acodd | 2:dc684c402296 | 173 | do { |
| acodd | 2:dc684c402296 | 174 | key = pc.getc(); // Wait for a keypress |
| acodd | 2:dc684c402296 | 175 | if(key >= '0' && key <= '9') { // Check it is a number |
| acodd | 2:dc684c402296 | 176 | value *= 10; // Index the old number |
| acodd | 2:dc684c402296 | 177 | value += (key - '0'); // Add on the new number |
| acodd | 2:dc684c402296 | 178 | pc.printf("%c",key); // Display the new number |
| acodd | 2:dc684c402296 | 179 | } |
| acodd | 2:dc684c402296 | 180 | } while(key != 0x0D); |
| acodd | 2:dc684c402296 | 181 | setting = value; |
| acodd | 2:dc684c402296 | 182 | Joy_Zoom = (setting); |
| acodd | 2:dc684c402296 | 183 | pc.printf("\n\r"); |
| acodd | 2:dc684c402296 | 184 | break; |
| ms523 | 0:7ce0bc67f60f | 185 | } |
| ms523 | 0:7ce0bc67f60f | 186 | return(1); |
| acodd | 2:dc684c402296 | 187 | } |
| acodd | 2:dc684c402296 | 188 | |
| acodd | 2:dc684c402296 | 189 | |
| acodd | 2:dc684c402296 | 190 | |
| acodd | 2:dc684c402296 | 191 |