A twist to the computer that landed man on the moon. More information can be found at http://hackaday.io/project/294-Open-Source-DSKY
Dependencies: DS1302 keypad mbed
main.cpp@6:3019f2f7e9d4, 2014-08-20 (annotated)
- Committer:
- VivaPenguinos
- Date:
- Wed Aug 20 00:44:49 2014 +0000
- Revision:
- 6:3019f2f7e9d4
- Parent:
- 5:5f08974ef8bb
- Child:
- 7:3d06d866878c
Experimental Build. Entered in for HAD prize. NO_Light() improved, P00 Improvements, and P06 Completed. Contains Software Licenses in Comments.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
VivaPenguinos | 0:3ff58b093415 | 1 | /* Introduction |
VivaPenguinos | 2:aee9ee1296cd | 2 | MBED DSKY |
VivaPenguinos | 0:3ff58b093415 | 3 | This is a personal project used developed by penguinos to mix old school technology with a modern twist. |
VivaPenguinos | 6:3019f2f7e9d4 | 4 | Version 0.06: August. 15 2014 |
VivaPenguinos | 6:3019f2f7e9d4 | 5 | NO_Light() function has now case 8 for Indicator lights |
VivaPenguinos | 6:3019f2f7e9d4 | 6 | - P00 Improvements |
VivaPenguinos | 6:3019f2f7e9d4 | 7 | - P06 CMC Power Down Completed |
VivaPenguinos | 6:3019f2f7e9d4 | 8 | - CMC_Powerdown() Added |
VivaPenguinos | 6:3019f2f7e9d4 | 9 | - CMC_PowerInput() Added |
VivaPenguinos | 0:3ff58b093415 | 10 | Notable Credits: |
VivaPenguinos | 0:3ff58b093415 | 11 | NASA! - Release of technical documentations regarding the AGC and DSKY |
VivaPenguinos | 0:3ff58b093415 | 12 | Ron Burkley and Contributers of "Virtual AGC — AGS — LVDC — Gemini" - Providing Technical documentations, Source Code, explanations, |
VivaPenguinos | 0:3ff58b093415 | 13 | and refrences on other sites to make this project successful |
VivaPenguinos | 4:99535d368a9f | 14 | Warning: This may contain author's crude language, and random thoughts. |
VivaPenguinos | 4:99535d368a9f | 15 | |
VivaPenguinos | 6:3019f2f7e9d4 | 16 | Software Licenses: |
VivaPenguinos | 6:3019f2f7e9d4 | 17 | Keypad.h - Author Copyrighted 2012 but it is under the Open Source License Agreement. |
VivaPenguinos | 6:3019f2f7e9d4 | 18 | Source: http://mbed.org/cookbook/Keypad |
VivaPenguinos | 6:3019f2f7e9d4 | 19 | DS1302.h - Open Source License |
VivaPenguinos | 6:3019f2f7e9d4 | 20 | Source: http://mbed.org/components/DS1302-Timekeeping-Chip/ |
VivaPenguinos | 6:3019f2f7e9d4 | 21 | |
VivaPenguinos | 4:99535d368a9f | 22 | Pin Usage: |
VivaPenguinos | 4:99535d368a9f | 23 | |
VivaPenguinos | 3:29cff763ae36 | 24 | Real Time Clock |
VivaPenguinos | 3:29cff763ae36 | 25 | SCLK PTC5 |
VivaPenguinos | 3:29cff763ae36 | 26 | IO PTC4 |
VivaPenguinos | 3:29cff763ae36 | 27 | CE PTC3 |
VivaPenguinos | 3:29cff763ae36 | 28 | Keypad |
VivaPenguinos | 3:29cff763ae36 | 29 | Row0 PTD4 |
VivaPenguinos | 3:29cff763ae36 | 30 | Row1 PTA12 |
VivaPenguinos | 3:29cff763ae36 | 31 | Row2 PTD3 |
VivaPenguinos | 3:29cff763ae36 | 32 | Row3 PTA5 |
VivaPenguinos | 3:29cff763ae36 | 33 | Col1 PTA13 |
VivaPenguinos | 3:29cff763ae36 | 34 | Col2 PTD5 |
VivaPenguinos | 3:29cff763ae36 | 35 | Col3 PTD0 |
VivaPenguinos | 3:29cff763ae36 | 36 | Col4 PTD2 |
VivaPenguinos | 3:29cff763ae36 | 37 | Shift Registers |
VivaPenguinos | 3:29cff763ae36 | 38 | Latch PTC6 |
VivaPenguinos | 3:29cff763ae36 | 39 | Clock PTC10 |
VivaPenguinos | 3:29cff763ae36 | 40 | Data PTC11 |
VivaPenguinos | 5:5f08974ef8bb | 41 | Statues Indicator |
VivaPenguinos | 5:5f08974ef8bb | 42 | Uplink ACTY PTE5 |
VivaPenguinos | 5:5f08974ef8bb | 43 | NO ATT PTE4 |
VivaPenguinos | 5:5f08974ef8bb | 44 | STBY PTE3 |
VivaPenguinos | 5:5f08974ef8bb | 45 | KEY REL PTE2 |
VivaPenguinos | 5:5f08974ef8bb | 46 | OPP ERR PTB11 |
VivaPenguinos | 5:5f08974ef8bb | 47 | TEMP PTB10 |
VivaPenguinos | 5:5f08974ef8bb | 48 | GIMBAL LOCK PTB9 |
VivaPenguinos | 5:5f08974ef8bb | 49 | PROG PTB8 |
VivaPenguinos | 5:5f08974ef8bb | 50 | RESTART PTC12 |
VivaPenguinos | 5:5f08974ef8bb | 51 | TRACKER PTC13 |
VivaPenguinos | 5:5f08974ef8bb | 52 | R1+ PTC16 |
VivaPenguinos | 5:5f08974ef8bb | 53 | R2+ PTC17 |
VivaPenguinos | 5:5f08974ef8bb | 54 | R3+ PTA16 |
VivaPenguinos | 5:5f08974ef8bb | 55 | R1- PTA17 |
VivaPenguinos | 5:5f08974ef8bb | 56 | R2- PTE31 |
VivaPenguinos | 5:5f08974ef8bb | 57 | R3- PTC6 |
VivaPenguinos | 5:5f08974ef8bb | 58 | COMP ACTY PTC7 |
VivaPenguinos | 6:3019f2f7e9d4 | 59 | |
VivaPenguinos | 6:3019f2f7e9d4 | 60 | Push Button |
VivaPenguinos | 6:3019f2f7e9d4 | 61 | PRO_BUTT PTB1 |
VivaPenguinos | 6:3019f2f7e9d4 | 62 | CLR_BUTT PTB2 |
VivaPenguinos | 6:3019f2f7e9d4 | 63 | KEYREL_BUTT PTB3 |
VivaPenguinos | 4:99535d368a9f | 64 | |
VivaPenguinos | 4:99535d368a9f | 65 | Shift Registers Data: |
VivaPenguinos | 4:99535d368a9f | 66 | Because the project contains 11 shift registers, All data must be properly formatted before shifting out. each shift register controls 2 7 segments. |
VivaPenguinos | 4:99535d368a9f | 67 | R1_A [P_A | P_B] |
VivaPenguinos | 4:99535d368a9f | 68 | R1_B |
VivaPenguinos | 4:99535d368a9f | 69 | R1_C [V_A | V_B] [N_A | N_B] |
VivaPenguinos | 4:99535d368a9f | 70 | R1_D |
VivaPenguinos | 4:99535d368a9f | 71 | R1_E [R3_E | R3_D | R3_C | R3_B | R3_A] |
VivaPenguinos | 4:99535d368a9f | 72 | R2_A |
VivaPenguinos | 4:99535d368a9f | 73 | R2_B [R2_E | R2_D | R2_C | R2_B | R2_A] |
VivaPenguinos | 4:99535d368a9f | 74 | R2_C |
VivaPenguinos | 4:99535d368a9f | 75 | R2_D [R1_E | R1_D | R1_C | R1_B | R1_A] |
VivaPenguinos | 4:99535d368a9f | 76 | R2_E |
VivaPenguinos | 4:99535d368a9f | 77 | R3_A |
VivaPenguinos | 4:99535d368a9f | 78 | R3_B |
VivaPenguinos | 4:99535d368a9f | 79 | R3_C |
VivaPenguinos | 4:99535d368a9f | 80 | R3_D |
VivaPenguinos | 4:99535d368a9f | 81 | R3_E |
VivaPenguinos | 4:99535d368a9f | 82 | V_A |
VivaPenguinos | 4:99535d368a9f | 83 | V_B |
VivaPenguinos | 4:99535d368a9f | 84 | N_A |
VivaPenguinos | 4:99535d368a9f | 85 | N_B |
VivaPenguinos | 4:99535d368a9f | 86 | P_A |
VivaPenguinos | 4:99535d368a9f | 87 | P_B |
VivaPenguinos | 6:3019f2f7e9d4 | 88 | |
VivaPenguinos | 6:3019f2f7e9d4 | 89 | Program Added: |
VivaPenguinos | 6:3019f2f7e9d4 | 90 | P01 - PRELAUNCH OR SERVICE - INITIALIZATION PROGRAM |
VivaPenguinos | 6:3019f2f7e9d4 | 91 | P02 - PRELAUNCH OR SERVICE - GYROCOMPASSING PROGRAM |
VivaPenguinos | 6:3019f2f7e9d4 | 92 | |
VivaPenguinos | 6:3019f2f7e9d4 | 93 | Program In Progress (Not completed) |
VivaPenguinos | 6:3019f2f7e9d4 | 94 | P00 - CMC IDLING PROGRAM |
VivaPenguinos | 6:3019f2f7e9d4 | 95 | P06 - CMC POWER DOWN PROGRAM |
VivaPenguinos | 3:29cff763ae36 | 96 | */ |
VivaPenguinos | 3:29cff763ae36 | 97 | |
VivaPenguinos | 3:29cff763ae36 | 98 | // For RTC |
VivaPenguinos | 3:29cff763ae36 | 99 | #define SCLK PTC5 |
VivaPenguinos | 3:29cff763ae36 | 100 | #define IO PTC4 |
VivaPenguinos | 3:29cff763ae36 | 101 | #define CE PTC3 |
VivaPenguinos | 3:29cff763ae36 | 102 | |
VivaPenguinos | 3:29cff763ae36 | 103 | // Comment Line if DS1302 is already running |
VivaPenguinos | 3:29cff763ae36 | 104 | #define INITIAL_RUN |
VivaPenguinos | 3:29cff763ae36 | 105 | |
VivaPenguinos | 0:3ff58b093415 | 106 | using namespace std; |
VivaPenguinos | 0:3ff58b093415 | 107 | #include "mbed.h" |
VivaPenguinos | 1:24446776f0d2 | 108 | #include "Keypad.h" // Keypad |
VivaPenguinos | 3:29cff763ae36 | 109 | #include "DS1302.h" // RTC for DS1032 |
VivaPenguinos | 4:99535d368a9f | 110 | |
VivaPenguinos | 3:29cff763ae36 | 111 | DS1302 clk(SCLK, IO, CE); //DS1302 clk(SCLK, IO, PTC3); |
VivaPenguinos | 0:3ff58b093415 | 112 | |
VivaPenguinos | 0:3ff58b093415 | 113 | //Declare Variables |
VivaPenguinos | 4:99535d368a9f | 114 | // int shift = 0; // Shift Data |
VivaPenguinos | 0:3ff58b093415 | 115 | // In the Arduino Version it uses a String. Will use an Int instead to see if this works on Mbed |
VivaPenguinos | 1:24446776f0d2 | 116 | int Verb_Number1 = 0; |
VivaPenguinos | 1:24446776f0d2 | 117 | int Verb_Number2 = 0; |
VivaPenguinos | 1:24446776f0d2 | 118 | int Noun_Number1 = 0; |
VivaPenguinos | 1:24446776f0d2 | 119 | int Noun_Number2 = 0; |
VivaPenguinos | 1:24446776f0d2 | 120 | int Enter_Number1 = 0; |
VivaPenguinos | 1:24446776f0d2 | 121 | int Enter_Number2 = 0; |
VivaPenguinos | 1:24446776f0d2 | 122 | int Verb; // DSKY Verb |
VivaPenguinos | 1:24446776f0d2 | 123 | int Noun; // DSkY Noun |
VivaPenguinos | 1:24446776f0d2 | 124 | int Enter; // DSKY Enter |
VivaPenguinos | 4:99535d368a9f | 125 | |
VivaPenguinos | 4:99535d368a9f | 126 | // For shift register use. Refer to shift register data for additional information. |
VivaPenguinos | 4:99535d368a9f | 127 | int R1_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 128 | int R1_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 129 | int R1_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 130 | int R1_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 131 | int R1_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 132 | int R2_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 133 | int R2_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 134 | int R2_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 135 | int R2_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 136 | int R2_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 137 | int R3_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 138 | int R3_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 139 | int R3_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 140 | int R3_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 141 | int R3_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 142 | int V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 143 | int V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 144 | int N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 145 | int N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 146 | int P_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 147 | int P_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 148 | |
VivaPenguinos | 5:5f08974ef8bb | 149 | // For R use. |
VivaPenguinos | 5:5f08974ef8bb | 150 | int R_Pos = 0; |
VivaPenguinos | 5:5f08974ef8bb | 151 | int R_Neg = 0; |
VivaPenguinos | 4:99535d368a9f | 152 | int RA = 0; |
VivaPenguinos | 4:99535d368a9f | 153 | int RB = 0; |
VivaPenguinos | 4:99535d368a9f | 154 | int RC = 0; |
VivaPenguinos | 4:99535d368a9f | 155 | int RD = 0; |
VivaPenguinos | 4:99535d368a9f | 156 | int RE = 0; |
VivaPenguinos | 5:5f08974ef8bb | 157 | int RP = 0; |
VivaPenguinos | 4:99535d368a9f | 158 | int RVA = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 159 | int RVB = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 160 | int RVC = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 161 | int RVD = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 162 | int RVE = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 163 | int R_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 164 | int R1_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 165 | int R2_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 166 | int R3_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 167 | int GET_Config_Time = 0; |
VivaPenguinos | 4:99535d368a9f | 168 | |
VivaPenguinos | 5:5f08974ef8bb | 169 | // For N Use. |
VivaPenguinos | 5:5f08974ef8bb | 170 | int NA = 0x0f; |
VivaPenguinos | 5:5f08974ef8bb | 171 | int NB = 0x0f; |
VivaPenguinos | 5:5f08974ef8bb | 172 | int N_Position = 1; |
VivaPenguinos | 5:5f08974ef8bb | 173 | |
VivaPenguinos | 5:5f08974ef8bb | 174 | // PC Variables (Future use) |
VivaPenguinos | 5:5f08974ef8bb | 175 | int IMUPWR = 1; |
VivaPenguinos | 5:5f08974ef8bb | 176 | |
VivaPenguinos | 5:5f08974ef8bb | 177 | // DSKY Variables |
VivaPenguinos | 5:5f08974ef8bb | 178 | int LAUNCHAZ = 0; // LAUNCH AZIMUTH |
VivaPenguinos | 5:5f08974ef8bb | 179 | int R1_COMP; |
VivaPenguinos | 5:5f08974ef8bb | 180 | |
VivaPenguinos | 3:29cff763ae36 | 181 | // Keypad |
VivaPenguinos | 1:24446776f0d2 | 182 | char Keytable[] = { '1', '2', '3', '+', // R0 |
VivaPenguinos | 1:24446776f0d2 | 183 | '4', '5', '6', '-', // R1 |
VivaPenguinos | 1:24446776f0d2 | 184 | '7', '8', '9', 'E', // R2 |
VivaPenguinos | 1:24446776f0d2 | 185 | 'V', '0', 'N', 'R', // R3 |
VivaPenguinos | 1:24446776f0d2 | 186 | }; |
VivaPenguinos | 4:99535d368a9f | 187 | // C0 C1 C2 C3 |
VivaPenguinos | 1:24446776f0d2 | 188 | |
VivaPenguinos | 3:29cff763ae36 | 189 | // RTC Variables |
VivaPenguinos | 3:29cff763ae36 | 190 | int TIME_VALUE = 1397702161; |
VivaPenguinos | 4:99535d368a9f | 191 | int Time_Difference = 0%60; |
VivaPenguinos | 3:29cff763ae36 | 192 | |
VivaPenguinos | 3:29cff763ae36 | 193 | // Button State |
VivaPenguinos | 1:24446776f0d2 | 194 | int32_t Index = -1; // Button |
VivaPenguinos | 1:24446776f0d2 | 195 | int State; |
VivaPenguinos | 0:3ff58b093415 | 196 | |
VivaPenguinos | 0:3ff58b093415 | 197 | // Function Declaration |
VivaPenguinos | 5:5f08974ef8bb | 198 | void Interruption(); |
VivaPenguinos | 1:24446776f0d2 | 199 | void Verb_Button(); |
VivaPenguinos | 1:24446776f0d2 | 200 | void Noun_Button(); |
VivaPenguinos | 1:24446776f0d2 | 201 | void Enter_Button(); |
VivaPenguinos | 1:24446776f0d2 | 202 | void compare(); |
VivaPenguinos | 0:3ff58b093415 | 203 | void blinkAll(int amount, int delay);// Function that Blinks all LED |
VivaPenguinos | 4:99535d368a9f | 204 | void Shift(); // Function that shifts all data |
VivaPenguinos | 5:5f08974ef8bb | 205 | void R_GET(int R); // Grab inputs for Rows |
VivaPenguinos | 5:5f08974ef8bb | 206 | void N_GET(); // Grab inputs for Noun |
VivaPenguinos | 5:5f08974ef8bb | 207 | void NO_Light(int L); // Configures shift registers to 0 |
VivaPenguinos | 5:5f08974ef8bb | 208 | void PreLaunch_Gyrocompassing_Configure(); // For the inputs of the PreLaunch_Gyrocompassing |
VivaPenguinos | 6:3019f2f7e9d4 | 209 | void CMC_PowerInput(); // For the Inputs of the CMC_Powerdown(); |
VivaPenguinos | 5:5f08974ef8bb | 210 | int Button_Sort(int sort); // Function that sorts Verb Values |
VivaPenguinos | 4:99535d368a9f | 211 | int R_Concatenate(int C); // Used for concatenating information |
VivaPenguinos | 0:3ff58b093415 | 212 | //void ShiftingOut(char myDataOut); |
VivaPenguinos | 0:3ff58b093415 | 213 | |
VivaPenguinos | 3:29cff763ae36 | 214 | // Program Names |
VivaPenguinos | 5:5f08974ef8bb | 215 | void Ground_Elapse_Time(); // Ground Elapse Time |
VivaPenguinos | 5:5f08974ef8bb | 216 | void Test_Lights(); // Test Lights |
VivaPenguinos | 5:5f08974ef8bb | 217 | void GET_Config(); // Configures Ground Elapse Time |
VivaPenguinos | 5:5f08974ef8bb | 218 | void CMC_Idle(); // P00 - CMC Idling Program |
VivaPenguinos | 5:5f08974ef8bb | 219 | void PreLaunch_Initialization(); // P01 - Prelaunch - Initialization Program |
VivaPenguinos | 5:5f08974ef8bb | 220 | void PreLaunch_Gyrocompassing(); // P02 - Prelaunch - Gyrocompassing Program |
VivaPenguinos | 6:3019f2f7e9d4 | 221 | void CMC_Powerdown(); // P06 - CMC Power Down Program |
VivaPenguinos | 5:5f08974ef8bb | 222 | int R1_Component(); // Load Component into R1 |
VivaPenguinos | 1:24446776f0d2 | 223 | |
VivaPenguinos | 6:3019f2f7e9d4 | 224 | // CMC_Idle Variables |
VivaPenguinos | 6:3019f2f7e9d4 | 225 | // Time of State Vector Being Integrated |
VivaPenguinos | 6:3019f2f7e9d4 | 226 | int ToSSeconds = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 227 | int ToSMinutes = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 228 | int ToSHours = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 229 | |
VivaPenguinos | 6:3019f2f7e9d4 | 230 | // Temp Variables or functions. (This should generally have nothing every revision. Either remove or move the items) |
VivaPenguinos | 6:3019f2f7e9d4 | 231 | int PRO = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 232 | void CMC_Poweron(); |
VivaPenguinos | 6:3019f2f7e9d4 | 233 | int Button_Detect = 0; // Used for detecting button presses. |
VivaPenguinos | 6:3019f2f7e9d4 | 234 | |
VivaPenguinos | 0:3ff58b093415 | 235 | // Pin modes for each pins |
VivaPenguinos | 6:3019f2f7e9d4 | 236 | DigitalOut LatchPin (PTC6); //Pin for ST_CP of 74HC595 Pin # 12 |
VivaPenguinos | 6:3019f2f7e9d4 | 237 | DigitalOut ClockPin (PTC10); //Pin for SH_CP of 74HC595 Pin # 11 |
VivaPenguinos | 6:3019f2f7e9d4 | 238 | DigitalOut DataPin (PTC11); //Pin for to DS of 74HC595 Pin # 14 |
VivaPenguinos | 0:3ff58b093415 | 239 | |
VivaPenguinos | 5:5f08974ef8bb | 240 | // Indicator Lights |
VivaPenguinos | 6:3019f2f7e9d4 | 241 | DigitalOut UPLINK_ACTY (PTE5); |
VivaPenguinos | 6:3019f2f7e9d4 | 242 | DigitalOut NO_ATT (PTE4); |
VivaPenguinos | 6:3019f2f7e9d4 | 243 | DigitalOut STBY (PTE3); |
VivaPenguinos | 6:3019f2f7e9d4 | 244 | DigitalOut KEY_REL (PTE2); |
VivaPenguinos | 6:3019f2f7e9d4 | 245 | DigitalOut OPP_ERR (PTB11); |
VivaPenguinos | 6:3019f2f7e9d4 | 246 | DigitalOut TEMP (PTB10); |
VivaPenguinos | 6:3019f2f7e9d4 | 247 | DigitalOut GIMBAL_LOCK (PTB9); |
VivaPenguinos | 6:3019f2f7e9d4 | 248 | DigitalOut PROG (PTB8); |
VivaPenguinos | 6:3019f2f7e9d4 | 249 | DigitalOut RESTART (PTC12); |
VivaPenguinos | 6:3019f2f7e9d4 | 250 | DigitalOut TRACKER (PTC13); |
VivaPenguinos | 6:3019f2f7e9d4 | 251 | DigitalOut R1_POS (PTC16); |
VivaPenguinos | 6:3019f2f7e9d4 | 252 | DigitalOut R2_POS (PTC17); |
VivaPenguinos | 6:3019f2f7e9d4 | 253 | DigitalOut R3_POS (PTA16); |
VivaPenguinos | 6:3019f2f7e9d4 | 254 | DigitalOut R1_NEG (PTA17); |
VivaPenguinos | 6:3019f2f7e9d4 | 255 | DigitalOut R2_NEG (PTE31); |
VivaPenguinos | 6:3019f2f7e9d4 | 256 | DigitalOut R3_NEG (PTD6); |
VivaPenguinos | 6:3019f2f7e9d4 | 257 | DigitalOut COMP_ACTY (PTD7); |
VivaPenguinos | 5:5f08974ef8bb | 258 | |
VivaPenguinos | 6:3019f2f7e9d4 | 259 | // Push Buttons |
VivaPenguinos | 6:3019f2f7e9d4 | 260 | DigitalIn PRO_BUTT (PTB1); |
VivaPenguinos | 6:3019f2f7e9d4 | 261 | DigitalIn CLR_BUTT (PTB2); |
VivaPenguinos | 6:3019f2f7e9d4 | 262 | DigitalIn KEYREL_BUTT (PTB3); |
VivaPenguinos | 6:3019f2f7e9d4 | 263 | |
VivaPenguinos | 6:3019f2f7e9d4 | 264 | // LED |
VivaPenguinos | 0:3ff58b093415 | 265 | DigitalOut myled(LED1); |
VivaPenguinos | 6:3019f2f7e9d4 | 266 | |
VivaPenguinos | 0:3ff58b093415 | 267 | Serial pc(USBTX, USBRX); // tx, rx Serial Output to PC Enabling this WILL consume resources. Use only for debug |
VivaPenguinos | 1:24446776f0d2 | 268 | |
VivaPenguinos | 4:99535d368a9f | 269 | unsigned concatenate(unsigned x, unsigned y); |
VivaPenguinos | 4:99535d368a9f | 270 | |
VivaPenguinos | 1:24446776f0d2 | 271 | uint32_t cbAfterInput(uint32_t index) |
VivaPenguinos | 1:24446776f0d2 | 272 | { |
VivaPenguinos | 1:24446776f0d2 | 273 | Index = index; |
VivaPenguinos | 1:24446776f0d2 | 274 | return 0; |
VivaPenguinos | 1:24446776f0d2 | 275 | } |
VivaPenguinos | 1:24446776f0d2 | 276 | |
VivaPenguinos | 0:3ff58b093415 | 277 | int main() |
VivaPenguinos | 0:3ff58b093415 | 278 | { |
VivaPenguinos | 4:99535d368a9f | 279 | pc.printf("Initialization...\n"); |
VivaPenguinos | 0:3ff58b093415 | 280 | wait(1); |
VivaPenguinos | 4:99535d368a9f | 281 | pc.printf("Testing shift registers.\n"); |
VivaPenguinos | 0:3ff58b093415 | 282 | blinkAll(4,1); |
VivaPenguinos | 4:99535d368a9f | 283 | pc.printf("Shift Register: PASS \n"); |
VivaPenguinos | 0:3ff58b093415 | 284 | wait(1); |
VivaPenguinos | 4:99535d368a9f | 285 | pc.printf("Energizing keypad\n"); |
VivaPenguinos | 1:24446776f0d2 | 286 | State = 1; |
VivaPenguinos | 1:24446776f0d2 | 287 | // r0 r1 r2 r3 c0 c1 c2 c3 |
VivaPenguinos | 1:24446776f0d2 | 288 | Keypad keypad(PTD4, PTA12, PTD3, PTA5, PTA13, PTD5, PTD0, PTD2, 20); |
VivaPenguinos | 1:24446776f0d2 | 289 | keypad.attach(&cbAfterInput); |
VivaPenguinos | 1:24446776f0d2 | 290 | keypad.start(); // energize the columns c0-c3 of the keypad |
VivaPenguinos | 4:99535d368a9f | 291 | pc.printf("Keypad: PASS \n"); |
VivaPenguinos | 4:99535d368a9f | 292 | pc.printf("Initialize RTC Clock. \n"); |
VivaPenguinos | 4:99535d368a9f | 293 | #ifdef INITIAL_RUN |
VivaPenguinos | 4:99535d368a9f | 294 | clk.set_time(TIME_VALUE); |
VivaPenguinos | 4:99535d368a9f | 295 | #endif |
VivaPenguinos | 4:99535d368a9f | 296 | //char storedByte = clk.recallByte(0); |
VivaPenguinos | 4:99535d368a9f | 297 | //clk.storeByte(0, storedByte + 1); |
VivaPenguinos | 4:99535d368a9f | 298 | pc.printf("RTC: PASS \n"); |
VivaPenguinos | 4:99535d368a9f | 299 | pc.printf("Welcome to DSKY!\n"); |
VivaPenguinos | 1:24446776f0d2 | 300 | while (1) { |
VivaPenguinos | 6:3019f2f7e9d4 | 301 | // Input side |
VivaPenguinos | 6:3019f2f7e9d4 | 302 | // Keypad: |
VivaPenguinos | 1:24446776f0d2 | 303 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 304 | if (Index >-1) { |
VivaPenguinos | 1:24446776f0d2 | 305 | pc.printf("Interrupted"); |
VivaPenguinos | 1:24446776f0d2 | 306 | pc.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]); |
VivaPenguinos | 1:24446776f0d2 | 307 | if (Index == 12) { // Index 12 = Verb Button |
VivaPenguinos | 4:99535d368a9f | 308 | Verb_Button(); // Goes to Verb_Button |
VivaPenguinos | 1:24446776f0d2 | 309 | } |
VivaPenguinos | 1:24446776f0d2 | 310 | if (Index == 14) { // Index 14 = Noun Button |
VivaPenguinos | 1:24446776f0d2 | 311 | Noun_Button(); // Goes to Noun_Button |
VivaPenguinos | 1:24446776f0d2 | 312 | } |
VivaPenguinos | 1:24446776f0d2 | 313 | if (Index == 11) { // Index 11 = Enter Button |
VivaPenguinos | 4:99535d368a9f | 314 | Enter_Button(); // Goes to Enter_Button |
VivaPenguinos | 1:24446776f0d2 | 315 | } |
VivaPenguinos | 1:24446776f0d2 | 316 | Index = -1; |
VivaPenguinos | 1:24446776f0d2 | 317 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 318 | // Button: |
VivaPenguinos | 6:3019f2f7e9d4 | 319 | if ((Button_Detect == 0) && (PRO_BUTT == 0)){ |
VivaPenguinos | 6:3019f2f7e9d4 | 320 | wait_ms(25); |
VivaPenguinos | 6:3019f2f7e9d4 | 321 | pc.printf("Pro Button Pressed\n"); |
VivaPenguinos | 6:3019f2f7e9d4 | 322 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 323 | else if (CLR_BUTT == 0){ |
VivaPenguinos | 6:3019f2f7e9d4 | 324 | wait_ms(25); |
VivaPenguinos | 6:3019f2f7e9d4 | 325 | pc.printf("Clr Button Pressed\n"); |
VivaPenguinos | 6:3019f2f7e9d4 | 326 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 327 | else if (KEYREL_BUTT == 0){ |
VivaPenguinos | 6:3019f2f7e9d4 | 328 | wait_ms(25); |
VivaPenguinos | 6:3019f2f7e9d4 | 329 | pc.printf("Key Rel Button Pressed\n"); |
VivaPenguinos | 6:3019f2f7e9d4 | 330 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 331 | |
VivaPenguinos | 6:3019f2f7e9d4 | 332 | myled = PRO_BUTT; |
VivaPenguinos | 1:24446776f0d2 | 333 | // Debug use only |
VivaPenguinos | 1:24446776f0d2 | 334 | //pc.printf("%c", Keytable[Verb_Number1]); |
VivaPenguinos | 1:24446776f0d2 | 335 | //pc.printf("%c", Keytable[Verb_Number2]); |
VivaPenguinos | 1:24446776f0d2 | 336 | //pc.printf("%c", Keytable[Noun_Number1]); |
VivaPenguinos | 1:24446776f0d2 | 337 | //pc.printf("%c", Keytable[Noun_Number2]); |
VivaPenguinos | 0:3ff58b093415 | 338 | } |
VivaPenguinos | 1:24446776f0d2 | 339 | } |
VivaPenguinos | 1:24446776f0d2 | 340 | |
VivaPenguinos | 5:5f08974ef8bb | 341 | void Interruption() |
VivaPenguinos | 5:5f08974ef8bb | 342 | { |
VivaPenguinos | 5:5f08974ef8bb | 343 | pc.printf("Interrupted"); |
VivaPenguinos | 5:5f08974ef8bb | 344 | pc.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]); |
VivaPenguinos | 5:5f08974ef8bb | 345 | if (Index == 12) { // Index 12 = Verb Button |
VivaPenguinos | 5:5f08974ef8bb | 346 | Verb_Button(); // Goes to Verb_Button |
VivaPenguinos | 5:5f08974ef8bb | 347 | } |
VivaPenguinos | 5:5f08974ef8bb | 348 | if (Index == 14) { // Index 14 = Noun Button |
VivaPenguinos | 5:5f08974ef8bb | 349 | Noun_Button(); // Goes to Noun_Button |
VivaPenguinos | 5:5f08974ef8bb | 350 | } |
VivaPenguinos | 5:5f08974ef8bb | 351 | if (Index == 11) { // Index 11 = Enter Button |
VivaPenguinos | 5:5f08974ef8bb | 352 | Enter_Button(); // Goes to Enter_Button |
VivaPenguinos | 5:5f08974ef8bb | 353 | } |
VivaPenguinos | 5:5f08974ef8bb | 354 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 355 | } |
VivaPenguinos | 5:5f08974ef8bb | 356 | |
VivaPenguinos | 1:24446776f0d2 | 357 | /* This function is used when the Verb Button has been pressed. Take the inputs of the button twice and determine if the buttons are integers. |
VivaPenguinos | 1:24446776f0d2 | 358 | If other buttons are pressed send it to their perspective locations. |
VivaPenguinos | 1:24446776f0d2 | 359 | */ |
VivaPenguinos | 1:24446776f0d2 | 360 | void Verb_Button(){ |
VivaPenguinos | 1:24446776f0d2 | 361 | Verbz: // Don't Ask |
VivaPenguinos | 1:24446776f0d2 | 362 | // All Variables for Verb, Noun and Enter are zeroed out |
VivaPenguinos | 4:99535d368a9f | 363 | Verb_Number1 = 0; |
VivaPenguinos | 4:99535d368a9f | 364 | Verb_Number2 = 0; |
VivaPenguinos | 4:99535d368a9f | 365 | Noun_Number1 = 0; |
VivaPenguinos | 4:99535d368a9f | 366 | Noun_Number2 = 0; |
VivaPenguinos | 4:99535d368a9f | 367 | Enter_Number1 = 0; |
VivaPenguinos | 4:99535d368a9f | 368 | Enter_Number2 = 0; |
VivaPenguinos | 1:24446776f0d2 | 369 | pc.printf("Please enter a Verb Number"); |
VivaPenguinos | 1:24446776f0d2 | 370 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 371 | Verb_Number1 = Index; |
VivaPenguinos | 1:24446776f0d2 | 372 | if (Verb_Number1 == 12){ // This is section is used on atleast one of the two Verb_Number variabels to prevent a Nestled If within if within if. |
VivaPenguinos | 1:24446776f0d2 | 373 | goto Verbz; // Line 110 |
VivaPenguinos | 4:99535d368a9f | 374 | } else { |
VivaPenguinos | 4:99535d368a9f | 375 | V_A = Button_Sort(Verb_Number1); |
VivaPenguinos | 4:99535d368a9f | 376 | Shift(); |
VivaPenguinos | 1:24446776f0d2 | 377 | } |
VivaPenguinos | 1:24446776f0d2 | 378 | //pc.printf("%c", Verb_Number1); |
VivaPenguinos | 1:24446776f0d2 | 379 | //pc.printf("%c", Keytable[Index]); |
VivaPenguinos | 1:24446776f0d2 | 380 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 381 | Verb_Number2 = Index; |
VivaPenguinos | 4:99535d368a9f | 382 | V_B = Button_Sort(Verb_Number2); |
VivaPenguinos | 4:99535d368a9f | 383 | Shift(); |
VivaPenguinos | 1:24446776f0d2 | 384 | //pc.printf("%c", Verb_Number2); |
VivaPenguinos | 1:24446776f0d2 | 385 | //pc.printf("%c", Verb_Number1); |
VivaPenguinos | 1:24446776f0d2 | 386 | //pc.printf("%c\n", Verb_Number2); |
VivaPenguinos | 0:3ff58b093415 | 387 | } |
VivaPenguinos | 1:24446776f0d2 | 388 | |
VivaPenguinos | 1:24446776f0d2 | 389 | /* This Function is used when the Verb Button has been Pressed. Take the inputs of the button twice and determine if the buttons are integers. |
VivaPenguinos | 1:24446776f0d2 | 390 | If other buttons are pressed send it to their perspective locations. |
VivaPenguinos | 1:24446776f0d2 | 391 | */ |
VivaPenguinos | 1:24446776f0d2 | 392 | void Noun_Button() |
VivaPenguinos | 1:24446776f0d2 | 393 | { |
VivaPenguinos | 1:24446776f0d2 | 394 | Nounz: |
VivaPenguinos | 1:24446776f0d2 | 395 | pc.printf("Please enter a Noun Number"); |
VivaPenguinos | 1:24446776f0d2 | 396 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 397 | Noun_Number1 = Index; |
VivaPenguinos | 1:24446776f0d2 | 398 | if (Noun_Number1 == 14) {// This is section is used on atleast one of the two Noun_Number variabels to prevent a Nestled If within if within if. |
VivaPenguinos | 4:99535d368a9f | 399 | goto Nounz; |
VivaPenguinos | 0:3ff58b093415 | 400 | } |
VivaPenguinos | 1:24446776f0d2 | 401 | else{ |
VivaPenguinos | 4:99535d368a9f | 402 | N_A = Button_Sort(Noun_Number1); |
VivaPenguinos | 4:99535d368a9f | 403 | Shift(); |
VivaPenguinos | 0:3ff58b093415 | 404 | } |
VivaPenguinos | 1:24446776f0d2 | 405 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 406 | Noun_Number2 = Index; |
VivaPenguinos | 4:99535d368a9f | 407 | N_B = Button_Sort(Noun_Number2); |
VivaPenguinos | 4:99535d368a9f | 408 | Shift(); |
VivaPenguinos | 1:24446776f0d2 | 409 | } |
VivaPenguinos | 1:24446776f0d2 | 410 | |
VivaPenguinos | 1:24446776f0d2 | 411 | /* This function is used wen the Enter button has been pressed. This function is a special circumstance since it will be checking both the Verb and Noun variables before entering variable to Enter. |
VivaPenguinos | 1:24446776f0d2 | 412 | */ |
VivaPenguinos | 1:24446776f0d2 | 413 | void Enter_Button() |
VivaPenguinos | 1:24446776f0d2 | 414 | { |
VivaPenguinos | 1:24446776f0d2 | 415 | Enterz: |
VivaPenguinos | 4:99535d368a9f | 416 | pc.printf("Checking Whether there is a variable stored in Noun or Verb 35\n"); |
VivaPenguinos | 5:5f08974ef8bb | 417 | if (Noun_Number1 == 0 && Noun_Number2 == 0 && Verb_Number1 != 2 && Verb_Number2 != 5){ // N00V35 // Test Lights |
VivaPenguinos | 1:24446776f0d2 | 418 | pc.printf("Please enter a Enter Number"); |
VivaPenguinos | 1:24446776f0d2 | 419 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 420 | Enter_Number1 = Index; |
VivaPenguinos | 1:24446776f0d2 | 421 | if (Enter_Number1 == 11) { // This section is used on atleast one of the two Enter_Number variable to prevent a nestled if within if within if. |
VivaPenguinos | 1:24446776f0d2 | 422 | goto Enterz; |
VivaPenguinos | 1:24446776f0d2 | 423 | } |
VivaPenguinos | 1:24446776f0d2 | 424 | else{ |
VivaPenguinos | 1:24446776f0d2 | 425 | Button_Sort(Enter_Number1); |
VivaPenguinos | 1:24446776f0d2 | 426 | } |
VivaPenguinos | 1:24446776f0d2 | 427 | __wfi(); |
VivaPenguinos | 1:24446776f0d2 | 428 | Enter_Number2 = Index; |
VivaPenguinos | 1:24446776f0d2 | 429 | Button_Sort(Enter_Number2); |
VivaPenguinos | 1:24446776f0d2 | 430 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 431 | // This is for P00 |
VivaPenguinos | 5:5f08974ef8bb | 432 | else if(Noun_Number1 == 0 && Noun_Number2 == 0 && Verb_Number1 == 2 && Verb_Number2 == 8){ //N00V37 |
VivaPenguinos | 6:3019f2f7e9d4 | 433 | pc.printf("This is the P00 program \n"); |
VivaPenguinos | 5:5f08974ef8bb | 434 | pc.printf("Please enter a Enter Number\n"); |
VivaPenguinos | 5:5f08974ef8bb | 435 | //Noun_Number1 = 0x0f; |
VivaPenguinos | 5:5f08974ef8bb | 436 | //Noun_Number2 = 0x0f; |
VivaPenguinos | 5:5f08974ef8bb | 437 | NO_Light(5); |
VivaPenguinos | 5:5f08974ef8bb | 438 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 439 | do { |
VivaPenguinos | 5:5f08974ef8bb | 440 | N_GET(); |
VivaPenguinos | 5:5f08974ef8bb | 441 | V_A = 0x03; |
VivaPenguinos | 5:5f08974ef8bb | 442 | V_B = 0x07; |
VivaPenguinos | 5:5f08974ef8bb | 443 | N_GET(); |
VivaPenguinos | 5:5f08974ef8bb | 444 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 445 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 446 | N_GET(); |
VivaPenguinos | 5:5f08974ef8bb | 447 | NO_Light(4); // No Light Verb |
VivaPenguinos | 5:5f08974ef8bb | 448 | NO_Light(5); |
VivaPenguinos | 5:5f08974ef8bb | 449 | N_GET(); |
VivaPenguinos | 5:5f08974ef8bb | 450 | NO_Light(5); |
VivaPenguinos | 5:5f08974ef8bb | 451 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 452 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 453 | } while (N_Position != 3); |
VivaPenguinos | 5:5f08974ef8bb | 454 | V_A = 3; |
VivaPenguinos | 5:5f08974ef8bb | 455 | V_B = 7; |
VivaPenguinos | 5:5f08974ef8bb | 456 | N_A = Enter_Number1; |
VivaPenguinos | 5:5f08974ef8bb | 457 | N_B = Enter_Number2; |
VivaPenguinos | 5:5f08974ef8bb | 458 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 459 | compare(); |
VivaPenguinos | 5:5f08974ef8bb | 460 | pc.printf("Out of P01, Waiting for Orders\n"); |
VivaPenguinos | 5:5f08974ef8bb | 461 | // pc.printf("V1 %d \n", Verb_Number1); |
VivaPenguinos | 5:5f08974ef8bb | 462 | // pc.printf("V2 %d \n", Verb_Number2); |
VivaPenguinos | 5:5f08974ef8bb | 463 | // pc.printf("N1 %d \n", Noun_Number1); |
VivaPenguinos | 5:5f08974ef8bb | 464 | // pc.printf("N2 %d \n", Noun_Number2); |
VivaPenguinos | 5:5f08974ef8bb | 465 | // pc.printf("E1 %d \n", Enter_Number1); |
VivaPenguinos | 5:5f08974ef8bb | 466 | // pc.printf("E2 %d \n", Enter_Number2); |
VivaPenguinos | 5:5f08974ef8bb | 467 | N_Position = 1; |
VivaPenguinos | 5:5f08974ef8bb | 468 | __wfi(); |
VivaPenguinos | 5:5f08974ef8bb | 469 | if (Index == 11) { // 11 = Enter Button |
VivaPenguinos | 5:5f08974ef8bb | 470 | pc.printf("Compare\n"); |
VivaPenguinos | 5:5f08974ef8bb | 471 | compare(); |
VivaPenguinos | 5:5f08974ef8bb | 472 | } |
VivaPenguinos | 5:5f08974ef8bb | 473 | else if (Index == 14) { |
VivaPenguinos | 5:5f08974ef8bb | 474 | Noun_Button(); |
VivaPenguinos | 5:5f08974ef8bb | 475 | } |
VivaPenguinos | 5:5f08974ef8bb | 476 | else if (Index == 12) { |
VivaPenguinos | 5:5f08974ef8bb | 477 | Verb_Button(); |
VivaPenguinos | 5:5f08974ef8bb | 478 | } |
VivaPenguinos | 5:5f08974ef8bb | 479 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 480 | } |
VivaPenguinos | 4:99535d368a9f | 481 | else {// (Noun_Number1 != 0 && Noun_Number2 != 0){ |
VivaPenguinos | 1:24446776f0d2 | 482 | pc.printf("Check completed, Executing"); |
VivaPenguinos | 4:99535d368a9f | 483 | Index = -1; |
VivaPenguinos | 1:24446776f0d2 | 484 | compare(); |
VivaPenguinos | 1:24446776f0d2 | 485 | } |
VivaPenguinos | 1:24446776f0d2 | 486 | |
VivaPenguinos | 1:24446776f0d2 | 487 | } |
VivaPenguinos | 1:24446776f0d2 | 488 | |
VivaPenguinos | 1:24446776f0d2 | 489 | // This function is used to sort the button press for Verb and Noun. |
VivaPenguinos | 4:99535d368a9f | 490 | int Button_Sort(int Sort) |
VivaPenguinos | 1:24446776f0d2 | 491 | { |
VivaPenguinos | 4:99535d368a9f | 492 | if (Sort == 0){ // Index 0 - Char 1 |
VivaPenguinos | 4:99535d368a9f | 493 | return 0x01; |
VivaPenguinos | 1:24446776f0d2 | 494 | } |
VivaPenguinos | 4:99535d368a9f | 495 | else if (Sort == 1) { // Index 1 - Char 2 |
VivaPenguinos | 4:99535d368a9f | 496 | return 0x02; |
VivaPenguinos | 1:24446776f0d2 | 497 | } |
VivaPenguinos | 4:99535d368a9f | 498 | else if (Sort == 2) { // Index 2 - Char 3 |
VivaPenguinos | 4:99535d368a9f | 499 | return 0x03; |
VivaPenguinos | 4:99535d368a9f | 500 | } |
VivaPenguinos | 4:99535d368a9f | 501 | else if (Sort == 3) { // Index 3 - Char + comparing the array number NOT what value in the array it is. Actual Array value is + |
VivaPenguinos | 1:24446776f0d2 | 502 | pc.printf("+"); |
VivaPenguinos | 5:5f08974ef8bb | 503 | return 0x10; |
VivaPenguinos | 1:24446776f0d2 | 504 | } |
VivaPenguinos | 4:99535d368a9f | 505 | else if (Sort == 4) { // Index 4 - Char 4 |
VivaPenguinos | 4:99535d368a9f | 506 | return 0x04; |
VivaPenguinos | 4:99535d368a9f | 507 | } |
VivaPenguinos | 4:99535d368a9f | 508 | else if (Sort == 5) { // Index 5 - Char 5 |
VivaPenguinos | 4:99535d368a9f | 509 | return 0x05; |
VivaPenguinos | 4:99535d368a9f | 510 | } |
VivaPenguinos | 4:99535d368a9f | 511 | else if (Sort == 6) { // Index 6 - Char 6 |
VivaPenguinos | 4:99535d368a9f | 512 | return 0x06; |
VivaPenguinos | 4:99535d368a9f | 513 | } |
VivaPenguinos | 4:99535d368a9f | 514 | else if (Sort == 7) { // Index 7 - Char - comparing the array number NOT what value in the array it is. Actual Array value is - |
VivaPenguinos | 1:24446776f0d2 | 515 | pc.printf("-"); |
VivaPenguinos | 5:5f08974ef8bb | 516 | return 0x11; |
VivaPenguinos | 1:24446776f0d2 | 517 | } |
VivaPenguinos | 4:99535d368a9f | 518 | else if (Sort == 8) { // Index 8 - Char 7 |
VivaPenguinos | 4:99535d368a9f | 519 | return 0x07; |
VivaPenguinos | 4:99535d368a9f | 520 | } |
VivaPenguinos | 4:99535d368a9f | 521 | else if (Sort == 9) { // Index 9 - Char 8 |
VivaPenguinos | 4:99535d368a9f | 522 | return 0x08; |
VivaPenguinos | 4:99535d368a9f | 523 | } |
VivaPenguinos | 4:99535d368a9f | 524 | else if (Sort == 10) { // Index 10 - Char 9 |
VivaPenguinos | 4:99535d368a9f | 525 | return 0x09; |
VivaPenguinos | 4:99535d368a9f | 526 | } |
VivaPenguinos | 4:99535d368a9f | 527 | else if (Sort == 12){ // Index 12 - Char V comparing the array number NOT what value in the array it is. Actual Array value is V |
VivaPenguinos | 4:99535d368a9f | 528 | Verb_Button(); |
VivaPenguinos | 4:99535d368a9f | 529 | } |
VivaPenguinos | 4:99535d368a9f | 530 | else if (Sort == 13) { // Index 13 - Char 0 |
VivaPenguinos | 4:99535d368a9f | 531 | return 0x00; |
VivaPenguinos | 4:99535d368a9f | 532 | } |
VivaPenguinos | 4:99535d368a9f | 533 | else if (Sort == 14) { // Index 14 - Char N comparing the array number NOT what value in the array it is. Actual Array value is N |
VivaPenguinos | 4:99535d368a9f | 534 | Noun_Button(); |
VivaPenguinos | 4:99535d368a9f | 535 | } |
VivaPenguinos | 1:24446776f0d2 | 536 | else if (Sort == 15) { //comparing the array number NOT what value in the array it is. Actual Array value is R |
VivaPenguinos | 1:24446776f0d2 | 537 | pc.printf("R"); |
VivaPenguinos | 1:24446776f0d2 | 538 | } |
VivaPenguinos | 4:99535d368a9f | 539 | return 0; |
VivaPenguinos | 1:24446776f0d2 | 540 | } |
VivaPenguinos | 4:99535d368a9f | 541 | |
VivaPenguinos | 1:24446776f0d2 | 542 | // Compares the button to what program the DSKY should be running. This section will be inefficent until I can improve on my programming skills :] |
VivaPenguinos | 1:24446776f0d2 | 543 | void compare() |
VivaPenguinos | 1:24446776f0d2 | 544 | { |
VivaPenguinos | 1:24446776f0d2 | 545 | if (Verb_Number1 == 0 && Verb_Number2 == 6 && Noun_Number1 == 2 && Noun_Number2 == 6 && Enter_Number1 == 0 && Enter_Number2 == 0) {// Verb 16, Noun 36, Enter 00 |
VivaPenguinos | 4:99535d368a9f | 546 | // Configure GET |
VivaPenguinos | 6:3019f2f7e9d4 | 547 | pc.printf("Display GET\n"); |
VivaPenguinos | 1:24446776f0d2 | 548 | Ground_Elapse_Time(); |
VivaPenguinos | 4:99535d368a9f | 549 | } else if (Verb_Number1 == 2 && Verb_Number2 == 5 && Noun_Number1 == 0 && Noun_Number2 == 0 && Enter_Number1 == 0 && Enter_Number2 == 0) { // Verb 35 Noun 00 Enter 00 |
VivaPenguinos | 4:99535d368a9f | 550 | // Test Lights |
VivaPenguinos | 6:3019f2f7e9d4 | 551 | pc.printf("Testing Lights\n"); |
VivaPenguinos | 4:99535d368a9f | 552 | Test_Lights(); |
VivaPenguinos | 4:99535d368a9f | 553 | } else if (Verb_Number1 == 1 && Verb_Number2 == 5 && Noun_Number1 == 2 && Noun_Number2 == 6 && Enter_Number1 == 0 && Enter_Number2 == 0) { // Verb 25, Noun 36, Enter 00 |
VivaPenguinos | 4:99535d368a9f | 554 | // GET COnfiguration |
VivaPenguinos | 6:3019f2f7e9d4 | 555 | pc.printf("GET configuration\n"); |
VivaPenguinos | 4:99535d368a9f | 556 | GET_Config(); |
VivaPenguinos | 5:5f08974ef8bb | 557 | } else if (Verb_Number1 == 2 && Verb_Number2 == 8 && Noun_Number1 == 0 && Noun_Number2 == 0 && Enter_Number1 == 0 && Enter_Number2 == 0) { // Verb 37, Noun 00, Enter 00 |
VivaPenguinos | 5:5f08974ef8bb | 558 | // CMC Idling Program |
VivaPenguinos | 6:3019f2f7e9d4 | 559 | pc.printf("CMC Idling Program\n"); |
VivaPenguinos | 5:5f08974ef8bb | 560 | CMC_Idle(); |
VivaPenguinos | 5:5f08974ef8bb | 561 | } else if (Verb_Number1 == 2 && Verb_Number2 == 8 && Noun_Number1 == 0 && Noun_Number2 == 0 && Enter_Number1 == 0 && Enter_Number2 == 1) { // Verb 37, Noun 00, Enter 01 |
VivaPenguinos | 6:3019f2f7e9d4 | 562 | pc.printf("Prelaunch or Service - Initialization Program\n"); |
VivaPenguinos | 5:5f08974ef8bb | 563 | PreLaunch_Initialization(); |
VivaPenguinos | 6:3019f2f7e9d4 | 564 | } else if (Verb_Number1 == 2 && Verb_Number2 == 8 && Noun_Number1 == 0 && Noun_Number2 == 0 && Enter_Number1 == 0 && Enter_Number2 == 6) { |
VivaPenguinos | 6:3019f2f7e9d4 | 565 | pc.printf("CMC Power Down Program\n"); |
VivaPenguinos | 6:3019f2f7e9d4 | 566 | CMC_Powerdown(); |
VivaPenguinos | 6:3019f2f7e9d4 | 567 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 568 | //else if (Verb_Number1 == 1 && Verb_Number2 == 0 && Noun_Number1 == 0 && Noun_Number2 == 0 && Enter_Number1 == 0 && Enter_Number2 == 0) { // Verb 21, Noun 00, Enter 00 |
VivaPenguinos | 5:5f08974ef8bb | 569 | // R1_Component(); |
VivaPenguinos | 5:5f08974ef8bb | 570 | //} |
VivaPenguinos | 5:5f08974ef8bb | 571 | else { |
VivaPenguinos | 5:5f08974ef8bb | 572 | pc.printf("Failed"); |
VivaPenguinos | 0:3ff58b093415 | 573 | } |
VivaPenguinos | 1:24446776f0d2 | 574 | } |
VivaPenguinos | 0:3ff58b093415 | 575 | |
VivaPenguinos | 1:24446776f0d2 | 576 | void ShiftingOut(int myDataOut) |
VivaPenguinos | 1:24446776f0d2 | 577 | { |
VivaPenguinos | 0:3ff58b093415 | 578 | // This shifts 8 bits out to the MSB first, The the rising edge of the clock, while clock idles low. |
VivaPenguinos | 0:3ff58b093415 | 579 | // Internal Fucntions |
VivaPenguinos | 0:3ff58b093415 | 580 | DataPin = 0; |
VivaPenguinos | 0:3ff58b093415 | 581 | ClockPin = 0; |
VivaPenguinos | 0:3ff58b093415 | 582 | int i= 0; |
VivaPenguinos | 0:3ff58b093415 | 583 | int pinState; |
VivaPenguinos | 0:3ff58b093415 | 584 | // Clears Everything within shift registers |
VivaPenguinos | 0:3ff58b093415 | 585 | DataPin = 0; |
VivaPenguinos | 0:3ff58b093415 | 586 | ClockPin = 0; |
VivaPenguinos | 1:24446776f0d2 | 587 | |
VivaPenguinos | 4:99535d368a9f | 588 | for (i=3; i>= 0; i--) { |
VivaPenguinos | 0:3ff58b093415 | 589 | ClockPin = 0; |
VivaPenguinos | 1:24446776f0d2 | 590 | |
VivaPenguinos | 0:3ff58b093415 | 591 | // Value passed to my data out |
VivaPenguinos | 0:3ff58b093415 | 592 | if ( myDataOut & (1<<i)) { |
VivaPenguinos | 0:3ff58b093415 | 593 | pinState = 1; |
VivaPenguinos | 0:3ff58b093415 | 594 | myled = 1; |
VivaPenguinos | 4:99535d368a9f | 595 | //pc.printf("1"); |
VivaPenguinos | 1:24446776f0d2 | 596 | } else { |
VivaPenguinos | 0:3ff58b093415 | 597 | pinState = 0; |
VivaPenguinos | 0:3ff58b093415 | 598 | myled = 0; |
VivaPenguinos | 4:99535d368a9f | 599 | //pc.printf("0"); |
VivaPenguinos | 0:3ff58b093415 | 600 | } |
VivaPenguinos | 0:3ff58b093415 | 601 | DataPin = pinState; |
VivaPenguinos | 0:3ff58b093415 | 602 | ClockPin = 1; |
VivaPenguinos | 0:3ff58b093415 | 603 | DataPin = 0; |
VivaPenguinos | 1:24446776f0d2 | 604 | } |
VivaPenguinos | 4:99535d368a9f | 605 | //pc.printf("\n"); |
VivaPenguinos | 0:3ff58b093415 | 606 | ClockPin = 0; |
VivaPenguinos | 0:3ff58b093415 | 607 | DataPin = 1; |
VivaPenguinos | 1:24446776f0d2 | 608 | } |
VivaPenguinos | 0:3ff58b093415 | 609 | |
VivaPenguinos | 4:99535d368a9f | 610 | // This function is used for shifting all Shift_X variables into the 7 segment display. |
VivaPenguinos | 4:99535d368a9f | 611 | void Shift() |
VivaPenguinos | 4:99535d368a9f | 612 | { |
VivaPenguinos | 4:99535d368a9f | 613 | LatchPin = 0; |
VivaPenguinos | 4:99535d368a9f | 614 | ShiftingOut(P_B); |
VivaPenguinos | 4:99535d368a9f | 615 | ShiftingOut(P_A); |
VivaPenguinos | 4:99535d368a9f | 616 | ShiftingOut(V_B); |
VivaPenguinos | 4:99535d368a9f | 617 | ShiftingOut(V_A); |
VivaPenguinos | 4:99535d368a9f | 618 | ShiftingOut(N_B); |
VivaPenguinos | 4:99535d368a9f | 619 | ShiftingOut(N_A); |
VivaPenguinos | 4:99535d368a9f | 620 | ShiftingOut(R3_E); |
VivaPenguinos | 4:99535d368a9f | 621 | ShiftingOut(R3_D); |
VivaPenguinos | 4:99535d368a9f | 622 | ShiftingOut(R3_C); |
VivaPenguinos | 4:99535d368a9f | 623 | ShiftingOut(R3_B); |
VivaPenguinos | 4:99535d368a9f | 624 | ShiftingOut(R3_A); |
VivaPenguinos | 4:99535d368a9f | 625 | ShiftingOut(R2_E); |
VivaPenguinos | 4:99535d368a9f | 626 | ShiftingOut(R2_D); |
VivaPenguinos | 4:99535d368a9f | 627 | ShiftingOut(R2_C); |
VivaPenguinos | 4:99535d368a9f | 628 | ShiftingOut(R2_B); |
VivaPenguinos | 4:99535d368a9f | 629 | ShiftingOut(R2_A); |
VivaPenguinos | 4:99535d368a9f | 630 | ShiftingOut(R1_E); |
VivaPenguinos | 4:99535d368a9f | 631 | ShiftingOut(R1_D); |
VivaPenguinos | 4:99535d368a9f | 632 | ShiftingOut(R1_C); |
VivaPenguinos | 4:99535d368a9f | 633 | ShiftingOut(R1_B); |
VivaPenguinos | 4:99535d368a9f | 634 | ShiftingOut(R1_A); |
VivaPenguinos | 4:99535d368a9f | 635 | LatchPin = 1; |
VivaPenguinos | 4:99535d368a9f | 636 | } |
VivaPenguinos | 4:99535d368a9f | 637 | |
VivaPenguinos | 1:24446776f0d2 | 638 | //blinks the whole registered based on the number of times you want to blink with a certain delay |
VivaPenguinos | 1:24446776f0d2 | 639 | void blinkAll(int amount, int delay) |
VivaPenguinos | 1:24446776f0d2 | 640 | { |
VivaPenguinos | 4:99535d368a9f | 641 | LatchPin = 0; // Before shift |
VivaPenguinos | 4:99535d368a9f | 642 | //ShiftingOut(0); |
VivaPenguinos | 4:99535d368a9f | 643 | //ShiftingOut(0); |
VivaPenguinos | 4:99535d368a9f | 644 | LatchPin = 1; // Done shift |
VivaPenguinos | 0:3ff58b093415 | 645 | wait(0.2); |
VivaPenguinos | 0:3ff58b093415 | 646 | for (int x = 0; x < amount; x++) { |
VivaPenguinos | 0:3ff58b093415 | 647 | LatchPin = 0; |
VivaPenguinos | 4:99535d368a9f | 648 | pc.printf("sending\n"); |
VivaPenguinos | 4:99535d368a9f | 649 | for (int s = 0; s < 22; s++) |
VivaPenguinos | 4:99535d368a9f | 650 | { |
VivaPenguinos | 4:99535d368a9f | 651 | ShiftingOut(0x08); |
VivaPenguinos | 5:5f08974ef8bb | 652 | UPLINK_ACTY = 1; |
VivaPenguinos | 5:5f08974ef8bb | 653 | NO_ATT = 1; |
VivaPenguinos | 5:5f08974ef8bb | 654 | STBY = 1; |
VivaPenguinos | 5:5f08974ef8bb | 655 | KEY_REL = 1; |
VivaPenguinos | 5:5f08974ef8bb | 656 | OPP_ERR = 1; |
VivaPenguinos | 5:5f08974ef8bb | 657 | TEMP = 1; |
VivaPenguinos | 5:5f08974ef8bb | 658 | GIMBAL_LOCK = 1; |
VivaPenguinos | 5:5f08974ef8bb | 659 | PROG = 1; |
VivaPenguinos | 5:5f08974ef8bb | 660 | RESTART = 1; |
VivaPenguinos | 5:5f08974ef8bb | 661 | TRACKER = 1; |
VivaPenguinos | 5:5f08974ef8bb | 662 | R1_POS = 1; |
VivaPenguinos | 5:5f08974ef8bb | 663 | R2_POS = 1; |
VivaPenguinos | 5:5f08974ef8bb | 664 | R3_POS = 1; |
VivaPenguinos | 5:5f08974ef8bb | 665 | R1_NEG = 1; |
VivaPenguinos | 5:5f08974ef8bb | 666 | R2_NEG = 1; |
VivaPenguinos | 5:5f08974ef8bb | 667 | R3_NEG = 1; |
VivaPenguinos | 5:5f08974ef8bb | 668 | COMP_ACTY = 1; |
VivaPenguinos | 4:99535d368a9f | 669 | } |
VivaPenguinos | 0:3ff58b093415 | 670 | LatchPin = 1; |
VivaPenguinos | 0:3ff58b093415 | 671 | wait(delay); |
VivaPenguinos | 0:3ff58b093415 | 672 | LatchPin = 0; |
VivaPenguinos | 4:99535d368a9f | 673 | for (int s = 0; s < 22; s++) |
VivaPenguinos | 4:99535d368a9f | 674 | { |
VivaPenguinos | 5:5f08974ef8bb | 675 | ShiftingOut(0x0f); |
VivaPenguinos | 5:5f08974ef8bb | 676 | UPLINK_ACTY = 0; |
VivaPenguinos | 5:5f08974ef8bb | 677 | NO_ATT = 0; |
VivaPenguinos | 5:5f08974ef8bb | 678 | STBY = 0; |
VivaPenguinos | 5:5f08974ef8bb | 679 | KEY_REL = 0; |
VivaPenguinos | 5:5f08974ef8bb | 680 | OPP_ERR = 0; |
VivaPenguinos | 5:5f08974ef8bb | 681 | TEMP = 0; |
VivaPenguinos | 5:5f08974ef8bb | 682 | GIMBAL_LOCK = 0; |
VivaPenguinos | 5:5f08974ef8bb | 683 | PROG = 0; |
VivaPenguinos | 5:5f08974ef8bb | 684 | RESTART = 0; |
VivaPenguinos | 5:5f08974ef8bb | 685 | TRACKER = 0; |
VivaPenguinos | 5:5f08974ef8bb | 686 | R1_POS = 0; |
VivaPenguinos | 5:5f08974ef8bb | 687 | R2_POS = 0; |
VivaPenguinos | 5:5f08974ef8bb | 688 | R3_POS = 0; |
VivaPenguinos | 5:5f08974ef8bb | 689 | R1_NEG = 0; |
VivaPenguinos | 5:5f08974ef8bb | 690 | R2_NEG = 0; |
VivaPenguinos | 5:5f08974ef8bb | 691 | R3_NEG = 0; |
VivaPenguinos | 5:5f08974ef8bb | 692 | COMP_ACTY = 0; |
VivaPenguinos | 4:99535d368a9f | 693 | } |
VivaPenguinos | 0:3ff58b093415 | 694 | LatchPin = 1; |
VivaPenguinos | 0:3ff58b093415 | 695 | wait(delay); |
VivaPenguinos | 1:24446776f0d2 | 696 | } |
VivaPenguinos | 1:24446776f0d2 | 697 | } |
VivaPenguinos | 1:24446776f0d2 | 698 | |
VivaPenguinos | 4:99535d368a9f | 699 | // The Ground Elapse Time is refrence to range zero or the last integeral before liftoff. |
VivaPenguinos | 4:99535d368a9f | 700 | // Page CM-9 |
VivaPenguinos | 4:99535d368a9f | 701 | // 00XXX h |
VivaPenguinos | 4:99535d368a9f | 702 | // 000XX min |
VivaPenguinos | 4:99535d368a9f | 703 | // 0XX.XX s (Code current does not follow this format) |
VivaPenguinos | 1:24446776f0d2 | 704 | void Ground_Elapse_Time() |
VivaPenguinos | 1:24446776f0d2 | 705 | { |
VivaPenguinos | 4:99535d368a9f | 706 | NO_Light(7); // Clears all the 7 Segment first. |
VivaPenguinos | 4:99535d368a9f | 707 | // Displays V16N36 on the 7 segments |
VivaPenguinos | 4:99535d368a9f | 708 | V_A = 0x01; |
VivaPenguinos | 4:99535d368a9f | 709 | V_B = 0x06; |
VivaPenguinos | 4:99535d368a9f | 710 | N_A = 0x03; |
VivaPenguinos | 4:99535d368a9f | 711 | N_B = 0x06; |
VivaPenguinos | 4:99535d368a9f | 712 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 713 | int GET_FLAG = 1; |
VivaPenguinos | 4:99535d368a9f | 714 | while(GET_FLAG == 1) { |
VivaPenguinos | 4:99535d368a9f | 715 | int minute = 0; |
VivaPenguinos | 4:99535d368a9f | 716 | int Seconds = 0; |
VivaPenguinos | 4:99535d368a9f | 717 | int Hours = 0; |
VivaPenguinos | 4:99535d368a9f | 718 | int minutemod = 0; // Minute Modulo |
VivaPenguinos | 4:99535d368a9f | 719 | int R1D = 0x00; |
VivaPenguinos | 4:99535d368a9f | 720 | int R1E = 0x00; |
VivaPenguinos | 4:99535d368a9f | 721 | int R2D = 0x00; |
VivaPenguinos | 4:99535d368a9f | 722 | int R2E = 0x00; |
VivaPenguinos | 4:99535d368a9f | 723 | int R3D = 0x00; |
VivaPenguinos | 4:99535d368a9f | 724 | int R3E = 0x00; |
VivaPenguinos | 4:99535d368a9f | 725 | time_t seconds = clk.time(NULL); |
VivaPenguinos | 4:99535d368a9f | 726 | pc.printf ("S = %d\n", seconds); |
VivaPenguinos | 4:99535d368a9f | 727 | Time_Difference = (seconds + GET_Config_Time) - TIME_VALUE; |
VivaPenguinos | 4:99535d368a9f | 728 | printf("TIME=%d \n", Time_Difference); // Displays time elapsed based on seconds elapsed. |
VivaPenguinos | 4:99535d368a9f | 729 | Hours = Time_Difference/3600; // Divide seconds by 3600 seconds |
VivaPenguinos | 4:99535d368a9f | 730 | Seconds = Time_Difference%60; // Get the remainder of time difference after 60 seconds |
VivaPenguinos | 4:99535d368a9f | 731 | minute = Time_Difference/60; // Divide the seconds by 3600 |
VivaPenguinos | 4:99535d368a9f | 732 | // Comments: 7 Segments Location |
VivaPenguinos | 4:99535d368a9f | 733 | minutemod = minute%60; // Get the remainder of the minutemod after 60 seconds |
VivaPenguinos | 4:99535d368a9f | 734 | R3D = (Hours%60)/10; // Get the modulo of the hour variable then divde by 10 to get single digit [][][][x][] |
VivaPenguinos | 4:99535d368a9f | 735 | R3E = Hours%10; // Get the modulo of the Hours variable by 10 to get single digit [][][][][x] |
VivaPenguinos | 4:99535d368a9f | 736 | R2D = minutemod/10; // Divide the minute variable by 10 to get single digit [][][][x][] |
VivaPenguinos | 4:99535d368a9f | 737 | R2E = minute%10; // Get the remainder of the minute variable to get single digit [][][][][x] |
VivaPenguinos | 4:99535d368a9f | 738 | R1D = Seconds/10; // Divide the seconds variable by 10 to get single digit [][][][x][] |
VivaPenguinos | 4:99535d368a9f | 739 | R1E = Time_Difference%10; // Get the remainder of the Time_Difference to get single digit [][][][][x] |
VivaPenguinos | 4:99535d368a9f | 740 | // Debug Use: |
VivaPenguinos | 4:99535d368a9f | 741 | // pc.printf("%d \n", minute); |
VivaPenguinos | 4:99535d368a9f | 742 | // pc.printf("%o \n", R2E); |
VivaPenguinos | 4:99535d368a9f | 743 | // pc.printf("%o \n", R2D); |
VivaPenguinos | 4:99535d368a9f | 744 | R3_E = R3E; |
VivaPenguinos | 4:99535d368a9f | 745 | R3_D = R3D; |
VivaPenguinos | 4:99535d368a9f | 746 | R1_E = R1E; |
VivaPenguinos | 4:99535d368a9f | 747 | R1_D = R1D; |
VivaPenguinos | 4:99535d368a9f | 748 | R2_E = R2E; |
VivaPenguinos | 4:99535d368a9f | 749 | R2_D = R2D; |
VivaPenguinos | 4:99535d368a9f | 750 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 751 | //pc.printf("%i \n",(Time_Difference%10) + ((Time_Difference/10)<<4)); // Decimal to BCD |
VivaPenguinos | 4:99535d368a9f | 752 | //printf("Time as a basic string = %s\r", ctime(&seconds)); |
VivaPenguinos | 4:99535d368a9f | 753 | if (Index >-1) { |
VivaPenguinos | 4:99535d368a9f | 754 | GET_FLAG = 0; |
VivaPenguinos | 4:99535d368a9f | 755 | pc.printf("Interrupted"); |
VivaPenguinos | 4:99535d368a9f | 756 | pc.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]); |
VivaPenguinos | 4:99535d368a9f | 757 | if (Index == 12) { // Index 12 = Verb Button |
VivaPenguinos | 4:99535d368a9f | 758 | Verb_Button(); // Goes to Verb_Button |
VivaPenguinos | 4:99535d368a9f | 759 | GET_FLAG = 0; |
VivaPenguinos | 4:99535d368a9f | 760 | break; |
VivaPenguinos | 4:99535d368a9f | 761 | } else if (Index == 14) { // Index 14 = Noun Button |
VivaPenguinos | 4:99535d368a9f | 762 | Noun_Button(); // Goes to Noun_Button |
VivaPenguinos | 4:99535d368a9f | 763 | GET_FLAG = 0; |
VivaPenguinos | 4:99535d368a9f | 764 | break; |
VivaPenguinos | 4:99535d368a9f | 765 | } else if (Index == 11) { // Index 11 = Enter Button |
VivaPenguinos | 4:99535d368a9f | 766 | Enter_Button(); // Goes to Enter_Button |
VivaPenguinos | 4:99535d368a9f | 767 | GET_FLAG = 0; |
VivaPenguinos | 4:99535d368a9f | 768 | break; |
VivaPenguinos | 4:99535d368a9f | 769 | } |
VivaPenguinos | 4:99535d368a9f | 770 | Index = -1; |
VivaPenguinos | 4:99535d368a9f | 771 | GET_FLAG = 0; |
VivaPenguinos | 4:99535d368a9f | 772 | break; |
VivaPenguinos | 4:99535d368a9f | 773 | } |
VivaPenguinos | 4:99535d368a9f | 774 | wait(1); |
VivaPenguinos | 4:99535d368a9f | 775 | } |
VivaPenguinos | 4:99535d368a9f | 776 | } |
VivaPenguinos | 4:99535d368a9f | 777 | |
VivaPenguinos | 4:99535d368a9f | 778 | // This function tells the shift registers to not display anything on the 7 segments. The integer L is used to specificy which area to zero. |
VivaPenguinos | 4:99535d368a9f | 779 | // 1 = Row 1 |
VivaPenguinos | 4:99535d368a9f | 780 | // 2 = Row 2 |
VivaPenguinos | 4:99535d368a9f | 781 | // 3 = Row 3 |
VivaPenguinos | 4:99535d368a9f | 782 | // 4 = Verb |
VivaPenguinos | 4:99535d368a9f | 783 | // 5 = Nouns |
VivaPenguinos | 4:99535d368a9f | 784 | // 6 = Program Number |
VivaPenguinos | 4:99535d368a9f | 785 | // 7 = All lights off |
VivaPenguinos | 4:99535d368a9f | 786 | void NO_Light(int L) |
VivaPenguinos | 4:99535d368a9f | 787 | { |
VivaPenguinos | 4:99535d368a9f | 788 | |
VivaPenguinos | 4:99535d368a9f | 789 | switch(L) { |
VivaPenguinos | 4:99535d368a9f | 790 | case 1: |
VivaPenguinos | 4:99535d368a9f | 791 | R1_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 792 | R1_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 793 | R1_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 794 | R1_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 795 | R1_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 796 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 797 | case 2: |
VivaPenguinos | 4:99535d368a9f | 798 | R2_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 799 | R2_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 800 | R2_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 801 | R2_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 802 | R2_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 803 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 804 | case 3: |
VivaPenguinos | 4:99535d368a9f | 805 | R3_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 806 | R3_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 807 | R3_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 808 | R3_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 809 | R3_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 810 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 811 | case 4: |
VivaPenguinos | 4:99535d368a9f | 812 | V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 813 | V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 814 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 815 | case 5: |
VivaPenguinos | 4:99535d368a9f | 816 | N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 817 | N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 818 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 819 | case 6: |
VivaPenguinos | 4:99535d368a9f | 820 | P_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 821 | P_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 822 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 823 | case 7: |
VivaPenguinos | 4:99535d368a9f | 824 | R1_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 825 | R1_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 826 | R1_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 827 | R1_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 828 | R1_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 829 | R2_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 830 | R2_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 831 | R2_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 832 | R2_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 833 | R2_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 834 | R3_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 835 | R3_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 836 | R3_C = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 837 | R3_D = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 838 | R3_E = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 839 | V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 840 | V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 841 | N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 842 | N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 843 | P_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 844 | P_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 845 | Shift(); |
VivaPenguinos | 6:3019f2f7e9d4 | 846 | case 8: |
VivaPenguinos | 6:3019f2f7e9d4 | 847 | UPLINK_ACTY = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 848 | NO_ATT = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 849 | STBY = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 850 | KEY_REL = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 851 | OPP_ERR = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 852 | TEMP = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 853 | GIMBAL_LOCK = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 854 | PROG = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 855 | RESTART = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 856 | TRACKER = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 857 | R1_POS = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 858 | R2_POS = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 859 | R3_POS = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 860 | R1_NEG = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 861 | R2_NEG = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 862 | R3_NEG = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 863 | COMP_ACTY = 0; |
VivaPenguinos | 4:99535d368a9f | 864 | } |
VivaPenguinos | 4:99535d368a9f | 865 | } |
VivaPenguinos | 4:99535d368a9f | 866 | |
VivaPenguinos | 4:99535d368a9f | 867 | // Test lights is to make sure all the 7 segments and indicator lights worked prior to lift-off. |
VivaPenguinos | 4:99535d368a9f | 868 | void Test_Lights() |
VivaPenguinos | 4:99535d368a9f | 869 | { |
VivaPenguinos | 4:99535d368a9f | 870 | for(int x = 0; x < 7; x++) { |
VivaPenguinos | 4:99535d368a9f | 871 | R1_A = 0x08; |
VivaPenguinos | 4:99535d368a9f | 872 | R1_B = 0x08; |
VivaPenguinos | 4:99535d368a9f | 873 | R1_C = 0x08; |
VivaPenguinos | 4:99535d368a9f | 874 | R1_D = 0x08; |
VivaPenguinos | 4:99535d368a9f | 875 | R1_E = 0x08; |
VivaPenguinos | 4:99535d368a9f | 876 | R2_A = 0x08; |
VivaPenguinos | 4:99535d368a9f | 877 | R2_B = 0x08; |
VivaPenguinos | 4:99535d368a9f | 878 | R2_C = 0x08; |
VivaPenguinos | 4:99535d368a9f | 879 | R2_D = 0x08; |
VivaPenguinos | 4:99535d368a9f | 880 | R2_E = 0x08; |
VivaPenguinos | 4:99535d368a9f | 881 | R3_A = 0x08; |
VivaPenguinos | 4:99535d368a9f | 882 | R3_B = 0x08; |
VivaPenguinos | 4:99535d368a9f | 883 | R3_C = 0x08; |
VivaPenguinos | 4:99535d368a9f | 884 | R3_D = 0x08; |
VivaPenguinos | 4:99535d368a9f | 885 | R3_E = 0x08; |
VivaPenguinos | 4:99535d368a9f | 886 | V_A = 0x08; |
VivaPenguinos | 4:99535d368a9f | 887 | V_B = 0x08; |
VivaPenguinos | 4:99535d368a9f | 888 | N_A = 0x08; |
VivaPenguinos | 4:99535d368a9f | 889 | N_B = 0x08; |
VivaPenguinos | 4:99535d368a9f | 890 | P_A = 0x08; |
VivaPenguinos | 4:99535d368a9f | 891 | P_B = 0x08; |
VivaPenguinos | 4:99535d368a9f | 892 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 893 | wait(1); |
VivaPenguinos | 4:99535d368a9f | 894 | V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 895 | V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 896 | N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 897 | N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 898 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 899 | wait(1); |
VivaPenguinos | 4:99535d368a9f | 900 | } |
VivaPenguinos | 4:99535d368a9f | 901 | } |
VivaPenguinos | 4:99535d368a9f | 902 | |
VivaPenguinos | 4:99535d368a9f | 903 | // This configs the Ground Elapse Time |
VivaPenguinos | 4:99535d368a9f | 904 | // This portion of code converts the value retrived into seconds and replaces the value in the RTC module. |
VivaPenguinos | 4:99535d368a9f | 905 | // Process: |
VivaPenguinos | 4:99535d368a9f | 906 | // V25N36 |
VivaPenguinos | 4:99535d368a9f | 907 | // Displays V21N36 |
VivaPenguinos | 4:99535d368a9f | 908 | // +-00XXX 750 hours max (equates to 31.25 days) Longest Apollo mission was only 12 hours, 13 hours. So 750 Hours is more than enough. |
VivaPenguinos | 4:99535d368a9f | 909 | // Displays V22N36 |
VivaPenguinos | 4:99535d368a9f | 910 | // +-000XX 60 Minutes Max |
VivaPenguinos | 4:99535d368a9f | 911 | // Displays V23N36 |
VivaPenguinos | 4:99535d368a9f | 912 | // +-0XXXX 60 Seconds Max, Currently follows 000XX will change in future revisions |
VivaPenguinos | 4:99535d368a9f | 913 | void GET_Config() |
VivaPenguinos | 4:99535d368a9f | 914 | { |
VivaPenguinos | 4:99535d368a9f | 915 | int GET_Hours = 0; |
VivaPenguinos | 4:99535d368a9f | 916 | int GET_Minute = 0; |
VivaPenguinos | 4:99535d368a9f | 917 | int GET_Seconds = 0; |
VivaPenguinos | 4:99535d368a9f | 918 | // Configures Hours, Minutes, and Seconds for RTC |
VivaPenguinos | 4:99535d368a9f | 919 | NO_Light(3); |
VivaPenguinos | 4:99535d368a9f | 920 | do { |
VivaPenguinos | 4:99535d368a9f | 921 | NO_Light(3); |
VivaPenguinos | 4:99535d368a9f | 922 | pc.printf("Debug"); |
VivaPenguinos | 4:99535d368a9f | 923 | R_GET(3); |
VivaPenguinos | 4:99535d368a9f | 924 | V_A = 0x02; |
VivaPenguinos | 4:99535d368a9f | 925 | V_B = 0x01; |
VivaPenguinos | 4:99535d368a9f | 926 | N_A = 0x03; |
VivaPenguinos | 4:99535d368a9f | 927 | N_B = 0x06; |
VivaPenguinos | 4:99535d368a9f | 928 | R_GET(3); |
VivaPenguinos | 4:99535d368a9f | 929 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 930 | wait(.5); |
VivaPenguinos | 4:99535d368a9f | 931 | R_GET(3); |
VivaPenguinos | 4:99535d368a9f | 932 | V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 933 | V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 934 | N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 935 | N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 936 | R_GET(3); |
VivaPenguinos | 4:99535d368a9f | 937 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 938 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 939 | } while (R3_Position != 7); |
VivaPenguinos | 4:99535d368a9f | 940 | R_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 941 | RVA = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 942 | RVB = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 943 | RVC = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 944 | RVD = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 945 | RVE = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 946 | do { |
VivaPenguinos | 4:99535d368a9f | 947 | pc.printf("Debug R2"); |
VivaPenguinos | 4:99535d368a9f | 948 | R_GET(2); |
VivaPenguinos | 4:99535d368a9f | 949 | V_A = 0x02; |
VivaPenguinos | 4:99535d368a9f | 950 | V_B = 0x02; |
VivaPenguinos | 4:99535d368a9f | 951 | N_A = 0x03; |
VivaPenguinos | 4:99535d368a9f | 952 | N_B = 0x06; |
VivaPenguinos | 4:99535d368a9f | 953 | R_GET(2); |
VivaPenguinos | 4:99535d368a9f | 954 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 955 | wait(.5); |
VivaPenguinos | 4:99535d368a9f | 956 | R_GET(2); |
VivaPenguinos | 4:99535d368a9f | 957 | V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 958 | V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 959 | N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 960 | N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 961 | R_GET(2); |
VivaPenguinos | 4:99535d368a9f | 962 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 963 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 964 | } while(R2_Position != 7); |
VivaPenguinos | 4:99535d368a9f | 965 | R_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 966 | RVA = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 967 | RVB = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 968 | RVC = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 969 | RVD = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 970 | RVE = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 971 | do { |
VivaPenguinos | 4:99535d368a9f | 972 | pc.printf("Debug R1"); |
VivaPenguinos | 4:99535d368a9f | 973 | R_GET(1); |
VivaPenguinos | 4:99535d368a9f | 974 | V_A = 0x02; |
VivaPenguinos | 4:99535d368a9f | 975 | V_B = 0x03; |
VivaPenguinos | 4:99535d368a9f | 976 | N_A = 0x03; |
VivaPenguinos | 4:99535d368a9f | 977 | N_B = 0x06; |
VivaPenguinos | 4:99535d368a9f | 978 | R_GET(1); |
VivaPenguinos | 4:99535d368a9f | 979 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 980 | wait(.5); |
VivaPenguinos | 4:99535d368a9f | 981 | R_GET(1); |
VivaPenguinos | 4:99535d368a9f | 982 | V_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 983 | V_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 984 | N_A = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 985 | N_B = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 986 | R_GET(1); |
VivaPenguinos | 4:99535d368a9f | 987 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 988 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 989 | } while(R1_Position != 7); |
VivaPenguinos | 4:99535d368a9f | 990 | R_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 991 | RVA = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 992 | RVB = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 993 | RVC = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 994 | RVD = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 995 | RVE = 0x0f; |
VivaPenguinos | 4:99535d368a9f | 996 | |
VivaPenguinos | 4:99535d368a9f | 997 | // The Actual Configuration of GET |
VivaPenguinos | 4:99535d368a9f | 998 | // Concatenate the values from each row based on it's value |
VivaPenguinos | 4:99535d368a9f | 999 | GET_Hours = R_Concatenate(3); |
VivaPenguinos | 4:99535d368a9f | 1000 | GET_Minute = R_Concatenate(2); |
VivaPenguinos | 4:99535d368a9f | 1001 | GET_Seconds = R_Concatenate(1); |
VivaPenguinos | 4:99535d368a9f | 1002 | |
VivaPenguinos | 5:5f08974ef8bb | 1003 | // Checks if value exceeds the Hours, Minute, and Seconds and verifies if Rows are in Positive |
VivaPenguinos | 5:5f08974ef8bb | 1004 | if (GET_Hours > 750 or GET_Minute > 60 or GET_Seconds > 60 or R1_POS != 1 or R2_POS != 1 or R3_POS != 1) { |
VivaPenguinos | 4:99535d368a9f | 1005 | pc.printf("Error! Check your Hours, Minute, and Seconds Value"); |
VivaPenguinos | 4:99535d368a9f | 1006 | R3_Position = 1; |
VivaPenguinos | 4:99535d368a9f | 1007 | GET_Config(); |
VivaPenguinos | 4:99535d368a9f | 1008 | } else { |
VivaPenguinos | 4:99535d368a9f | 1009 | pc.printf("Pass!, Going to configure RTC Now"); |
VivaPenguinos | 4:99535d368a9f | 1010 | GET_Config_Time = GET_Hours * 3600; |
VivaPenguinos | 4:99535d368a9f | 1011 | GET_Config_Time += GET_Minute * 60; |
VivaPenguinos | 4:99535d368a9f | 1012 | GET_Config_Time += GET_Seconds; |
VivaPenguinos | 4:99535d368a9f | 1013 | pc.printf("Time Conversion is %d", GET_Config_Time); |
VivaPenguinos | 4:99535d368a9f | 1014 | } |
VivaPenguinos | 4:99535d368a9f | 1015 | |
VivaPenguinos | 4:99535d368a9f | 1016 | // Reconfigures the timee so the values can be resetted. |
VivaPenguinos | 3:29cff763ae36 | 1017 | #ifdef INITIAL_RUN |
VivaPenguinos | 3:29cff763ae36 | 1018 | clk.set_time(TIME_VALUE); |
VivaPenguinos | 3:29cff763ae36 | 1019 | #endif |
VivaPenguinos | 1:24446776f0d2 | 1020 | |
VivaPenguinos | 4:99535d368a9f | 1021 | // Debug Use Only |
VivaPenguinos | 4:99535d368a9f | 1022 | //pc.printf("%d\n", GET_Hours); |
VivaPenguinos | 4:99535d368a9f | 1023 | //pc.printf("%d\n", GET_Minute); |
VivaPenguinos | 4:99535d368a9f | 1024 | //pc.printf("%d\n", GET_Seconds); |
VivaPenguinos | 4:99535d368a9f | 1025 | Ground_Elapse_Time(); |
VivaPenguinos | 4:99535d368a9f | 1026 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 1027 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1028 | /* |
VivaPenguinos | 6:3019f2f7e9d4 | 1029 | This is the CMC Idling Program Page CM-39 |
VivaPenguinos | 6:3019f2f7e9d4 | 1030 | P00 - CMC IDLING PROGRAM |
VivaPenguinos | 6:3019f2f7e9d4 | 1031 | Purpose: |
VivaPenguinos | 6:3019f2f7e9d4 | 1032 | 1. To maintain the CMC in a condition of readiness for entry into other programs |
VivaPenguinos | 6:3019f2f7e9d4 | 1033 | 2. To update the CSM and LM state vectors every four time steps. |
VivaPenguinos | 6:3019f2f7e9d4 | 1034 | Assumptions: |
VivaPenguinos | 6:3019f2f7e9d4 | 1035 | 1. This program is automatially selected by V96E, which may be done during any program. |
VivaPenguinos | 6:3019f2f7e9d4 | 1036 | State vector integration is permanently inhibited following V96E. |
VivaPenguinos | 6:3019f2f7e9d4 | 1037 | Normal integration functions will resume after selection of any program or extented verb. |
VivaPenguinos | 6:3019f2f7e9d4 | 1038 | P00 Integration will resume when P00 is reselected. |
VivaPenguinos | 6:3019f2f7e9d4 | 1039 | Usage of V96 can cause incorrect W-matrix and state vector synchronication. |
VivaPenguinos | 6:3019f2f7e9d4 | 1040 | 2. Program changes are inhibited during integration periods and program alarm 1520sub(8) will occur if a chance is attempted when inhibited. |
VivaPenguinos | 6:3019f2f7e9d4 | 1041 | Process: |
VivaPenguinos | 6:3019f2f7e9d4 | 1042 | 1. User Input Verb 37 Enter 00 |
VivaPenguinos | 6:3019f2f7e9d4 | 1043 | 2. Display P00 |
VivaPenguinos | 6:3019f2f7e9d4 | 1044 | 3. Verb 06 Noun 38 |
VivaPenguinos | 6:3019f2f7e9d4 | 1045 | 4. Optional Display: |
VivaPenguinos | 6:3019f2f7e9d4 | 1046 | 5. Verb 06 Noun 38 - |
VivaPenguinos | 6:3019f2f7e9d4 | 1047 | 6. Time of State Vector being Integrated |
VivaPenguinos | 6:3019f2f7e9d4 | 1048 | 00xxx hours |
VivaPenguinos | 6:3019f2f7e9d4 | 1049 | 000xx minutes |
VivaPenguinos | 6:3019f2f7e9d4 | 1050 | 0xx.xx seconds |
VivaPenguinos | 6:3019f2f7e9d4 | 1051 | */ |
VivaPenguinos | 5:5f08974ef8bb | 1052 | void CMC_Idle() |
VivaPenguinos | 5:5f08974ef8bb | 1053 | { |
VivaPenguinos | 6:3019f2f7e9d4 | 1054 | int CMC_Idle = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1055 | NO_Light(7); |
VivaPenguinos | 5:5f08974ef8bb | 1056 | P_A = 0x00; |
VivaPenguinos | 5:5f08974ef8bb | 1057 | P_B = 0x00; |
VivaPenguinos | 5:5f08974ef8bb | 1058 | Shift(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1059 | do { |
VivaPenguinos | 5:5f08974ef8bb | 1060 | __wfi(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1061 | if (Index == 12) { // Index 12 = Verb Button |
VivaPenguinos | 6:3019f2f7e9d4 | 1062 | Verb_Button(); // Goes to Verb_Button |
VivaPenguinos | 6:3019f2f7e9d4 | 1063 | }// Index == 12 |
VivaPenguinos | 6:3019f2f7e9d4 | 1064 | if (Index == 14) { // Index 14 = Noun Button |
VivaPenguinos | 6:3019f2f7e9d4 | 1065 | Noun_Button(); // Goes to Noun_Button |
VivaPenguinos | 6:3019f2f7e9d4 | 1066 | }// Index == 14 |
VivaPenguinos | 6:3019f2f7e9d4 | 1067 | if (Index == 11) { // Index 11 = Enter Button |
VivaPenguinos | 6:3019f2f7e9d4 | 1068 | if (Verb_Number1 == 13 && Verb_Number2 == 6 && Noun_Number1 == 2 && Noun_Number2 == 9 && Enter_Number1 == 0 && Enter_Number2 == 0) { //V06N38E00 |
VivaPenguinos | 6:3019f2f7e9d4 | 1069 | while(1) { |
VivaPenguinos | 6:3019f2f7e9d4 | 1070 | // Time of State Vector Data. |
VivaPenguinos | 6:3019f2f7e9d4 | 1071 | // Time of State Hours |
VivaPenguinos | 6:3019f2f7e9d4 | 1072 | R3_E = ToSHours%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1073 | R3_D = (ToSHours/10)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1074 | R3_C = (ToSHours/100)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1075 | R3_B = (ToSHours/1000)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1076 | R3_A = (ToSHours/10000)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1077 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1078 | // Time of State Minutes |
VivaPenguinos | 6:3019f2f7e9d4 | 1079 | R2_E = ToSMinutes%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1080 | R2_D = (ToSMinutes/10)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1081 | R2_C = (ToSMinutes/100)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1082 | R2_B = (ToSMinutes/1000)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1083 | R2_A = (ToSMinutes/10000)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1084 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1085 | // Time of State Seconds |
VivaPenguinos | 6:3019f2f7e9d4 | 1086 | R3_E = ToSSeconds%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1087 | R3_D = (ToSSeconds/10)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1088 | R3_C = (ToSSeconds/100)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1089 | R3_B = (ToSSeconds/1000)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1090 | R3_A = (ToSSeconds/10000)%10; |
VivaPenguinos | 6:3019f2f7e9d4 | 1091 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1092 | wait(1); |
VivaPenguinos | 6:3019f2f7e9d4 | 1093 | } |
VivaPenguinos | 6:3019f2f7e9d4 | 1094 | } else { |
VivaPenguinos | 6:3019f2f7e9d4 | 1095 | Enter_Button(); // Goes to Enter_Button |
VivaPenguinos | 6:3019f2f7e9d4 | 1096 | }// Else statement |
VivaPenguinos | 6:3019f2f7e9d4 | 1097 | }// Index == 11 |
VivaPenguinos | 6:3019f2f7e9d4 | 1098 | Index = -1; |
VivaPenguinos | 6:3019f2f7e9d4 | 1099 | } while(CMC_Idle == 0); |
VivaPenguinos | 6:3019f2f7e9d4 | 1100 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1101 | }// void CMC_Idle() |
VivaPenguinos | 5:5f08974ef8bb | 1102 | |
VivaPenguinos | 5:5f08974ef8bb | 1103 | /* |
VivaPenguinos | 5:5f08974ef8bb | 1104 | P01 - Prelaunch or Service - Initialization Program CM-39 |
VivaPenguinos | 5:5f08974ef8bb | 1105 | Purpose: |
VivaPenguinos | 5:5f08974ef8bb | 1106 | 1. To intialize the platform for the prelaunch programs. |
VivaPenguinos | 5:5f08974ef8bb | 1107 | 2. To provide an initial stable member orientation for Gyrocompassing (P02) |
VivaPenguinos | 5:5f08974ef8bb | 1108 | Assumptions: |
VivaPenguinos | 5:5f08974ef8bb | 1109 | Erasble location has been Properly initialized. |
VivaPenguinos | 5:5f08974ef8bb | 1110 | Azimuth, +1 |
VivaPenguinos | 5:5f08974ef8bb | 1111 | Latitude, +1 |
VivaPenguinos | 5:5f08974ef8bb | 1112 | LaunchAZ +1 |
VivaPenguinos | 5:5f08974ef8bb | 1113 | IMU compenstaion parameters |
VivaPenguinos | 5:5f08974ef8bb | 1114 | */ |
VivaPenguinos | 5:5f08974ef8bb | 1115 | void PreLaunch_Initialization() |
VivaPenguinos | 5:5f08974ef8bb | 1116 | { |
VivaPenguinos | 5:5f08974ef8bb | 1117 | P_A = 0x00; |
VivaPenguinos | 5:5f08974ef8bb | 1118 | P_B = 0x01; |
VivaPenguinos | 5:5f08974ef8bb | 1119 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1120 | |
VivaPenguinos | 5:5f08974ef8bb | 1121 | if (IMUPWR == 1) { |
VivaPenguinos | 5:5f08974ef8bb | 1122 | NO_ATT = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1123 | wait(9); |
VivaPenguinos | 5:5f08974ef8bb | 1124 | pc.printf("Course Align IMU\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1125 | NO_ATT = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1126 | wait(10); |
VivaPenguinos | 5:5f08974ef8bb | 1127 | pc.printf("Course Align IMU complete\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1128 | NO_ATT = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1129 | wait(2); |
VivaPenguinos | 5:5f08974ef8bb | 1130 | PreLaunch_Gyrocompassing(); |
VivaPenguinos | 5:5f08974ef8bb | 1131 | } else { |
VivaPenguinos | 5:5f08974ef8bb | 1132 | // NO_ATT is off for 8 seconds, with one COMP_ACTY light. |
VivaPenguinos | 5:5f08974ef8bb | 1133 | PROG = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1134 | wait(6); |
VivaPenguinos | 5:5f08974ef8bb | 1135 | COMP_ACTY = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1136 | wait(0.5); |
VivaPenguinos | 5:5f08974ef8bb | 1137 | COMP_ACTY = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1138 | wait(1.5); |
VivaPenguinos | 5:5f08974ef8bb | 1139 | // NO_ATT is on for 6 seconds, No COMP_ACTY light. |
VivaPenguinos | 5:5f08974ef8bb | 1140 | NO_ATT = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1141 | wait(6); |
VivaPenguinos | 5:5f08974ef8bb | 1142 | NO_ATT = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1143 | P_A = 0x0f; |
VivaPenguinos | 5:5f08974ef8bb | 1144 | P_B = 0x0f; |
VivaPenguinos | 5:5f08974ef8bb | 1145 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1146 | } |
VivaPenguinos | 5:5f08974ef8bb | 1147 | } |
VivaPenguinos | 5:5f08974ef8bb | 1148 | |
VivaPenguinos | 5:5f08974ef8bb | 1149 | /* |
VivaPenguinos | 5:5f08974ef8bb | 1150 | P02 - Prelaunch or Service - Gyrocompassing Program CM-39 |
VivaPenguinos | 5:5f08974ef8bb | 1151 | Purpose: |
VivaPenguinos | 5:5f08974ef8bb | 1152 | 1. Provide proper stable member orientation for launch |
VivaPenguinos | 5:5f08974ef8bb | 1153 | Assumptions: |
VivaPenguinos | 5:5f08974ef8bb | 1154 | 1. Program may be interuppted to perform the prelaunch or service - optical verification of gyrocompassing program (P03) |
VivaPenguinos | 5:5f08974ef8bb | 1155 | 2. V75 will be keyed in and displaed during this program to permit crew backup of the liftoff discrete. |
VivaPenguinos | 5:5f08974ef8bb | 1156 | 3. Program is automatically selected by the Initialization Program (P01). |
VivaPenguinos | 5:5f08974ef8bb | 1157 | 4. This program has capability (Via V78E) to change the luanch azimuth of the stable memeber while gyrocompassing. |
VivaPenguinos | 5:5f08974ef8bb | 1158 | Process: |
VivaPenguinos | 5:5f08974ef8bb | 1159 | 1. After P01 is completed |
VivaPenguinos | 5:5f08974ef8bb | 1160 | 2. Display P02 |
VivaPenguinos | 5:5f08974ef8bb | 1161 | 3. Flashing V06 N29 / Display LAUNCHAZ in R3 |
VivaPenguinos | 5:5f08974ef8bb | 1162 | 4. User input V21E |
VivaPenguinos | 5:5f08974ef8bb | 1163 | 5. Flash V21N29 This is R1_Component May be for future use. |
VivaPenguinos | 5:5f08974ef8bb | 1164 | 6. User inputs values for LAUNCHAZ |
VivaPenguinos | 5:5f08974ef8bb | 1165 | 7. Flash V06 N29 / Display LAUNCHAZ in R3 |
VivaPenguinos | 5:5f08974ef8bb | 1166 | 8. Input Pro |
VivaPenguinos | 5:5f08974ef8bb | 1167 | 9. Pulses Gyros |
VivaPenguinos | 5:5f08974ef8bb | 1168 | Programming Notes: |
VivaPenguinos | 5:5f08974ef8bb | 1169 | Void PreLaunch_Gyrocomapssing() and PreLaunch_Gyrocompassing_Configure() are tied together |
VivaPenguinos | 5:5f08974ef8bb | 1170 | |
VivaPenguinos | 5:5f08974ef8bb | 1171 | */ |
VivaPenguinos | 5:5f08974ef8bb | 1172 | void PreLaunch_Gyrocompassing () |
VivaPenguinos | 5:5f08974ef8bb | 1173 | { |
VivaPenguinos | 5:5f08974ef8bb | 1174 | // Process 1 |
VivaPenguinos | 5:5f08974ef8bb | 1175 | // Process 2 |
VivaPenguinos | 5:5f08974ef8bb | 1176 | NO_Light(7); |
VivaPenguinos | 5:5f08974ef8bb | 1177 | P_A = 0x00; |
VivaPenguinos | 5:5f08974ef8bb | 1178 | P_B = 0x02; |
VivaPenguinos | 5:5f08974ef8bb | 1179 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1180 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1181 | R3_E = LAUNCHAZ%10; |
VivaPenguinos | 5:5f08974ef8bb | 1182 | R3_D = (LAUNCHAZ/10)%10; |
VivaPenguinos | 5:5f08974ef8bb | 1183 | R3_C = (LAUNCHAZ/100)%10; |
VivaPenguinos | 5:5f08974ef8bb | 1184 | R3_B = (LAUNCHAZ/1000)%10; |
VivaPenguinos | 5:5f08974ef8bb | 1185 | R3_A = (LAUNCHAZ/10000)%10; |
VivaPenguinos | 5:5f08974ef8bb | 1186 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1187 | while(1) { |
VivaPenguinos | 5:5f08974ef8bb | 1188 | // Process 3; |
VivaPenguinos | 5:5f08974ef8bb | 1189 | PreLaunch_Gyrocompassing_Configure(); |
VivaPenguinos | 5:5f08974ef8bb | 1190 | COMP_ACTY = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1191 | PreLaunch_Gyrocompassing_Configure(); |
VivaPenguinos | 5:5f08974ef8bb | 1192 | wait(0.5); |
VivaPenguinos | 5:5f08974ef8bb | 1193 | PreLaunch_Gyrocompassing_Configure(); |
VivaPenguinos | 5:5f08974ef8bb | 1194 | COMP_ACTY = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1195 | PreLaunch_Gyrocompassing_Configure(); |
VivaPenguinos | 5:5f08974ef8bb | 1196 | wait(0.5); |
VivaPenguinos | 5:5f08974ef8bb | 1197 | pc.printf("spam\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1198 | pc.printf("Index %d\n", Index); |
VivaPenguinos | 5:5f08974ef8bb | 1199 | } // While 1 |
VivaPenguinos | 5:5f08974ef8bb | 1200 | } // prelaunch configuration |
VivaPenguinos | 5:5f08974ef8bb | 1201 | |
VivaPenguinos | 5:5f08974ef8bb | 1202 | // This is used for the configuration of PreLaunch_Gyrocompassing(); |
VivaPenguinos | 5:5f08974ef8bb | 1203 | // This has to be used since it awaits for the input of the astronauts. |
VivaPenguinos | 5:5f08974ef8bb | 1204 | void PreLaunch_Gyrocompassing_Configure() |
VivaPenguinos | 5:5f08974ef8bb | 1205 | { |
VivaPenguinos | 5:5f08974ef8bb | 1206 | int Azimuth; |
VivaPenguinos | 5:5f08974ef8bb | 1207 | while(1){ |
VivaPenguinos | 5:5f08974ef8bb | 1208 | if (Index >-1) { |
VivaPenguinos | 5:5f08974ef8bb | 1209 | if (Index == 12) { |
VivaPenguinos | 5:5f08974ef8bb | 1210 | Verb_Button(); //For V21 use |
VivaPenguinos | 5:5f08974ef8bb | 1211 | } |
VivaPenguinos | 5:5f08974ef8bb | 1212 | if (Index == 11) { |
VivaPenguinos | 5:5f08974ef8bb | 1213 | if (Verb_Number1 == 1 && Verb_Number2 == 0 && Noun_Number1 == 0 && Noun_Number2 == 0 && Enter_Number1 == 0 && Enter_Number2 == 0) { // Verb 21, Noun 00, Enter 00 |
VivaPenguinos | 5:5f08974ef8bb | 1214 | //Flash V21N29 and Get user inputs under R3 |
VivaPenguinos | 5:5f08974ef8bb | 1215 | // Process 5 and 6 |
VivaPenguinos | 5:5f08974ef8bb | 1216 | Azimuth = R1_Component(); // Goes to R1 Component |
VivaPenguinos | 5:5f08974ef8bb | 1217 | if(Azimuth < 90000 && R3_POS == 1 && R1_NEG == 0) { // Error Checking Checks if it's over 90000 or 90 degrees and that R3_POS is lit and not R3_NEG |
VivaPenguinos | 5:5f08974ef8bb | 1218 | // If it passes |
VivaPenguinos | 5:5f08974ef8bb | 1219 | LAUNCHAZ = Azimuth; |
VivaPenguinos | 5:5f08974ef8bb | 1220 | PreLaunch_Gyrocompassing();// This is suppose to go to PreLaunch_Gyrocompassing |
VivaPenguinos | 5:5f08974ef8bb | 1221 | }// if Azimuth = R1 |
VivaPenguinos | 5:5f08974ef8bb | 1222 | else{ |
VivaPenguinos | 5:5f08974ef8bb | 1223 | pc.printf("Failed"); |
VivaPenguinos | 5:5f08974ef8bb | 1224 | } // Error checking |
VivaPenguinos | 5:5f08974ef8bb | 1225 | } // V21 N00 E00 |
VivaPenguinos | 5:5f08974ef8bb | 1226 | } // Enter BUtton |
VivaPenguinos | 5:5f08974ef8bb | 1227 | if (Index == 99){ // This is Prog Button |
VivaPenguinos | 5:5f08974ef8bb | 1228 | // Error checks just in case |
VivaPenguinos | 5:5f08974ef8bb | 1229 | if (LAUNCHAZ > 0 && R3_POS == 1){ |
VivaPenguinos | 5:5f08974ef8bb | 1230 | // Because there are no Phsyical Gyro's present, This section of code is just going to simulate gyros pulsing |
VivaPenguinos | 5:5f08974ef8bb | 1231 | for (int x = 0; x > 21; x++){ |
VivaPenguinos | 5:5f08974ef8bb | 1232 | pc.printf("Pulsing Gyros...\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1233 | COMP_ACTY = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1234 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 1235 | COMP_ACTY = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1236 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 1237 | }// Pulsing Gyro simulation |
VivaPenguinos | 5:5f08974ef8bb | 1238 | pc.printf("Done!"); |
VivaPenguinos | 5:5f08974ef8bb | 1239 | }// Prog Error checking |
VivaPenguinos | 5:5f08974ef8bb | 1240 | }// Prog Button |
VivaPenguinos | 5:5f08974ef8bb | 1241 | } // Index > -1 |
VivaPenguinos | 5:5f08974ef8bb | 1242 | } // While(1) |
VivaPenguinos | 5:5f08974ef8bb | 1243 | } // PreLaunh_Gyrocompassing_Configure(); |
VivaPenguinos | 5:5f08974ef8bb | 1244 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1245 | /* |
VivaPenguinos | 6:3019f2f7e9d4 | 1246 | P06 - CMC Power Down Program |
VivaPenguinos | 6:3019f2f7e9d4 | 1247 | Purpose: |
VivaPenguinos | 6:3019f2f7e9d4 | 1248 | 1. To transfer the CMC from the operate to the standby position |
VivaPenguinos | 6:3019f2f7e9d4 | 1249 | Assumptions: |
VivaPenguinos | 6:3019f2f7e9d4 | 1250 | 1. If the computer power is switched off, the AGC Update program (P27) would have to be done to update the state vector and computer clock time. |
VivaPenguinos | 6:3019f2f7e9d4 | 1251 | 2. The AGC is capable of maintaining an accurate value of ground elapsed time (GET) for only 23 hours when in the standby mode. |
VivaPenguinos | 6:3019f2f7e9d4 | 1252 | If the AGC is not brought out of the standby position to the running condition atleast once within 23 hours, the AGC value of get must be updated. |
VivaPenguinos | 6:3019f2f7e9d4 | 1253 | 3. Once the program has been selected, the AGC must be put in standby. When P06 appears, the AGC will not honor a new program request (V37EXXE), |
VivaPenguinos | 6:3019f2f7e9d4 | 1254 | a terminate (V34E), or an ENTER in response to the request for standby. |
VivaPenguinos | 6:3019f2f7e9d4 | 1255 | Sequence of Events: |
VivaPenguinos | 6:3019f2f7e9d4 | 1256 | 1. User Input V37E06 |
VivaPenguinos | 6:3019f2f7e9d4 | 1257 | 2. Flashing V50N25 R3 = 00062 |
VivaPenguinos | 6:3019f2f7e9d4 | 1258 | 3. PRO until standby light on |
VivaPenguinos | 6:3019f2f7e9d4 | 1259 | 4. PRO until standby light off |
VivaPenguinos | 6:3019f2f7e9d4 | 1260 | 5. Flashing V37 |
VivaPenguinos | 6:3019f2f7e9d4 | 1261 | 6. User input 00E (Select P00) |
VivaPenguinos | 6:3019f2f7e9d4 | 1262 | 6.A No ATT Light of 90 Seconds |
VivaPenguinos | 6:3019f2f7e9d4 | 1263 | 7. Go to P00 |
VivaPenguinos | 6:3019f2f7e9d4 | 1264 | */ |
VivaPenguinos | 6:3019f2f7e9d4 | 1265 | void CMC_Powerdown() |
VivaPenguinos | 6:3019f2f7e9d4 | 1266 | { |
VivaPenguinos | 6:3019f2f7e9d4 | 1267 | // Process 2 |
VivaPenguinos | 6:3019f2f7e9d4 | 1268 | P_A = 0x00; |
VivaPenguinos | 6:3019f2f7e9d4 | 1269 | P_B = 0x06; |
VivaPenguinos | 6:3019f2f7e9d4 | 1270 | R3_E = 0x00; |
VivaPenguinos | 6:3019f2f7e9d4 | 1271 | R3_D = 0x00; |
VivaPenguinos | 6:3019f2f7e9d4 | 1272 | R3_C = 0x00; |
VivaPenguinos | 6:3019f2f7e9d4 | 1273 | R3_B = 0x06; |
VivaPenguinos | 6:3019f2f7e9d4 | 1274 | R3_A = 0x02; |
VivaPenguinos | 6:3019f2f7e9d4 | 1275 | Shift(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1276 | while(1) { |
VivaPenguinos | 6:3019f2f7e9d4 | 1277 | // Process 2 |
VivaPenguinos | 6:3019f2f7e9d4 | 1278 | CMC_PowerInput(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1279 | V_A = 0x05; |
VivaPenguinos | 6:3019f2f7e9d4 | 1280 | V_B = 0x00; |
VivaPenguinos | 6:3019f2f7e9d4 | 1281 | N_A = 0x02; |
VivaPenguinos | 6:3019f2f7e9d4 | 1282 | N_B = 0x05; |
VivaPenguinos | 6:3019f2f7e9d4 | 1283 | Shift(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1284 | CMC_PowerInput(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1285 | wait(.5); |
VivaPenguinos | 6:3019f2f7e9d4 | 1286 | CMC_PowerInput(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1287 | NO_Light(4); |
VivaPenguinos | 6:3019f2f7e9d4 | 1288 | NO_Light(5); |
VivaPenguinos | 6:3019f2f7e9d4 | 1289 | CMC_PowerInput(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1290 | wait(.5); |
VivaPenguinos | 6:3019f2f7e9d4 | 1291 | }// While 1 |
VivaPenguinos | 6:3019f2f7e9d4 | 1292 | }// CMC_Powerdown() |
VivaPenguinos | 6:3019f2f7e9d4 | 1293 | |
VivaPenguinos | 6:3019f2f7e9d4 | 1294 | void CMC_PowerInput() |
VivaPenguinos | 6:3019f2f7e9d4 | 1295 | { |
VivaPenguinos | 6:3019f2f7e9d4 | 1296 | int PowerInput = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 1297 | if(PRO == 1) { |
VivaPenguinos | 6:3019f2f7e9d4 | 1298 | NO_Light(7); |
VivaPenguinos | 6:3019f2f7e9d4 | 1299 | NO_Light(8); |
VivaPenguinos | 6:3019f2f7e9d4 | 1300 | // Process 3 |
VivaPenguinos | 6:3019f2f7e9d4 | 1301 | STBY = 1; |
VivaPenguinos | 6:3019f2f7e9d4 | 1302 | PRO = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 1303 | do { |
VivaPenguinos | 6:3019f2f7e9d4 | 1304 | if(PRO == 1) { |
VivaPenguinos | 6:3019f2f7e9d4 | 1305 | // Process 4 |
VivaPenguinos | 6:3019f2f7e9d4 | 1306 | STBY = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 1307 | //N00V37 |
VivaPenguinos | 6:3019f2f7e9d4 | 1308 | Noun_Number1 = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 1309 | Noun_Number2 = 0; |
VivaPenguinos | 6:3019f2f7e9d4 | 1310 | Verb_Number1 = 2; |
VivaPenguinos | 6:3019f2f7e9d4 | 1311 | Verb_Number2 = 8; |
VivaPenguinos | 6:3019f2f7e9d4 | 1312 | // Process 5-7 |
VivaPenguinos | 6:3019f2f7e9d4 | 1313 | Enter_Button(); |
VivaPenguinos | 6:3019f2f7e9d4 | 1314 | PowerInput = 1; |
VivaPenguinos | 6:3019f2f7e9d4 | 1315 | }// 2nd PRO For turning on. |
VivaPenguinos | 6:3019f2f7e9d4 | 1316 | }while (PowerInput == 0);// While 1 |
VivaPenguinos | 6:3019f2f7e9d4 | 1317 | }//PRO == 1 |
VivaPenguinos | 6:3019f2f7e9d4 | 1318 | } |
VivaPenguinos | 5:5f08974ef8bb | 1319 | |
VivaPenguinos | 5:5f08974ef8bb | 1320 | // Load Component 1 into R1 |
VivaPenguinos | 5:5f08974ef8bb | 1321 | int R1_Component() |
VivaPenguinos | 5:5f08974ef8bb | 1322 | { |
VivaPenguinos | 5:5f08974ef8bb | 1323 | R1_POS = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1324 | R1_NEG = 0; |
VivaPenguinos | 5:5f08974ef8bb | 1325 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1326 | do { |
VivaPenguinos | 5:5f08974ef8bb | 1327 | R_GET(3); |
VivaPenguinos | 5:5f08974ef8bb | 1328 | V_A = 0x02; |
VivaPenguinos | 5:5f08974ef8bb | 1329 | V_B = 0x01; |
VivaPenguinos | 5:5f08974ef8bb | 1330 | N_A = 0x02; |
VivaPenguinos | 5:5f08974ef8bb | 1331 | N_B = 0x09; |
VivaPenguinos | 5:5f08974ef8bb | 1332 | R_GET(3); |
VivaPenguinos | 5:5f08974ef8bb | 1333 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1334 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 1335 | R_GET(3); |
VivaPenguinos | 5:5f08974ef8bb | 1336 | NO_Light(4); |
VivaPenguinos | 5:5f08974ef8bb | 1337 | NO_Light(5); |
VivaPenguinos | 5:5f08974ef8bb | 1338 | R_GET(3); |
VivaPenguinos | 5:5f08974ef8bb | 1339 | wait(.5); |
VivaPenguinos | 5:5f08974ef8bb | 1340 | } while (R3_Position != 7); |
VivaPenguinos | 5:5f08974ef8bb | 1341 | R_Position = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1342 | |
VivaPenguinos | 5:5f08974ef8bb | 1343 | return R_Concatenate(3); |
VivaPenguinos | 5:5f08974ef8bb | 1344 | } |
VivaPenguinos | 4:99535d368a9f | 1345 | |
VivaPenguinos | 4:99535d368a9f | 1346 | // This is used to concatenate Row 3, Useful for when verifying inputs. |
VivaPenguinos | 4:99535d368a9f | 1347 | int R_Concatenate(int C) { |
VivaPenguinos | 4:99535d368a9f | 1348 | |
VivaPenguinos | 4:99535d368a9f | 1349 | // Used for concatenation only |
VivaPenguinos | 4:99535d368a9f | 1350 | int RAB = 0; |
VivaPenguinos | 4:99535d368a9f | 1351 | int RCD = 0; |
VivaPenguinos | 4:99535d368a9f | 1352 | int RABCD = 0; |
VivaPenguinos | 4:99535d368a9f | 1353 | int RABCDE = 0; |
VivaPenguinos | 4:99535d368a9f | 1354 | |
VivaPenguinos | 4:99535d368a9f | 1355 | // Actual Physical Interaces, Row Physical |
VivaPenguinos | 4:99535d368a9f | 1356 | int RPA = 0; |
VivaPenguinos | 4:99535d368a9f | 1357 | int RPB = 0; |
VivaPenguinos | 4:99535d368a9f | 1358 | int RPC = 0; |
VivaPenguinos | 4:99535d368a9f | 1359 | int RPD = 0; |
VivaPenguinos | 4:99535d368a9f | 1360 | int RPE = 0; |
VivaPenguinos | 4:99535d368a9f | 1361 | |
VivaPenguinos | 4:99535d368a9f | 1362 | // This if Statement compares which rows to concatenate then replaces the variables with the correct one. |
VivaPenguinos | 4:99535d368a9f | 1363 | if (C == 3) { |
VivaPenguinos | 4:99535d368a9f | 1364 | RPA = R3_A; |
VivaPenguinos | 4:99535d368a9f | 1365 | RPB = R3_B; |
VivaPenguinos | 4:99535d368a9f | 1366 | RPC = R3_C; |
VivaPenguinos | 4:99535d368a9f | 1367 | RPD = R3_D; |
VivaPenguinos | 4:99535d368a9f | 1368 | RPE = R3_E; |
VivaPenguinos | 4:99535d368a9f | 1369 | } |
VivaPenguinos | 4:99535d368a9f | 1370 | if (C == 2) { |
VivaPenguinos | 4:99535d368a9f | 1371 | RPA = R2_A; |
VivaPenguinos | 4:99535d368a9f | 1372 | RPB = R3_B; |
VivaPenguinos | 4:99535d368a9f | 1373 | RPC = R2_C; |
VivaPenguinos | 4:99535d368a9f | 1374 | RPD = R2_D; |
VivaPenguinos | 4:99535d368a9f | 1375 | RPE = R2_E; |
VivaPenguinos | 4:99535d368a9f | 1376 | } |
VivaPenguinos | 4:99535d368a9f | 1377 | if (C == 1) { |
VivaPenguinos | 4:99535d368a9f | 1378 | RPA = R1_A; |
VivaPenguinos | 4:99535d368a9f | 1379 | RPB = R1_B; |
VivaPenguinos | 4:99535d368a9f | 1380 | RPC = R1_C; |
VivaPenguinos | 4:99535d368a9f | 1381 | RPD = R1_D; |
VivaPenguinos | 4:99535d368a9f | 1382 | RPE = R1_E; |
VivaPenguinos | 3:29cff763ae36 | 1383 | } |
VivaPenguinos | 4:99535d368a9f | 1384 | RAB = concatenate(RPA, RPB); // R3A + R3B |
VivaPenguinos | 4:99535d368a9f | 1385 | RCD = concatenate(RPC, RPD); // R3C + R3D |
VivaPenguinos | 4:99535d368a9f | 1386 | RABCD = concatenate(RAB, RCD); // R3AB + R3CD |
VivaPenguinos | 4:99535d368a9f | 1387 | RABCDE = concatenate(RABCD, RPE); // R3ABCD = R3E |
VivaPenguinos | 4:99535d368a9f | 1388 | //Debug Use: |
VivaPenguinos | 4:99535d368a9f | 1389 | //pc.printf("%d\n", RAB); |
VivaPenguinos | 4:99535d368a9f | 1390 | //pc.printf("%d\n", RCD); |
VivaPenguinos | 4:99535d368a9f | 1391 | //pc.printf("%d\n", RABCD); |
VivaPenguinos | 4:99535d368a9f | 1392 | //pc.printf("%d\n", RABCDE); |
VivaPenguinos | 4:99535d368a9f | 1393 | return RABCDE; |
VivaPenguinos | 4:99535d368a9f | 1394 | } |
VivaPenguinos | 4:99535d368a9f | 1395 | |
VivaPenguinos | 4:99535d368a9f | 1396 | |
VivaPenguinos | 4:99535d368a9f | 1397 | // Concatenate two Integers. Credits to Mooing Duck. http://stackoverflow.com/questions/12700497/how-to-concatenate-two-integers-in-c |
VivaPenguinos | 4:99535d368a9f | 1398 | // Decided not modify the code to do 5 at a time since I can use it to concatenate the Verb, Noun, and Program Number. |
VivaPenguinos | 4:99535d368a9f | 1399 | unsigned concatenate(unsigned x, unsigned y) { |
VivaPenguinos | 4:99535d368a9f | 1400 | unsigned pow = 10; |
VivaPenguinos | 4:99535d368a9f | 1401 | while(y >= pow) |
VivaPenguinos | 4:99535d368a9f | 1402 | pow *= 10; |
VivaPenguinos | 4:99535d368a9f | 1403 | return x * pow + y; |
VivaPenguinos | 4:99535d368a9f | 1404 | } |
VivaPenguinos | 4:99535d368a9f | 1405 | |
VivaPenguinos | 4:99535d368a9f | 1406 | void R_GET(int R) |
VivaPenguinos | 4:99535d368a9f | 1407 | { |
VivaPenguinos | 4:99535d368a9f | 1408 | if (R == 3) { |
VivaPenguinos | 5:5f08974ef8bb | 1409 | R3_POS = R_Pos; |
VivaPenguinos | 5:5f08974ef8bb | 1410 | R3_NEG = R_Neg; |
VivaPenguinos | 4:99535d368a9f | 1411 | R3_A = RVA; |
VivaPenguinos | 4:99535d368a9f | 1412 | R3_B = RVB; |
VivaPenguinos | 4:99535d368a9f | 1413 | R3_C = RVC; |
VivaPenguinos | 4:99535d368a9f | 1414 | R3_D = RVD; |
VivaPenguinos | 4:99535d368a9f | 1415 | R3_E = RVE; |
VivaPenguinos | 4:99535d368a9f | 1416 | R3_Position = R_Position; |
VivaPenguinos | 4:99535d368a9f | 1417 | } |
VivaPenguinos | 4:99535d368a9f | 1418 | if (R == 2) { |
VivaPenguinos | 5:5f08974ef8bb | 1419 | R2_POS = R_Pos; |
VivaPenguinos | 5:5f08974ef8bb | 1420 | R2_NEG = R_Neg; |
VivaPenguinos | 4:99535d368a9f | 1421 | R2_A = RVA; |
VivaPenguinos | 4:99535d368a9f | 1422 | R2_B = RVB; |
VivaPenguinos | 4:99535d368a9f | 1423 | R2_C = RVC; |
VivaPenguinos | 4:99535d368a9f | 1424 | R2_D = RVD; |
VivaPenguinos | 4:99535d368a9f | 1425 | R2_E = RVE; |
VivaPenguinos | 4:99535d368a9f | 1426 | R2_Position = R_Position; |
VivaPenguinos | 4:99535d368a9f | 1427 | } |
VivaPenguinos | 4:99535d368a9f | 1428 | if (R == 1) { |
VivaPenguinos | 5:5f08974ef8bb | 1429 | R1_POS = R_Pos; |
VivaPenguinos | 5:5f08974ef8bb | 1430 | R1_NEG = R_Neg; |
VivaPenguinos | 4:99535d368a9f | 1431 | R1_A = RVA; |
VivaPenguinos | 4:99535d368a9f | 1432 | R1_B = RVB; |
VivaPenguinos | 4:99535d368a9f | 1433 | R1_C = RVC; |
VivaPenguinos | 4:99535d368a9f | 1434 | R1_D = RVD; |
VivaPenguinos | 4:99535d368a9f | 1435 | R1_E = RVE; |
VivaPenguinos | 4:99535d368a9f | 1436 | R1_Position = R_Position; |
VivaPenguinos | 4:99535d368a9f | 1437 | } |
VivaPenguinos | 4:99535d368a9f | 1438 | |
VivaPenguinos | 5:5f08974ef8bb | 1439 | switch (R_Position) { |
VivaPenguinos | 4:99535d368a9f | 1440 | case 1: |
VivaPenguinos | 4:99535d368a9f | 1441 | if (Index >-1) { |
VivaPenguinos | 5:5f08974ef8bb | 1442 | pc.printf("Plus-Minus\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1443 | RP = Button_Sort(Index); |
VivaPenguinos | 5:5f08974ef8bb | 1444 | if (RP == 0x10) { |
VivaPenguinos | 5:5f08974ef8bb | 1445 | R_Pos = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1446 | pc.printf("+"); |
VivaPenguinos | 5:5f08974ef8bb | 1447 | } else if (RP == 0x11) { |
VivaPenguinos | 5:5f08974ef8bb | 1448 | R_Neg = 1; |
VivaPenguinos | 5:5f08974ef8bb | 1449 | } |
VivaPenguinos | 5:5f08974ef8bb | 1450 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1451 | R_Position = 2; |
VivaPenguinos | 5:5f08974ef8bb | 1452 | } |
VivaPenguinos | 5:5f08974ef8bb | 1453 | |
VivaPenguinos | 5:5f08974ef8bb | 1454 | case 2: |
VivaPenguinos | 5:5f08974ef8bb | 1455 | if (Index >-1) { |
VivaPenguinos | 4:99535d368a9f | 1456 | pc.printf("RA\n"); |
VivaPenguinos | 4:99535d368a9f | 1457 | RA = Button_Sort(Index); |
VivaPenguinos | 4:99535d368a9f | 1458 | RVA = RA; |
VivaPenguinos | 4:99535d368a9f | 1459 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 1460 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1461 | R_Position = 3; |
VivaPenguinos | 4:99535d368a9f | 1462 | } |
VivaPenguinos | 5:5f08974ef8bb | 1463 | case 3: |
VivaPenguinos | 4:99535d368a9f | 1464 | if (Index >-1) { |
VivaPenguinos | 4:99535d368a9f | 1465 | pc.printf("RB\n"); |
VivaPenguinos | 4:99535d368a9f | 1466 | RB = Button_Sort(Index); |
VivaPenguinos | 4:99535d368a9f | 1467 | RVB = RB; |
VivaPenguinos | 4:99535d368a9f | 1468 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 1469 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1470 | R_Position = 4; |
VivaPenguinos | 4:99535d368a9f | 1471 | } |
VivaPenguinos | 5:5f08974ef8bb | 1472 | case 4: |
VivaPenguinos | 4:99535d368a9f | 1473 | if (Index >-1) { |
VivaPenguinos | 4:99535d368a9f | 1474 | pc.printf("RC\n"); |
VivaPenguinos | 4:99535d368a9f | 1475 | RC = Button_Sort(Index); |
VivaPenguinos | 4:99535d368a9f | 1476 | RVC = RC; |
VivaPenguinos | 4:99535d368a9f | 1477 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 1478 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1479 | R_Position = 5; |
VivaPenguinos | 4:99535d368a9f | 1480 | } |
VivaPenguinos | 5:5f08974ef8bb | 1481 | case 5: |
VivaPenguinos | 4:99535d368a9f | 1482 | if (Index >-1) { |
VivaPenguinos | 4:99535d368a9f | 1483 | pc.printf("RD\n"); |
VivaPenguinos | 4:99535d368a9f | 1484 | RD = Button_Sort(Index); |
VivaPenguinos | 4:99535d368a9f | 1485 | RVD = RD; |
VivaPenguinos | 4:99535d368a9f | 1486 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 1487 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1488 | R_Position = 6; |
VivaPenguinos | 4:99535d368a9f | 1489 | } |
VivaPenguinos | 5:5f08974ef8bb | 1490 | case 6: |
VivaPenguinos | 4:99535d368a9f | 1491 | if (Index >-1) { |
VivaPenguinos | 4:99535d368a9f | 1492 | pc.printf("RE\n"); |
VivaPenguinos | 4:99535d368a9f | 1493 | RE = Button_Sort(Index); |
VivaPenguinos | 4:99535d368a9f | 1494 | RVE = RE; |
VivaPenguinos | 4:99535d368a9f | 1495 | Shift(); |
VivaPenguinos | 4:99535d368a9f | 1496 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1497 | R_Position = 7; |
VivaPenguinos | 5:5f08974ef8bb | 1498 | } |
VivaPenguinos | 5:5f08974ef8bb | 1499 | } |
VivaPenguinos | 5:5f08974ef8bb | 1500 | } |
VivaPenguinos | 5:5f08974ef8bb | 1501 | |
VivaPenguinos | 5:5f08974ef8bb | 1502 | // When a value is required for Enter, The output is displayed via the Noun display Hence the Name N_GET not E_GET |
VivaPenguinos | 5:5f08974ef8bb | 1503 | void N_GET() |
VivaPenguinos | 5:5f08974ef8bb | 1504 | { |
VivaPenguinos | 5:5f08974ef8bb | 1505 | N_A = NA; |
VivaPenguinos | 5:5f08974ef8bb | 1506 | N_B = NB; |
VivaPenguinos | 5:5f08974ef8bb | 1507 | |
VivaPenguinos | 5:5f08974ef8bb | 1508 | switch (N_Position) { |
VivaPenguinos | 5:5f08974ef8bb | 1509 | case 1: |
VivaPenguinos | 5:5f08974ef8bb | 1510 | if (Index > -1) { |
VivaPenguinos | 5:5f08974ef8bb | 1511 | pc.printf("NA\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1512 | NA = Button_Sort(Index); |
VivaPenguinos | 5:5f08974ef8bb | 1513 | Enter_Number1 = NA; |
VivaPenguinos | 5:5f08974ef8bb | 1514 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1515 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1516 | N_Position = 2; |
VivaPenguinos | 5:5f08974ef8bb | 1517 | } |
VivaPenguinos | 5:5f08974ef8bb | 1518 | case 2: |
VivaPenguinos | 5:5f08974ef8bb | 1519 | if (Index > -1) { |
VivaPenguinos | 5:5f08974ef8bb | 1520 | pc.printf("NB\n"); |
VivaPenguinos | 5:5f08974ef8bb | 1521 | NB = Button_Sort(Index); |
VivaPenguinos | 5:5f08974ef8bb | 1522 | Enter_Number2 = NB; |
VivaPenguinos | 5:5f08974ef8bb | 1523 | Shift(); |
VivaPenguinos | 5:5f08974ef8bb | 1524 | Index = -1; |
VivaPenguinos | 5:5f08974ef8bb | 1525 | N_Position = 3; |
VivaPenguinos | 4:99535d368a9f | 1526 | } |
VivaPenguinos | 4:99535d368a9f | 1527 | } |
VivaPenguinos | 4:99535d368a9f | 1528 | |
VivaPenguinos | 4:99535d368a9f | 1529 | } |
VivaPenguinos | 4:99535d368a9f | 1530 |