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

Hardware

Committer:
VivaPenguinos
Date:
Fri Aug 15 20:27:26 2014 +0000
Revision:
5:5f08974ef8bb
Parent:
4:99535d368a9f
Child:
6:3019f2f7e9d4
Contains P00, P01, P02, R1_Component; Edited R_GET() Function for indicator lights; Edited GET_Config(); Added Indicator Lights; Added R1_Component

Who changed what in which revision?

UserRevisionLine numberNew 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 5:5f08974ef8bb 4 Version 0.05: July. 24 2014
VivaPenguinos 5:5f08974ef8bb 5 - Indicator lights added
VivaPenguinos 5:5f08974ef8bb 6 - Included Comp ACTY light
VivaPenguinos 5:5f08974ef8bb 7 - Added all indicator lights into Blink all. (Doesn't follow format correctly yet)
VivaPenguinos 5:5f08974ef8bb 8 - R_GET() function now includes the Positive and negative indicator lights for the R rows. (Function has yet to be tested)
VivaPenguinos 5:5f08974ef8bb 9 - GET_Config function during value checking now checks whether the indicator lights for Positive are on or off. (Has yet to be tested also)
VivaPenguinos 5:5f08974ef8bb 10 - P00 - Idling Program Completed
VivaPenguinos 5:5f08974ef8bb 11 - P01 - PreLaunch Initialization Program Completed
VivaPenguinos 5:5f08974ef8bb 12 - P02 - PreLaunch Gyrocompassing Program Completed
VivaPenguinos 5:5f08974ef8bb 13 - Prelaunch_Gyrocompassing_Configure Completed
VivaPenguinos 5:5f08974ef8bb 14 - R1_Component Added
VivaPenguinos 4:99535d368a9f 15
VivaPenguinos 0:3ff58b093415 16 Notable Credits:
VivaPenguinos 0:3ff58b093415 17 NASA! - Release of technical documentations regarding the AGC and DSKY
VivaPenguinos 0:3ff58b093415 18 Ron Burkley and Contributers of "Virtual AGC — AGS — LVDC — Gemini" - Providing Technical documentations, Source Code, explanations,
VivaPenguinos 0:3ff58b093415 19 and refrences on other sites to make this project successful
VivaPenguinos 4:99535d368a9f 20 Warning: This may contain author's crude language, and random thoughts.
VivaPenguinos 4:99535d368a9f 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 4:99535d368a9f 59
VivaPenguinos 4:99535d368a9f 60 Shift Registers Data:
VivaPenguinos 4:99535d368a9f 61 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 62 R1_A [P_A | P_B]
VivaPenguinos 4:99535d368a9f 63 R1_B
VivaPenguinos 4:99535d368a9f 64 R1_C [V_A | V_B] [N_A | N_B]
VivaPenguinos 4:99535d368a9f 65 R1_D
VivaPenguinos 4:99535d368a9f 66 R1_E [R3_E | R3_D | R3_C | R3_B | R3_A]
VivaPenguinos 4:99535d368a9f 67 R2_A
VivaPenguinos 4:99535d368a9f 68 R2_B [R2_E | R2_D | R2_C | R2_B | R2_A]
VivaPenguinos 4:99535d368a9f 69 R2_C
VivaPenguinos 4:99535d368a9f 70 R2_D [R1_E | R1_D | R1_C | R1_B | R1_A]
VivaPenguinos 4:99535d368a9f 71 R2_E
VivaPenguinos 4:99535d368a9f 72 R3_A
VivaPenguinos 4:99535d368a9f 73 R3_B
VivaPenguinos 4:99535d368a9f 74 R3_C
VivaPenguinos 4:99535d368a9f 75 R3_D
VivaPenguinos 4:99535d368a9f 76 R3_E
VivaPenguinos 4:99535d368a9f 77 V_A
VivaPenguinos 4:99535d368a9f 78 V_B
VivaPenguinos 4:99535d368a9f 79 N_A
VivaPenguinos 4:99535d368a9f 80 N_B
VivaPenguinos 4:99535d368a9f 81 P_A
VivaPenguinos 4:99535d368a9f 82 P_B
VivaPenguinos 3:29cff763ae36 83 */
VivaPenguinos 3:29cff763ae36 84
VivaPenguinos 3:29cff763ae36 85 // For RTC
VivaPenguinos 3:29cff763ae36 86 #define SCLK PTC5
VivaPenguinos 3:29cff763ae36 87 #define IO PTC4
VivaPenguinos 3:29cff763ae36 88 #define CE PTC3
VivaPenguinos 3:29cff763ae36 89
VivaPenguinos 3:29cff763ae36 90 // Comment Line if DS1302 is already running
VivaPenguinos 3:29cff763ae36 91 #define INITIAL_RUN
VivaPenguinos 3:29cff763ae36 92
VivaPenguinos 0:3ff58b093415 93 using namespace std;
VivaPenguinos 0:3ff58b093415 94 #include "mbed.h"
VivaPenguinos 1:24446776f0d2 95 #include "Keypad.h" // Keypad
VivaPenguinos 3:29cff763ae36 96 #include "DS1302.h" // RTC for DS1032
VivaPenguinos 4:99535d368a9f 97
VivaPenguinos 3:29cff763ae36 98 DS1302 clk(SCLK, IO, CE); //DS1302 clk(SCLK, IO, PTC3);
VivaPenguinos 0:3ff58b093415 99
VivaPenguinos 0:3ff58b093415 100 //Declare Variables
VivaPenguinos 4:99535d368a9f 101 // int shift = 0; // Shift Data
VivaPenguinos 0:3ff58b093415 102 // In the Arduino Version it uses a String. Will use an Int instead to see if this works on Mbed
VivaPenguinos 1:24446776f0d2 103 int Verb_Number1 = 0;
VivaPenguinos 1:24446776f0d2 104 int Verb_Number2 = 0;
VivaPenguinos 1:24446776f0d2 105 int Noun_Number1 = 0;
VivaPenguinos 1:24446776f0d2 106 int Noun_Number2 = 0;
VivaPenguinos 1:24446776f0d2 107 int Enter_Number1 = 0;
VivaPenguinos 1:24446776f0d2 108 int Enter_Number2 = 0;
VivaPenguinos 1:24446776f0d2 109 int Verb; // DSKY Verb
VivaPenguinos 1:24446776f0d2 110 int Noun; // DSkY Noun
VivaPenguinos 1:24446776f0d2 111 int Enter; // DSKY Enter
VivaPenguinos 4:99535d368a9f 112
VivaPenguinos 4:99535d368a9f 113 // For shift register use. Refer to shift register data for additional information.
VivaPenguinos 4:99535d368a9f 114 int R1_A = 0x0f;
VivaPenguinos 4:99535d368a9f 115 int R1_B = 0x0f;
VivaPenguinos 4:99535d368a9f 116 int R1_C = 0x0f;
VivaPenguinos 4:99535d368a9f 117 int R1_D = 0x0f;
VivaPenguinos 4:99535d368a9f 118 int R1_E = 0x0f;
VivaPenguinos 4:99535d368a9f 119 int R2_A = 0x0f;
VivaPenguinos 4:99535d368a9f 120 int R2_B = 0x0f;
VivaPenguinos 4:99535d368a9f 121 int R2_C = 0x0f;
VivaPenguinos 4:99535d368a9f 122 int R2_D = 0x0f;
VivaPenguinos 4:99535d368a9f 123 int R2_E = 0x0f;
VivaPenguinos 4:99535d368a9f 124 int R3_A = 0x0f;
VivaPenguinos 4:99535d368a9f 125 int R3_B = 0x0f;
VivaPenguinos 4:99535d368a9f 126 int R3_C = 0x0f;
VivaPenguinos 4:99535d368a9f 127 int R3_D = 0x0f;
VivaPenguinos 4:99535d368a9f 128 int R3_E = 0x0f;
VivaPenguinos 4:99535d368a9f 129 int V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 130 int V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 131 int N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 132 int N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 133 int P_A = 0x0f;
VivaPenguinos 4:99535d368a9f 134 int P_B = 0x0f;
VivaPenguinos 4:99535d368a9f 135
VivaPenguinos 5:5f08974ef8bb 136 // For R use.
VivaPenguinos 5:5f08974ef8bb 137 int R_Pos = 0;
VivaPenguinos 5:5f08974ef8bb 138 int R_Neg = 0;
VivaPenguinos 4:99535d368a9f 139 int RA = 0;
VivaPenguinos 4:99535d368a9f 140 int RB = 0;
VivaPenguinos 4:99535d368a9f 141 int RC = 0;
VivaPenguinos 4:99535d368a9f 142 int RD = 0;
VivaPenguinos 4:99535d368a9f 143 int RE = 0;
VivaPenguinos 5:5f08974ef8bb 144 int RP = 0;
VivaPenguinos 4:99535d368a9f 145 int RVA = 0x0f;
VivaPenguinos 4:99535d368a9f 146 int RVB = 0x0f;
VivaPenguinos 4:99535d368a9f 147 int RVC = 0x0f;
VivaPenguinos 4:99535d368a9f 148 int RVD = 0x0f;
VivaPenguinos 4:99535d368a9f 149 int RVE = 0x0f;
VivaPenguinos 4:99535d368a9f 150 int R_Position = 1;
VivaPenguinos 4:99535d368a9f 151 int R1_Position = 1;
VivaPenguinos 4:99535d368a9f 152 int R2_Position = 1;
VivaPenguinos 4:99535d368a9f 153 int R3_Position = 1;
VivaPenguinos 4:99535d368a9f 154 int GET_Config_Time = 0;
VivaPenguinos 4:99535d368a9f 155
VivaPenguinos 5:5f08974ef8bb 156 // For N Use.
VivaPenguinos 5:5f08974ef8bb 157 int NA = 0x0f;
VivaPenguinos 5:5f08974ef8bb 158 int NB = 0x0f;
VivaPenguinos 5:5f08974ef8bb 159 int N_Position = 1;
VivaPenguinos 5:5f08974ef8bb 160
VivaPenguinos 5:5f08974ef8bb 161 // PC Variables (Future use)
VivaPenguinos 5:5f08974ef8bb 162 int IMUPWR = 1;
VivaPenguinos 5:5f08974ef8bb 163
VivaPenguinos 5:5f08974ef8bb 164 // DSKY Variables
VivaPenguinos 5:5f08974ef8bb 165 int LAUNCHAZ = 0; // LAUNCH AZIMUTH
VivaPenguinos 5:5f08974ef8bb 166 int R1_COMP;
VivaPenguinos 5:5f08974ef8bb 167
VivaPenguinos 3:29cff763ae36 168 // Keypad
VivaPenguinos 1:24446776f0d2 169 char Keytable[] = { '1', '2', '3', '+', // R0
VivaPenguinos 1:24446776f0d2 170 '4', '5', '6', '-', // R1
VivaPenguinos 1:24446776f0d2 171 '7', '8', '9', 'E', // R2
VivaPenguinos 1:24446776f0d2 172 'V', '0', 'N', 'R', // R3
VivaPenguinos 1:24446776f0d2 173 };
VivaPenguinos 4:99535d368a9f 174 // C0 C1 C2 C3
VivaPenguinos 1:24446776f0d2 175
VivaPenguinos 3:29cff763ae36 176 // RTC Variables
VivaPenguinos 3:29cff763ae36 177 int TIME_VALUE = 1397702161;
VivaPenguinos 4:99535d368a9f 178 int Time_Difference = 0%60;
VivaPenguinos 3:29cff763ae36 179
VivaPenguinos 3:29cff763ae36 180 // Button State
VivaPenguinos 1:24446776f0d2 181 int32_t Index = -1; // Button
VivaPenguinos 1:24446776f0d2 182 int State;
VivaPenguinos 0:3ff58b093415 183
VivaPenguinos 0:3ff58b093415 184 // Function Declaration
VivaPenguinos 5:5f08974ef8bb 185 void Interruption();
VivaPenguinos 1:24446776f0d2 186 void Verb_Button();
VivaPenguinos 1:24446776f0d2 187 void Noun_Button();
VivaPenguinos 1:24446776f0d2 188 void Enter_Button();
VivaPenguinos 1:24446776f0d2 189 void compare();
VivaPenguinos 0:3ff58b093415 190 void blinkAll(int amount, int delay);// Function that Blinks all LED
VivaPenguinos 4:99535d368a9f 191 void Shift(); // Function that shifts all data
VivaPenguinos 5:5f08974ef8bb 192 void R_GET(int R); // Grab inputs for Rows
VivaPenguinos 5:5f08974ef8bb 193 void N_GET(); // Grab inputs for Noun
VivaPenguinos 5:5f08974ef8bb 194 void NO_Light(int L); // Configures shift registers to 0
VivaPenguinos 5:5f08974ef8bb 195 void PreLaunch_Gyrocompassing_Configure(); // For the inputs of the PreLaunch_Gyrocompassing
VivaPenguinos 5:5f08974ef8bb 196 int Button_Sort(int sort); // Function that sorts Verb Values
VivaPenguinos 4:99535d368a9f 197 int R_Concatenate(int C); // Used for concatenating information
VivaPenguinos 0:3ff58b093415 198 //void ShiftingOut(char myDataOut);
VivaPenguinos 0:3ff58b093415 199
VivaPenguinos 3:29cff763ae36 200 // Program Names
VivaPenguinos 5:5f08974ef8bb 201 void Ground_Elapse_Time(); // Ground Elapse Time
VivaPenguinos 5:5f08974ef8bb 202 void Test_Lights(); // Test Lights
VivaPenguinos 5:5f08974ef8bb 203 void GET_Config(); // Configures Ground Elapse Time
VivaPenguinos 5:5f08974ef8bb 204 void CMC_Idle(); // P00 - CMC Idling Program
VivaPenguinos 5:5f08974ef8bb 205 void PreLaunch_Initialization(); // P01 - Prelaunch - Initialization Program
VivaPenguinos 5:5f08974ef8bb 206 void PreLaunch_Gyrocompassing(); // P02 - Prelaunch - Gyrocompassing Program
VivaPenguinos 5:5f08974ef8bb 207 int R1_Component(); // Load Component into R1
VivaPenguinos 1:24446776f0d2 208
VivaPenguinos 0:3ff58b093415 209 // Pin modes for each pins
VivaPenguinos 3:29cff763ae36 210 DigitalOut LatchPin(PTC6); //Pin for ST_CP of 74HC595 Pin # 12
VivaPenguinos 3:29cff763ae36 211 DigitalOut ClockPin(PTC10); //Pin for SH_CP of 74HC595 Pin # 11
VivaPenguinos 3:29cff763ae36 212 DigitalOut DataPin(PTC11); //Pin for to DS of 74HC595 Pin # 14
VivaPenguinos 0:3ff58b093415 213
VivaPenguinos 5:5f08974ef8bb 214 // Indicator Lights
VivaPenguinos 5:5f08974ef8bb 215 DigitalOut UPLINK_ACTY(PTE5);
VivaPenguinos 5:5f08974ef8bb 216 DigitalOut NO_ATT(PTE4);
VivaPenguinos 5:5f08974ef8bb 217 DigitalOut STBY(PTE3);
VivaPenguinos 5:5f08974ef8bb 218 DigitalOut KEY_REL(PTE2);
VivaPenguinos 5:5f08974ef8bb 219 DigitalOut OPP_ERR(PTB11);
VivaPenguinos 5:5f08974ef8bb 220 DigitalOut TEMP(PTB10);
VivaPenguinos 5:5f08974ef8bb 221 DigitalOut GIMBAL_LOCK(PTB9);
VivaPenguinos 5:5f08974ef8bb 222 DigitalOut PROG(PTB8);
VivaPenguinos 5:5f08974ef8bb 223 DigitalOut RESTART(PTC12);
VivaPenguinos 5:5f08974ef8bb 224 DigitalOut TRACKER(PTC13);
VivaPenguinos 5:5f08974ef8bb 225 DigitalOut R1_POS(PTC16);
VivaPenguinos 5:5f08974ef8bb 226 DigitalOut R2_POS(PTC17);
VivaPenguinos 5:5f08974ef8bb 227 DigitalOut R3_POS(PTA16);
VivaPenguinos 5:5f08974ef8bb 228 DigitalOut R1_NEG(PTA17);
VivaPenguinos 5:5f08974ef8bb 229 DigitalOut R2_NEG(PTE31);
VivaPenguinos 5:5f08974ef8bb 230 DigitalOut R3_NEG(PTD6);
VivaPenguinos 5:5f08974ef8bb 231 DigitalOut COMP_ACTY(PTD7);
VivaPenguinos 5:5f08974ef8bb 232
VivaPenguinos 0:3ff58b093415 233 DigitalOut myled(LED1);
VivaPenguinos 0:3ff58b093415 234 Serial pc(USBTX, USBRX); // tx, rx Serial Output to PC Enabling this WILL consume resources. Use only for debug
VivaPenguinos 1:24446776f0d2 235
VivaPenguinos 4:99535d368a9f 236 unsigned concatenate(unsigned x, unsigned y);
VivaPenguinos 4:99535d368a9f 237
VivaPenguinos 1:24446776f0d2 238 uint32_t cbAfterInput(uint32_t index)
VivaPenguinos 1:24446776f0d2 239 {
VivaPenguinos 1:24446776f0d2 240 Index = index;
VivaPenguinos 1:24446776f0d2 241 return 0;
VivaPenguinos 1:24446776f0d2 242 }
VivaPenguinos 1:24446776f0d2 243
VivaPenguinos 0:3ff58b093415 244 int main()
VivaPenguinos 0:3ff58b093415 245 {
VivaPenguinos 4:99535d368a9f 246 pc.printf("Initialization...\n");
VivaPenguinos 0:3ff58b093415 247 wait(1);
VivaPenguinos 4:99535d368a9f 248 pc.printf("Testing shift registers.\n");
VivaPenguinos 0:3ff58b093415 249 blinkAll(4,1);
VivaPenguinos 4:99535d368a9f 250 pc.printf("Shift Register: PASS \n");
VivaPenguinos 0:3ff58b093415 251 wait(1);
VivaPenguinos 4:99535d368a9f 252 pc.printf("Energizing keypad\n");
VivaPenguinos 1:24446776f0d2 253 State = 1;
VivaPenguinos 1:24446776f0d2 254 // r0 r1 r2 r3 c0 c1 c2 c3
VivaPenguinos 1:24446776f0d2 255 Keypad keypad(PTD4, PTA12, PTD3, PTA5, PTA13, PTD5, PTD0, PTD2, 20);
VivaPenguinos 1:24446776f0d2 256 keypad.attach(&cbAfterInput);
VivaPenguinos 1:24446776f0d2 257 keypad.start(); // energize the columns c0-c3 of the keypad
VivaPenguinos 4:99535d368a9f 258 pc.printf("Keypad: PASS \n");
VivaPenguinos 4:99535d368a9f 259 pc.printf("Initialize RTC Clock. \n");
VivaPenguinos 4:99535d368a9f 260 #ifdef INITIAL_RUN
VivaPenguinos 4:99535d368a9f 261 clk.set_time(TIME_VALUE);
VivaPenguinos 4:99535d368a9f 262 #endif
VivaPenguinos 4:99535d368a9f 263 //char storedByte = clk.recallByte(0);
VivaPenguinos 4:99535d368a9f 264 //clk.storeByte(0, storedByte + 1);
VivaPenguinos 4:99535d368a9f 265 pc.printf("RTC: PASS \n");
VivaPenguinos 4:99535d368a9f 266 pc.printf("Welcome to DSKY!\n");
VivaPenguinos 1:24446776f0d2 267 while (1) {
VivaPenguinos 1:24446776f0d2 268 __wfi();
VivaPenguinos 1:24446776f0d2 269 if (Index >-1) {
VivaPenguinos 1:24446776f0d2 270 pc.printf("Interrupted");
VivaPenguinos 1:24446776f0d2 271 pc.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
VivaPenguinos 1:24446776f0d2 272 if (Index == 12) { // Index 12 = Verb Button
VivaPenguinos 4:99535d368a9f 273 Verb_Button(); // Goes to Verb_Button
VivaPenguinos 1:24446776f0d2 274 }
VivaPenguinos 1:24446776f0d2 275 if (Index == 14) { // Index 14 = Noun Button
VivaPenguinos 1:24446776f0d2 276 Noun_Button(); // Goes to Noun_Button
VivaPenguinos 1:24446776f0d2 277 }
VivaPenguinos 1:24446776f0d2 278 if (Index == 11) { // Index 11 = Enter Button
VivaPenguinos 4:99535d368a9f 279 Enter_Button(); // Goes to Enter_Button
VivaPenguinos 1:24446776f0d2 280 }
VivaPenguinos 1:24446776f0d2 281 Index = -1;
VivaPenguinos 1:24446776f0d2 282 }
VivaPenguinos 1:24446776f0d2 283 // Debug use only
VivaPenguinos 1:24446776f0d2 284 //pc.printf("%c", Keytable[Verb_Number1]);
VivaPenguinos 1:24446776f0d2 285 //pc.printf("%c", Keytable[Verb_Number2]);
VivaPenguinos 1:24446776f0d2 286 //pc.printf("%c", Keytable[Noun_Number1]);
VivaPenguinos 1:24446776f0d2 287 //pc.printf("%c", Keytable[Noun_Number2]);
VivaPenguinos 0:3ff58b093415 288 }
VivaPenguinos 1:24446776f0d2 289 }
VivaPenguinos 1:24446776f0d2 290
VivaPenguinos 5:5f08974ef8bb 291 void Interruption()
VivaPenguinos 5:5f08974ef8bb 292 {
VivaPenguinos 5:5f08974ef8bb 293 pc.printf("Interrupted");
VivaPenguinos 5:5f08974ef8bb 294 pc.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
VivaPenguinos 5:5f08974ef8bb 295 if (Index == 12) { // Index 12 = Verb Button
VivaPenguinos 5:5f08974ef8bb 296 Verb_Button(); // Goes to Verb_Button
VivaPenguinos 5:5f08974ef8bb 297 }
VivaPenguinos 5:5f08974ef8bb 298 if (Index == 14) { // Index 14 = Noun Button
VivaPenguinos 5:5f08974ef8bb 299 Noun_Button(); // Goes to Noun_Button
VivaPenguinos 5:5f08974ef8bb 300 }
VivaPenguinos 5:5f08974ef8bb 301 if (Index == 11) { // Index 11 = Enter Button
VivaPenguinos 5:5f08974ef8bb 302 Enter_Button(); // Goes to Enter_Button
VivaPenguinos 5:5f08974ef8bb 303 }
VivaPenguinos 5:5f08974ef8bb 304 Index = -1;
VivaPenguinos 5:5f08974ef8bb 305 }
VivaPenguinos 5:5f08974ef8bb 306
VivaPenguinos 1:24446776f0d2 307 /* 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 308 If other buttons are pressed send it to their perspective locations.
VivaPenguinos 1:24446776f0d2 309 */
VivaPenguinos 1:24446776f0d2 310 void Verb_Button(){
VivaPenguinos 1:24446776f0d2 311 Verbz: // Don't Ask
VivaPenguinos 1:24446776f0d2 312 // All Variables for Verb, Noun and Enter are zeroed out
VivaPenguinos 4:99535d368a9f 313 Verb_Number1 = 0;
VivaPenguinos 4:99535d368a9f 314 Verb_Number2 = 0;
VivaPenguinos 4:99535d368a9f 315 Noun_Number1 = 0;
VivaPenguinos 4:99535d368a9f 316 Noun_Number2 = 0;
VivaPenguinos 4:99535d368a9f 317 Enter_Number1 = 0;
VivaPenguinos 4:99535d368a9f 318 Enter_Number2 = 0;
VivaPenguinos 1:24446776f0d2 319 pc.printf("Please enter a Verb Number");
VivaPenguinos 1:24446776f0d2 320 __wfi();
VivaPenguinos 1:24446776f0d2 321 Verb_Number1 = Index;
VivaPenguinos 1:24446776f0d2 322 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 323 goto Verbz; // Line 110
VivaPenguinos 4:99535d368a9f 324 } else {
VivaPenguinos 4:99535d368a9f 325 V_A = Button_Sort(Verb_Number1);
VivaPenguinos 4:99535d368a9f 326 Shift();
VivaPenguinos 1:24446776f0d2 327 }
VivaPenguinos 1:24446776f0d2 328 //pc.printf("%c", Verb_Number1);
VivaPenguinos 1:24446776f0d2 329 //pc.printf("%c", Keytable[Index]);
VivaPenguinos 1:24446776f0d2 330 __wfi();
VivaPenguinos 1:24446776f0d2 331 Verb_Number2 = Index;
VivaPenguinos 4:99535d368a9f 332 V_B = Button_Sort(Verb_Number2);
VivaPenguinos 4:99535d368a9f 333 Shift();
VivaPenguinos 1:24446776f0d2 334 //pc.printf("%c", Verb_Number2);
VivaPenguinos 1:24446776f0d2 335 //pc.printf("%c", Verb_Number1);
VivaPenguinos 1:24446776f0d2 336 //pc.printf("%c\n", Verb_Number2);
VivaPenguinos 0:3ff58b093415 337 }
VivaPenguinos 1:24446776f0d2 338
VivaPenguinos 1:24446776f0d2 339 /* 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 340 If other buttons are pressed send it to their perspective locations.
VivaPenguinos 1:24446776f0d2 341 */
VivaPenguinos 1:24446776f0d2 342 void Noun_Button()
VivaPenguinos 1:24446776f0d2 343 {
VivaPenguinos 1:24446776f0d2 344 Nounz:
VivaPenguinos 1:24446776f0d2 345 pc.printf("Please enter a Noun Number");
VivaPenguinos 1:24446776f0d2 346 __wfi();
VivaPenguinos 1:24446776f0d2 347 Noun_Number1 = Index;
VivaPenguinos 1:24446776f0d2 348 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 349 goto Nounz;
VivaPenguinos 0:3ff58b093415 350 }
VivaPenguinos 1:24446776f0d2 351 else{
VivaPenguinos 4:99535d368a9f 352 N_A = Button_Sort(Noun_Number1);
VivaPenguinos 4:99535d368a9f 353 Shift();
VivaPenguinos 0:3ff58b093415 354 }
VivaPenguinos 1:24446776f0d2 355 __wfi();
VivaPenguinos 1:24446776f0d2 356 Noun_Number2 = Index;
VivaPenguinos 4:99535d368a9f 357 N_B = Button_Sort(Noun_Number2);
VivaPenguinos 4:99535d368a9f 358 Shift();
VivaPenguinos 1:24446776f0d2 359 }
VivaPenguinos 1:24446776f0d2 360
VivaPenguinos 1:24446776f0d2 361 /* 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 362 */
VivaPenguinos 1:24446776f0d2 363 void Enter_Button()
VivaPenguinos 1:24446776f0d2 364 {
VivaPenguinos 1:24446776f0d2 365 Enterz:
VivaPenguinos 4:99535d368a9f 366 pc.printf("Checking Whether there is a variable stored in Noun or Verb 35\n");
VivaPenguinos 5:5f08974ef8bb 367 if (Noun_Number1 == 0 && Noun_Number2 == 0 && Verb_Number1 != 2 && Verb_Number2 != 5){ // N00V35 // Test Lights
VivaPenguinos 1:24446776f0d2 368 pc.printf("Please enter a Enter Number");
VivaPenguinos 1:24446776f0d2 369 __wfi();
VivaPenguinos 1:24446776f0d2 370 Enter_Number1 = Index;
VivaPenguinos 1:24446776f0d2 371 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 372 goto Enterz;
VivaPenguinos 1:24446776f0d2 373 }
VivaPenguinos 1:24446776f0d2 374 else{
VivaPenguinos 1:24446776f0d2 375 Button_Sort(Enter_Number1);
VivaPenguinos 1:24446776f0d2 376 }
VivaPenguinos 1:24446776f0d2 377 __wfi();
VivaPenguinos 1:24446776f0d2 378 Enter_Number2 = Index;
VivaPenguinos 1:24446776f0d2 379 Button_Sort(Enter_Number2);
VivaPenguinos 1:24446776f0d2 380 }
VivaPenguinos 5:5f08974ef8bb 381 // This is for P01
VivaPenguinos 5:5f08974ef8bb 382 else if(Noun_Number1 == 0 && Noun_Number2 == 0 && Verb_Number1 == 2 && Verb_Number2 == 8){ //N00V37
VivaPenguinos 5:5f08974ef8bb 383 pc.printf("This is the P01\n");
VivaPenguinos 5:5f08974ef8bb 384 pc.printf("Please enter a Enter Number\n");
VivaPenguinos 5:5f08974ef8bb 385 //Noun_Number1 = 0x0f;
VivaPenguinos 5:5f08974ef8bb 386 //Noun_Number2 = 0x0f;
VivaPenguinos 5:5f08974ef8bb 387 NO_Light(5);
VivaPenguinos 5:5f08974ef8bb 388 Index = -1;
VivaPenguinos 5:5f08974ef8bb 389 do {
VivaPenguinos 5:5f08974ef8bb 390 N_GET();
VivaPenguinos 5:5f08974ef8bb 391 V_A = 0x03;
VivaPenguinos 5:5f08974ef8bb 392 V_B = 0x07;
VivaPenguinos 5:5f08974ef8bb 393 N_GET();
VivaPenguinos 5:5f08974ef8bb 394 Shift();
VivaPenguinos 5:5f08974ef8bb 395 wait(.5);
VivaPenguinos 5:5f08974ef8bb 396 N_GET();
VivaPenguinos 5:5f08974ef8bb 397 NO_Light(4); // No Light Verb
VivaPenguinos 5:5f08974ef8bb 398 NO_Light(5);
VivaPenguinos 5:5f08974ef8bb 399 N_GET();
VivaPenguinos 5:5f08974ef8bb 400 NO_Light(5);
VivaPenguinos 5:5f08974ef8bb 401 Shift();
VivaPenguinos 5:5f08974ef8bb 402 wait(.5);
VivaPenguinos 5:5f08974ef8bb 403 } while (N_Position != 3);
VivaPenguinos 5:5f08974ef8bb 404 V_A = 3;
VivaPenguinos 5:5f08974ef8bb 405 V_B = 7;
VivaPenguinos 5:5f08974ef8bb 406 N_A = Enter_Number1;
VivaPenguinos 5:5f08974ef8bb 407 N_B = Enter_Number2;
VivaPenguinos 5:5f08974ef8bb 408 Shift();
VivaPenguinos 5:5f08974ef8bb 409 compare();
VivaPenguinos 5:5f08974ef8bb 410 pc.printf("Out of P01, Waiting for Orders\n");
VivaPenguinos 5:5f08974ef8bb 411 // pc.printf("V1 %d \n", Verb_Number1);
VivaPenguinos 5:5f08974ef8bb 412 // pc.printf("V2 %d \n", Verb_Number2);
VivaPenguinos 5:5f08974ef8bb 413 // pc.printf("N1 %d \n", Noun_Number1);
VivaPenguinos 5:5f08974ef8bb 414 // pc.printf("N2 %d \n", Noun_Number2);
VivaPenguinos 5:5f08974ef8bb 415 // pc.printf("E1 %d \n", Enter_Number1);
VivaPenguinos 5:5f08974ef8bb 416 // pc.printf("E2 %d \n", Enter_Number2);
VivaPenguinos 5:5f08974ef8bb 417 N_Position = 1;
VivaPenguinos 5:5f08974ef8bb 418 __wfi();
VivaPenguinos 5:5f08974ef8bb 419 if (Index == 11) { // 11 = Enter Button
VivaPenguinos 5:5f08974ef8bb 420 pc.printf("Compare\n");
VivaPenguinos 5:5f08974ef8bb 421 compare();
VivaPenguinos 5:5f08974ef8bb 422 }
VivaPenguinos 5:5f08974ef8bb 423 else if (Index == 14) {
VivaPenguinos 5:5f08974ef8bb 424 Noun_Button();
VivaPenguinos 5:5f08974ef8bb 425 }
VivaPenguinos 5:5f08974ef8bb 426 else if (Index == 12) {
VivaPenguinos 5:5f08974ef8bb 427 Verb_Button();
VivaPenguinos 5:5f08974ef8bb 428 }
VivaPenguinos 5:5f08974ef8bb 429 Index = -1;
VivaPenguinos 5:5f08974ef8bb 430 }
VivaPenguinos 4:99535d368a9f 431 else {// (Noun_Number1 != 0 && Noun_Number2 != 0){
VivaPenguinos 1:24446776f0d2 432 pc.printf("Check completed, Executing");
VivaPenguinos 4:99535d368a9f 433 Index = -1;
VivaPenguinos 1:24446776f0d2 434 compare();
VivaPenguinos 1:24446776f0d2 435 }
VivaPenguinos 1:24446776f0d2 436
VivaPenguinos 1:24446776f0d2 437 }
VivaPenguinos 1:24446776f0d2 438
VivaPenguinos 1:24446776f0d2 439 // This function is used to sort the button press for Verb and Noun.
VivaPenguinos 4:99535d368a9f 440 int Button_Sort(int Sort)
VivaPenguinos 1:24446776f0d2 441 {
VivaPenguinos 4:99535d368a9f 442 if (Sort == 0){ // Index 0 - Char 1
VivaPenguinos 4:99535d368a9f 443 return 0x01;
VivaPenguinos 1:24446776f0d2 444 }
VivaPenguinos 4:99535d368a9f 445 else if (Sort == 1) { // Index 1 - Char 2
VivaPenguinos 4:99535d368a9f 446 return 0x02;
VivaPenguinos 1:24446776f0d2 447 }
VivaPenguinos 4:99535d368a9f 448 else if (Sort == 2) { // Index 2 - Char 3
VivaPenguinos 4:99535d368a9f 449 return 0x03;
VivaPenguinos 4:99535d368a9f 450 }
VivaPenguinos 4:99535d368a9f 451 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 452 pc.printf("+");
VivaPenguinos 5:5f08974ef8bb 453 return 0x10;
VivaPenguinos 1:24446776f0d2 454 }
VivaPenguinos 4:99535d368a9f 455 else if (Sort == 4) { // Index 4 - Char 4
VivaPenguinos 4:99535d368a9f 456 return 0x04;
VivaPenguinos 4:99535d368a9f 457 }
VivaPenguinos 4:99535d368a9f 458 else if (Sort == 5) { // Index 5 - Char 5
VivaPenguinos 4:99535d368a9f 459 return 0x05;
VivaPenguinos 4:99535d368a9f 460 }
VivaPenguinos 4:99535d368a9f 461 else if (Sort == 6) { // Index 6 - Char 6
VivaPenguinos 4:99535d368a9f 462 return 0x06;
VivaPenguinos 4:99535d368a9f 463 }
VivaPenguinos 4:99535d368a9f 464 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 465 pc.printf("-");
VivaPenguinos 5:5f08974ef8bb 466 return 0x11;
VivaPenguinos 1:24446776f0d2 467 }
VivaPenguinos 4:99535d368a9f 468 else if (Sort == 8) { // Index 8 - Char 7
VivaPenguinos 4:99535d368a9f 469 return 0x07;
VivaPenguinos 4:99535d368a9f 470 }
VivaPenguinos 4:99535d368a9f 471 else if (Sort == 9) { // Index 9 - Char 8
VivaPenguinos 4:99535d368a9f 472 return 0x08;
VivaPenguinos 4:99535d368a9f 473 }
VivaPenguinos 4:99535d368a9f 474 else if (Sort == 10) { // Index 10 - Char 9
VivaPenguinos 4:99535d368a9f 475 return 0x09;
VivaPenguinos 4:99535d368a9f 476 }
VivaPenguinos 4:99535d368a9f 477 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 478 Verb_Button();
VivaPenguinos 4:99535d368a9f 479 }
VivaPenguinos 4:99535d368a9f 480 else if (Sort == 13) { // Index 13 - Char 0
VivaPenguinos 4:99535d368a9f 481 return 0x00;
VivaPenguinos 4:99535d368a9f 482 }
VivaPenguinos 4:99535d368a9f 483 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 484 Noun_Button();
VivaPenguinos 4:99535d368a9f 485 }
VivaPenguinos 1:24446776f0d2 486 else if (Sort == 15) { //comparing the array number NOT what value in the array it is. Actual Array value is R
VivaPenguinos 1:24446776f0d2 487 pc.printf("R");
VivaPenguinos 1:24446776f0d2 488 }
VivaPenguinos 4:99535d368a9f 489 return 0;
VivaPenguinos 1:24446776f0d2 490 }
VivaPenguinos 4:99535d368a9f 491
VivaPenguinos 1:24446776f0d2 492 // 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 493 void compare()
VivaPenguinos 1:24446776f0d2 494 {
VivaPenguinos 1:24446776f0d2 495 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 496 // Configure GET
VivaPenguinos 4:99535d368a9f 497 pc.printf("Display GET");
VivaPenguinos 1:24446776f0d2 498 Ground_Elapse_Time();
VivaPenguinos 4:99535d368a9f 499 } 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 500 // Test Lights
VivaPenguinos 4:99535d368a9f 501 pc.printf("Testing Lights");
VivaPenguinos 4:99535d368a9f 502 Test_Lights();
VivaPenguinos 4:99535d368a9f 503 } 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 504 // GET COnfiguration
VivaPenguinos 4:99535d368a9f 505 pc.printf("GET configuration");
VivaPenguinos 4:99535d368a9f 506 GET_Config();
VivaPenguinos 5:5f08974ef8bb 507 } 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 508 // CMC Idling Program
VivaPenguinos 5:5f08974ef8bb 509 pc.printf("CMC Idling Program");
VivaPenguinos 5:5f08974ef8bb 510 CMC_Idle();
VivaPenguinos 5:5f08974ef8bb 511 } 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 5:5f08974ef8bb 512 pc.printf("Prelaunch or Service - Initialization Program");
VivaPenguinos 5:5f08974ef8bb 513 PreLaunch_Initialization();
VivaPenguinos 5:5f08974ef8bb 514 } //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 515 // R1_Component();
VivaPenguinos 5:5f08974ef8bb 516 //}
VivaPenguinos 5:5f08974ef8bb 517 else {
VivaPenguinos 5:5f08974ef8bb 518 pc.printf("Failed");
VivaPenguinos 0:3ff58b093415 519 }
VivaPenguinos 1:24446776f0d2 520 }
VivaPenguinos 0:3ff58b093415 521
VivaPenguinos 1:24446776f0d2 522 void ShiftingOut(int myDataOut)
VivaPenguinos 1:24446776f0d2 523 {
VivaPenguinos 0:3ff58b093415 524 // This shifts 8 bits out to the MSB first, The the rising edge of the clock, while clock idles low.
VivaPenguinos 0:3ff58b093415 525 // Internal Fucntions
VivaPenguinos 0:3ff58b093415 526 DataPin = 0;
VivaPenguinos 0:3ff58b093415 527 ClockPin = 0;
VivaPenguinos 0:3ff58b093415 528 int i= 0;
VivaPenguinos 0:3ff58b093415 529 int pinState;
VivaPenguinos 0:3ff58b093415 530 // Clears Everything within shift registers
VivaPenguinos 0:3ff58b093415 531 DataPin = 0;
VivaPenguinos 0:3ff58b093415 532 ClockPin = 0;
VivaPenguinos 1:24446776f0d2 533
VivaPenguinos 4:99535d368a9f 534 for (i=3; i>= 0; i--) {
VivaPenguinos 0:3ff58b093415 535 ClockPin = 0;
VivaPenguinos 1:24446776f0d2 536
VivaPenguinos 0:3ff58b093415 537 // Value passed to my data out
VivaPenguinos 0:3ff58b093415 538 if ( myDataOut & (1<<i)) {
VivaPenguinos 0:3ff58b093415 539 pinState = 1;
VivaPenguinos 0:3ff58b093415 540 myled = 1;
VivaPenguinos 4:99535d368a9f 541 //pc.printf("1");
VivaPenguinos 1:24446776f0d2 542 } else {
VivaPenguinos 0:3ff58b093415 543 pinState = 0;
VivaPenguinos 0:3ff58b093415 544 myled = 0;
VivaPenguinos 4:99535d368a9f 545 //pc.printf("0");
VivaPenguinos 0:3ff58b093415 546 }
VivaPenguinos 0:3ff58b093415 547 DataPin = pinState;
VivaPenguinos 0:3ff58b093415 548 ClockPin = 1;
VivaPenguinos 0:3ff58b093415 549 DataPin = 0;
VivaPenguinos 1:24446776f0d2 550 }
VivaPenguinos 4:99535d368a9f 551 //pc.printf("\n");
VivaPenguinos 0:3ff58b093415 552 ClockPin = 0;
VivaPenguinos 0:3ff58b093415 553 DataPin = 1;
VivaPenguinos 1:24446776f0d2 554 }
VivaPenguinos 0:3ff58b093415 555
VivaPenguinos 4:99535d368a9f 556 // This function is used for shifting all Shift_X variables into the 7 segment display.
VivaPenguinos 4:99535d368a9f 557 void Shift()
VivaPenguinos 4:99535d368a9f 558 {
VivaPenguinos 4:99535d368a9f 559 LatchPin = 0;
VivaPenguinos 4:99535d368a9f 560 ShiftingOut(P_B);
VivaPenguinos 4:99535d368a9f 561 ShiftingOut(P_A);
VivaPenguinos 4:99535d368a9f 562 ShiftingOut(V_B);
VivaPenguinos 4:99535d368a9f 563 ShiftingOut(V_A);
VivaPenguinos 4:99535d368a9f 564 ShiftingOut(N_B);
VivaPenguinos 4:99535d368a9f 565 ShiftingOut(N_A);
VivaPenguinos 4:99535d368a9f 566 ShiftingOut(R3_E);
VivaPenguinos 4:99535d368a9f 567 ShiftingOut(R3_D);
VivaPenguinos 4:99535d368a9f 568 ShiftingOut(R3_C);
VivaPenguinos 4:99535d368a9f 569 ShiftingOut(R3_B);
VivaPenguinos 4:99535d368a9f 570 ShiftingOut(R3_A);
VivaPenguinos 4:99535d368a9f 571 ShiftingOut(R2_E);
VivaPenguinos 4:99535d368a9f 572 ShiftingOut(R2_D);
VivaPenguinos 4:99535d368a9f 573 ShiftingOut(R2_C);
VivaPenguinos 4:99535d368a9f 574 ShiftingOut(R2_B);
VivaPenguinos 4:99535d368a9f 575 ShiftingOut(R2_A);
VivaPenguinos 4:99535d368a9f 576 ShiftingOut(R1_E);
VivaPenguinos 4:99535d368a9f 577 ShiftingOut(R1_D);
VivaPenguinos 4:99535d368a9f 578 ShiftingOut(R1_C);
VivaPenguinos 4:99535d368a9f 579 ShiftingOut(R1_B);
VivaPenguinos 4:99535d368a9f 580 ShiftingOut(R1_A);
VivaPenguinos 4:99535d368a9f 581 LatchPin = 1;
VivaPenguinos 4:99535d368a9f 582 }
VivaPenguinos 4:99535d368a9f 583
VivaPenguinos 1:24446776f0d2 584 //blinks the whole registered based on the number of times you want to blink with a certain delay
VivaPenguinos 1:24446776f0d2 585 void blinkAll(int amount, int delay)
VivaPenguinos 1:24446776f0d2 586 {
VivaPenguinos 4:99535d368a9f 587 LatchPin = 0; // Before shift
VivaPenguinos 4:99535d368a9f 588 //ShiftingOut(0);
VivaPenguinos 4:99535d368a9f 589 //ShiftingOut(0);
VivaPenguinos 4:99535d368a9f 590 LatchPin = 1; // Done shift
VivaPenguinos 0:3ff58b093415 591 wait(0.2);
VivaPenguinos 0:3ff58b093415 592 for (int x = 0; x < amount; x++) {
VivaPenguinos 0:3ff58b093415 593 LatchPin = 0;
VivaPenguinos 4:99535d368a9f 594 pc.printf("sending\n");
VivaPenguinos 4:99535d368a9f 595 for (int s = 0; s < 22; s++)
VivaPenguinos 4:99535d368a9f 596 {
VivaPenguinos 4:99535d368a9f 597 ShiftingOut(0x08);
VivaPenguinos 5:5f08974ef8bb 598 UPLINK_ACTY = 1;
VivaPenguinos 5:5f08974ef8bb 599 NO_ATT = 1;
VivaPenguinos 5:5f08974ef8bb 600 STBY = 1;
VivaPenguinos 5:5f08974ef8bb 601 KEY_REL = 1;
VivaPenguinos 5:5f08974ef8bb 602 OPP_ERR = 1;
VivaPenguinos 5:5f08974ef8bb 603 TEMP = 1;
VivaPenguinos 5:5f08974ef8bb 604 GIMBAL_LOCK = 1;
VivaPenguinos 5:5f08974ef8bb 605 PROG = 1;
VivaPenguinos 5:5f08974ef8bb 606 RESTART = 1;
VivaPenguinos 5:5f08974ef8bb 607 TRACKER = 1;
VivaPenguinos 5:5f08974ef8bb 608 R1_POS = 1;
VivaPenguinos 5:5f08974ef8bb 609 R2_POS = 1;
VivaPenguinos 5:5f08974ef8bb 610 R3_POS = 1;
VivaPenguinos 5:5f08974ef8bb 611 R1_NEG = 1;
VivaPenguinos 5:5f08974ef8bb 612 R2_NEG = 1;
VivaPenguinos 5:5f08974ef8bb 613 R3_NEG = 1;
VivaPenguinos 5:5f08974ef8bb 614 COMP_ACTY = 1;
VivaPenguinos 4:99535d368a9f 615 }
VivaPenguinos 0:3ff58b093415 616 LatchPin = 1;
VivaPenguinos 0:3ff58b093415 617 wait(delay);
VivaPenguinos 0:3ff58b093415 618 LatchPin = 0;
VivaPenguinos 4:99535d368a9f 619 for (int s = 0; s < 22; s++)
VivaPenguinos 4:99535d368a9f 620 {
VivaPenguinos 5:5f08974ef8bb 621 ShiftingOut(0x0f);
VivaPenguinos 5:5f08974ef8bb 622 UPLINK_ACTY = 0;
VivaPenguinos 5:5f08974ef8bb 623 NO_ATT = 0;
VivaPenguinos 5:5f08974ef8bb 624 STBY = 0;
VivaPenguinos 5:5f08974ef8bb 625 KEY_REL = 0;
VivaPenguinos 5:5f08974ef8bb 626 OPP_ERR = 0;
VivaPenguinos 5:5f08974ef8bb 627 TEMP = 0;
VivaPenguinos 5:5f08974ef8bb 628 GIMBAL_LOCK = 0;
VivaPenguinos 5:5f08974ef8bb 629 PROG = 0;
VivaPenguinos 5:5f08974ef8bb 630 RESTART = 0;
VivaPenguinos 5:5f08974ef8bb 631 TRACKER = 0;
VivaPenguinos 5:5f08974ef8bb 632 R1_POS = 0;
VivaPenguinos 5:5f08974ef8bb 633 R2_POS = 0;
VivaPenguinos 5:5f08974ef8bb 634 R3_POS = 0;
VivaPenguinos 5:5f08974ef8bb 635 R1_NEG = 0;
VivaPenguinos 5:5f08974ef8bb 636 R2_NEG = 0;
VivaPenguinos 5:5f08974ef8bb 637 R3_NEG = 0;
VivaPenguinos 5:5f08974ef8bb 638 COMP_ACTY = 0;
VivaPenguinos 4:99535d368a9f 639 }
VivaPenguinos 0:3ff58b093415 640 LatchPin = 1;
VivaPenguinos 0:3ff58b093415 641 wait(delay);
VivaPenguinos 1:24446776f0d2 642 }
VivaPenguinos 1:24446776f0d2 643 }
VivaPenguinos 1:24446776f0d2 644
VivaPenguinos 4:99535d368a9f 645 // The Ground Elapse Time is refrence to range zero or the last integeral before liftoff.
VivaPenguinos 4:99535d368a9f 646 // Page CM-9
VivaPenguinos 4:99535d368a9f 647 // 00XXX h
VivaPenguinos 4:99535d368a9f 648 // 000XX min
VivaPenguinos 4:99535d368a9f 649 // 0XX.XX s (Code current does not follow this format)
VivaPenguinos 1:24446776f0d2 650 void Ground_Elapse_Time()
VivaPenguinos 1:24446776f0d2 651 {
VivaPenguinos 4:99535d368a9f 652 NO_Light(7); // Clears all the 7 Segment first.
VivaPenguinos 4:99535d368a9f 653 // Displays V16N36 on the 7 segments
VivaPenguinos 4:99535d368a9f 654 V_A = 0x01;
VivaPenguinos 4:99535d368a9f 655 V_B = 0x06;
VivaPenguinos 4:99535d368a9f 656 N_A = 0x03;
VivaPenguinos 4:99535d368a9f 657 N_B = 0x06;
VivaPenguinos 4:99535d368a9f 658 Shift();
VivaPenguinos 4:99535d368a9f 659 int GET_FLAG = 1;
VivaPenguinos 4:99535d368a9f 660 while(GET_FLAG == 1) {
VivaPenguinos 4:99535d368a9f 661 int minute = 0;
VivaPenguinos 4:99535d368a9f 662 int Seconds = 0;
VivaPenguinos 4:99535d368a9f 663 int Hours = 0;
VivaPenguinos 4:99535d368a9f 664 int minutemod = 0; // Minute Modulo
VivaPenguinos 4:99535d368a9f 665 int R1D = 0x00;
VivaPenguinos 4:99535d368a9f 666 int R1E = 0x00;
VivaPenguinos 4:99535d368a9f 667 int R2D = 0x00;
VivaPenguinos 4:99535d368a9f 668 int R2E = 0x00;
VivaPenguinos 4:99535d368a9f 669 int R3D = 0x00;
VivaPenguinos 4:99535d368a9f 670 int R3E = 0x00;
VivaPenguinos 4:99535d368a9f 671 time_t seconds = clk.time(NULL);
VivaPenguinos 4:99535d368a9f 672 pc.printf ("S = %d\n", seconds);
VivaPenguinos 4:99535d368a9f 673 Time_Difference = (seconds + GET_Config_Time) - TIME_VALUE;
VivaPenguinos 4:99535d368a9f 674 printf("TIME=%d \n", Time_Difference); // Displays time elapsed based on seconds elapsed.
VivaPenguinos 4:99535d368a9f 675 Hours = Time_Difference/3600; // Divide seconds by 3600 seconds
VivaPenguinos 4:99535d368a9f 676 Seconds = Time_Difference%60; // Get the remainder of time difference after 60 seconds
VivaPenguinos 4:99535d368a9f 677 minute = Time_Difference/60; // Divide the seconds by 3600
VivaPenguinos 4:99535d368a9f 678 // Comments: 7 Segments Location
VivaPenguinos 4:99535d368a9f 679 minutemod = minute%60; // Get the remainder of the minutemod after 60 seconds
VivaPenguinos 4:99535d368a9f 680 R3D = (Hours%60)/10; // Get the modulo of the hour variable then divde by 10 to get single digit [][][][x][]
VivaPenguinos 4:99535d368a9f 681 R3E = Hours%10; // Get the modulo of the Hours variable by 10 to get single digit [][][][][x]
VivaPenguinos 4:99535d368a9f 682 R2D = minutemod/10; // Divide the minute variable by 10 to get single digit [][][][x][]
VivaPenguinos 4:99535d368a9f 683 R2E = minute%10; // Get the remainder of the minute variable to get single digit [][][][][x]
VivaPenguinos 4:99535d368a9f 684 R1D = Seconds/10; // Divide the seconds variable by 10 to get single digit [][][][x][]
VivaPenguinos 4:99535d368a9f 685 R1E = Time_Difference%10; // Get the remainder of the Time_Difference to get single digit [][][][][x]
VivaPenguinos 4:99535d368a9f 686 // Debug Use:
VivaPenguinos 4:99535d368a9f 687 // pc.printf("%d \n", minute);
VivaPenguinos 4:99535d368a9f 688 // pc.printf("%o \n", R2E);
VivaPenguinos 4:99535d368a9f 689 // pc.printf("%o \n", R2D);
VivaPenguinos 4:99535d368a9f 690 R3_E = R3E;
VivaPenguinos 4:99535d368a9f 691 R3_D = R3D;
VivaPenguinos 4:99535d368a9f 692 R1_E = R1E;
VivaPenguinos 4:99535d368a9f 693 R1_D = R1D;
VivaPenguinos 4:99535d368a9f 694 R2_E = R2E;
VivaPenguinos 4:99535d368a9f 695 R2_D = R2D;
VivaPenguinos 4:99535d368a9f 696 Shift();
VivaPenguinos 4:99535d368a9f 697 //pc.printf("%i \n",(Time_Difference%10) + ((Time_Difference/10)<<4)); // Decimal to BCD
VivaPenguinos 4:99535d368a9f 698 //printf("Time as a basic string = %s\r", ctime(&seconds));
VivaPenguinos 4:99535d368a9f 699 if (Index >-1) {
VivaPenguinos 4:99535d368a9f 700 GET_FLAG = 0;
VivaPenguinos 4:99535d368a9f 701 pc.printf("Interrupted");
VivaPenguinos 4:99535d368a9f 702 pc.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
VivaPenguinos 4:99535d368a9f 703 if (Index == 12) { // Index 12 = Verb Button
VivaPenguinos 4:99535d368a9f 704 Verb_Button(); // Goes to Verb_Button
VivaPenguinos 4:99535d368a9f 705 GET_FLAG = 0;
VivaPenguinos 4:99535d368a9f 706 break;
VivaPenguinos 4:99535d368a9f 707 } else if (Index == 14) { // Index 14 = Noun Button
VivaPenguinos 4:99535d368a9f 708 Noun_Button(); // Goes to Noun_Button
VivaPenguinos 4:99535d368a9f 709 GET_FLAG = 0;
VivaPenguinos 4:99535d368a9f 710 break;
VivaPenguinos 4:99535d368a9f 711 } else if (Index == 11) { // Index 11 = Enter Button
VivaPenguinos 4:99535d368a9f 712 Enter_Button(); // Goes to Enter_Button
VivaPenguinos 4:99535d368a9f 713 GET_FLAG = 0;
VivaPenguinos 4:99535d368a9f 714 break;
VivaPenguinos 4:99535d368a9f 715 }
VivaPenguinos 4:99535d368a9f 716 Index = -1;
VivaPenguinos 4:99535d368a9f 717 GET_FLAG = 0;
VivaPenguinos 4:99535d368a9f 718 break;
VivaPenguinos 4:99535d368a9f 719 }
VivaPenguinos 4:99535d368a9f 720 wait(1);
VivaPenguinos 4:99535d368a9f 721 }
VivaPenguinos 4:99535d368a9f 722 }
VivaPenguinos 4:99535d368a9f 723
VivaPenguinos 4:99535d368a9f 724 // 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 725 // 1 = Row 1
VivaPenguinos 4:99535d368a9f 726 // 2 = Row 2
VivaPenguinos 4:99535d368a9f 727 // 3 = Row 3
VivaPenguinos 4:99535d368a9f 728 // 4 = Verb
VivaPenguinos 4:99535d368a9f 729 // 5 = Nouns
VivaPenguinos 4:99535d368a9f 730 // 6 = Program Number
VivaPenguinos 4:99535d368a9f 731 // 7 = All lights off
VivaPenguinos 4:99535d368a9f 732 void NO_Light(int L)
VivaPenguinos 4:99535d368a9f 733 {
VivaPenguinos 4:99535d368a9f 734
VivaPenguinos 4:99535d368a9f 735 switch(L) {
VivaPenguinos 4:99535d368a9f 736 case 1:
VivaPenguinos 4:99535d368a9f 737 R1_A = 0x0f;
VivaPenguinos 4:99535d368a9f 738 R1_B = 0x0f;
VivaPenguinos 4:99535d368a9f 739 R1_C = 0x0f;
VivaPenguinos 4:99535d368a9f 740 R1_D = 0x0f;
VivaPenguinos 4:99535d368a9f 741 R1_E = 0x0f;
VivaPenguinos 4:99535d368a9f 742 Shift();
VivaPenguinos 4:99535d368a9f 743 case 2:
VivaPenguinos 4:99535d368a9f 744 R2_A = 0x0f;
VivaPenguinos 4:99535d368a9f 745 R2_B = 0x0f;
VivaPenguinos 4:99535d368a9f 746 R2_C = 0x0f;
VivaPenguinos 4:99535d368a9f 747 R2_D = 0x0f;
VivaPenguinos 4:99535d368a9f 748 R2_E = 0x0f;
VivaPenguinos 4:99535d368a9f 749 Shift();
VivaPenguinos 4:99535d368a9f 750 case 3:
VivaPenguinos 4:99535d368a9f 751 R3_A = 0x0f;
VivaPenguinos 4:99535d368a9f 752 R3_B = 0x0f;
VivaPenguinos 4:99535d368a9f 753 R3_C = 0x0f;
VivaPenguinos 4:99535d368a9f 754 R3_D = 0x0f;
VivaPenguinos 4:99535d368a9f 755 R3_E = 0x0f;
VivaPenguinos 4:99535d368a9f 756 Shift();
VivaPenguinos 4:99535d368a9f 757 case 4:
VivaPenguinos 4:99535d368a9f 758 V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 759 V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 760 Shift();
VivaPenguinos 4:99535d368a9f 761 case 5:
VivaPenguinos 4:99535d368a9f 762 N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 763 N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 764 Shift();
VivaPenguinos 4:99535d368a9f 765 case 6:
VivaPenguinos 4:99535d368a9f 766 P_A = 0x0f;
VivaPenguinos 4:99535d368a9f 767 P_B = 0x0f;
VivaPenguinos 4:99535d368a9f 768 Shift();
VivaPenguinos 4:99535d368a9f 769 case 7:
VivaPenguinos 4:99535d368a9f 770 R1_A = 0x0f;
VivaPenguinos 4:99535d368a9f 771 R1_B = 0x0f;
VivaPenguinos 4:99535d368a9f 772 R1_C = 0x0f;
VivaPenguinos 4:99535d368a9f 773 R1_D = 0x0f;
VivaPenguinos 4:99535d368a9f 774 R1_E = 0x0f;
VivaPenguinos 4:99535d368a9f 775 R2_A = 0x0f;
VivaPenguinos 4:99535d368a9f 776 R2_B = 0x0f;
VivaPenguinos 4:99535d368a9f 777 R2_C = 0x0f;
VivaPenguinos 4:99535d368a9f 778 R2_D = 0x0f;
VivaPenguinos 4:99535d368a9f 779 R2_E = 0x0f;
VivaPenguinos 4:99535d368a9f 780 R3_A = 0x0f;
VivaPenguinos 4:99535d368a9f 781 R3_B = 0x0f;
VivaPenguinos 4:99535d368a9f 782 R3_C = 0x0f;
VivaPenguinos 4:99535d368a9f 783 R3_D = 0x0f;
VivaPenguinos 4:99535d368a9f 784 R3_E = 0x0f;
VivaPenguinos 4:99535d368a9f 785 V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 786 V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 787 N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 788 N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 789 P_A = 0x0f;
VivaPenguinos 4:99535d368a9f 790 P_B = 0x0f;
VivaPenguinos 4:99535d368a9f 791 Shift();
VivaPenguinos 4:99535d368a9f 792 }
VivaPenguinos 4:99535d368a9f 793 }
VivaPenguinos 4:99535d368a9f 794
VivaPenguinos 4:99535d368a9f 795 // Test lights is to make sure all the 7 segments and indicator lights worked prior to lift-off.
VivaPenguinos 4:99535d368a9f 796 void Test_Lights()
VivaPenguinos 4:99535d368a9f 797 {
VivaPenguinos 4:99535d368a9f 798 for(int x = 0; x < 7; x++) {
VivaPenguinos 4:99535d368a9f 799 R1_A = 0x08;
VivaPenguinos 4:99535d368a9f 800 R1_B = 0x08;
VivaPenguinos 4:99535d368a9f 801 R1_C = 0x08;
VivaPenguinos 4:99535d368a9f 802 R1_D = 0x08;
VivaPenguinos 4:99535d368a9f 803 R1_E = 0x08;
VivaPenguinos 4:99535d368a9f 804 R2_A = 0x08;
VivaPenguinos 4:99535d368a9f 805 R2_B = 0x08;
VivaPenguinos 4:99535d368a9f 806 R2_C = 0x08;
VivaPenguinos 4:99535d368a9f 807 R2_D = 0x08;
VivaPenguinos 4:99535d368a9f 808 R2_E = 0x08;
VivaPenguinos 4:99535d368a9f 809 R3_A = 0x08;
VivaPenguinos 4:99535d368a9f 810 R3_B = 0x08;
VivaPenguinos 4:99535d368a9f 811 R3_C = 0x08;
VivaPenguinos 4:99535d368a9f 812 R3_D = 0x08;
VivaPenguinos 4:99535d368a9f 813 R3_E = 0x08;
VivaPenguinos 4:99535d368a9f 814 V_A = 0x08;
VivaPenguinos 4:99535d368a9f 815 V_B = 0x08;
VivaPenguinos 4:99535d368a9f 816 N_A = 0x08;
VivaPenguinos 4:99535d368a9f 817 N_B = 0x08;
VivaPenguinos 4:99535d368a9f 818 P_A = 0x08;
VivaPenguinos 4:99535d368a9f 819 P_B = 0x08;
VivaPenguinos 4:99535d368a9f 820 Shift();
VivaPenguinos 4:99535d368a9f 821 wait(1);
VivaPenguinos 4:99535d368a9f 822 V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 823 V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 824 N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 825 N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 826 Shift();
VivaPenguinos 4:99535d368a9f 827 wait(1);
VivaPenguinos 4:99535d368a9f 828 }
VivaPenguinos 4:99535d368a9f 829 }
VivaPenguinos 4:99535d368a9f 830
VivaPenguinos 4:99535d368a9f 831 // This configs the Ground Elapse Time
VivaPenguinos 4:99535d368a9f 832 // This portion of code converts the value retrived into seconds and replaces the value in the RTC module.
VivaPenguinos 4:99535d368a9f 833 // Process:
VivaPenguinos 4:99535d368a9f 834 // V25N36
VivaPenguinos 4:99535d368a9f 835 // Displays V21N36
VivaPenguinos 4:99535d368a9f 836 // +-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 837 // Displays V22N36
VivaPenguinos 4:99535d368a9f 838 // +-000XX 60 Minutes Max
VivaPenguinos 4:99535d368a9f 839 // Displays V23N36
VivaPenguinos 4:99535d368a9f 840 // +-0XXXX 60 Seconds Max, Currently follows 000XX will change in future revisions
VivaPenguinos 4:99535d368a9f 841 void GET_Config()
VivaPenguinos 4:99535d368a9f 842 {
VivaPenguinos 4:99535d368a9f 843 int GET_Hours = 0;
VivaPenguinos 4:99535d368a9f 844 int GET_Minute = 0;
VivaPenguinos 4:99535d368a9f 845 int GET_Seconds = 0;
VivaPenguinos 4:99535d368a9f 846 // Configures Hours, Minutes, and Seconds for RTC
VivaPenguinos 4:99535d368a9f 847 NO_Light(3);
VivaPenguinos 4:99535d368a9f 848 do {
VivaPenguinos 4:99535d368a9f 849 NO_Light(3);
VivaPenguinos 4:99535d368a9f 850 pc.printf("Debug");
VivaPenguinos 4:99535d368a9f 851 R_GET(3);
VivaPenguinos 4:99535d368a9f 852 V_A = 0x02;
VivaPenguinos 4:99535d368a9f 853 V_B = 0x01;
VivaPenguinos 4:99535d368a9f 854 N_A = 0x03;
VivaPenguinos 4:99535d368a9f 855 N_B = 0x06;
VivaPenguinos 4:99535d368a9f 856 R_GET(3);
VivaPenguinos 4:99535d368a9f 857 Shift();
VivaPenguinos 4:99535d368a9f 858 wait(.5);
VivaPenguinos 4:99535d368a9f 859 R_GET(3);
VivaPenguinos 4:99535d368a9f 860 V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 861 V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 862 N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 863 N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 864 R_GET(3);
VivaPenguinos 4:99535d368a9f 865 Shift();
VivaPenguinos 4:99535d368a9f 866 wait(.5);
VivaPenguinos 5:5f08974ef8bb 867 } while (R3_Position != 7);
VivaPenguinos 4:99535d368a9f 868 R_Position = 1;
VivaPenguinos 4:99535d368a9f 869 RVA = 0x0f;
VivaPenguinos 4:99535d368a9f 870 RVB = 0x0f;
VivaPenguinos 4:99535d368a9f 871 RVC = 0x0f;
VivaPenguinos 4:99535d368a9f 872 RVD = 0x0f;
VivaPenguinos 4:99535d368a9f 873 RVE = 0x0f;
VivaPenguinos 4:99535d368a9f 874 do {
VivaPenguinos 4:99535d368a9f 875 pc.printf("Debug R2");
VivaPenguinos 4:99535d368a9f 876 R_GET(2);
VivaPenguinos 4:99535d368a9f 877 V_A = 0x02;
VivaPenguinos 4:99535d368a9f 878 V_B = 0x02;
VivaPenguinos 4:99535d368a9f 879 N_A = 0x03;
VivaPenguinos 4:99535d368a9f 880 N_B = 0x06;
VivaPenguinos 4:99535d368a9f 881 R_GET(2);
VivaPenguinos 4:99535d368a9f 882 Shift();
VivaPenguinos 4:99535d368a9f 883 wait(.5);
VivaPenguinos 4:99535d368a9f 884 R_GET(2);
VivaPenguinos 4:99535d368a9f 885 V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 886 V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 887 N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 888 N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 889 R_GET(2);
VivaPenguinos 4:99535d368a9f 890 Shift();
VivaPenguinos 4:99535d368a9f 891 wait(.5);
VivaPenguinos 5:5f08974ef8bb 892 } while(R2_Position != 7);
VivaPenguinos 4:99535d368a9f 893 R_Position = 1;
VivaPenguinos 4:99535d368a9f 894 RVA = 0x0f;
VivaPenguinos 4:99535d368a9f 895 RVB = 0x0f;
VivaPenguinos 4:99535d368a9f 896 RVC = 0x0f;
VivaPenguinos 4:99535d368a9f 897 RVD = 0x0f;
VivaPenguinos 4:99535d368a9f 898 RVE = 0x0f;
VivaPenguinos 4:99535d368a9f 899 do {
VivaPenguinos 4:99535d368a9f 900 pc.printf("Debug R1");
VivaPenguinos 4:99535d368a9f 901 R_GET(1);
VivaPenguinos 4:99535d368a9f 902 V_A = 0x02;
VivaPenguinos 4:99535d368a9f 903 V_B = 0x03;
VivaPenguinos 4:99535d368a9f 904 N_A = 0x03;
VivaPenguinos 4:99535d368a9f 905 N_B = 0x06;
VivaPenguinos 4:99535d368a9f 906 R_GET(1);
VivaPenguinos 4:99535d368a9f 907 Shift();
VivaPenguinos 4:99535d368a9f 908 wait(.5);
VivaPenguinos 4:99535d368a9f 909 R_GET(1);
VivaPenguinos 4:99535d368a9f 910 V_A = 0x0f;
VivaPenguinos 4:99535d368a9f 911 V_B = 0x0f;
VivaPenguinos 4:99535d368a9f 912 N_A = 0x0f;
VivaPenguinos 4:99535d368a9f 913 N_B = 0x0f;
VivaPenguinos 4:99535d368a9f 914 R_GET(1);
VivaPenguinos 4:99535d368a9f 915 Shift();
VivaPenguinos 4:99535d368a9f 916 wait(.5);
VivaPenguinos 5:5f08974ef8bb 917 } while(R1_Position != 7);
VivaPenguinos 4:99535d368a9f 918 R_Position = 1;
VivaPenguinos 4:99535d368a9f 919 RVA = 0x0f;
VivaPenguinos 4:99535d368a9f 920 RVB = 0x0f;
VivaPenguinos 4:99535d368a9f 921 RVC = 0x0f;
VivaPenguinos 4:99535d368a9f 922 RVD = 0x0f;
VivaPenguinos 4:99535d368a9f 923 RVE = 0x0f;
VivaPenguinos 4:99535d368a9f 924
VivaPenguinos 4:99535d368a9f 925 // The Actual Configuration of GET
VivaPenguinos 4:99535d368a9f 926 // Concatenate the values from each row based on it's value
VivaPenguinos 4:99535d368a9f 927 GET_Hours = R_Concatenate(3);
VivaPenguinos 4:99535d368a9f 928 GET_Minute = R_Concatenate(2);
VivaPenguinos 4:99535d368a9f 929 GET_Seconds = R_Concatenate(1);
VivaPenguinos 4:99535d368a9f 930
VivaPenguinos 5:5f08974ef8bb 931 // Checks if value exceeds the Hours, Minute, and Seconds and verifies if Rows are in Positive
VivaPenguinos 5:5f08974ef8bb 932 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 933 pc.printf("Error! Check your Hours, Minute, and Seconds Value");
VivaPenguinos 4:99535d368a9f 934 R3_Position = 1;
VivaPenguinos 4:99535d368a9f 935 GET_Config();
VivaPenguinos 4:99535d368a9f 936 } else {
VivaPenguinos 4:99535d368a9f 937 pc.printf("Pass!, Going to configure RTC Now");
VivaPenguinos 4:99535d368a9f 938 GET_Config_Time = GET_Hours * 3600;
VivaPenguinos 4:99535d368a9f 939 GET_Config_Time += GET_Minute * 60;
VivaPenguinos 4:99535d368a9f 940 GET_Config_Time += GET_Seconds;
VivaPenguinos 4:99535d368a9f 941 pc.printf("Time Conversion is %d", GET_Config_Time);
VivaPenguinos 4:99535d368a9f 942 }
VivaPenguinos 4:99535d368a9f 943
VivaPenguinos 4:99535d368a9f 944 // Reconfigures the timee so the values can be resetted.
VivaPenguinos 3:29cff763ae36 945 #ifdef INITIAL_RUN
VivaPenguinos 3:29cff763ae36 946 clk.set_time(TIME_VALUE);
VivaPenguinos 3:29cff763ae36 947 #endif
VivaPenguinos 1:24446776f0d2 948
VivaPenguinos 4:99535d368a9f 949 // Debug Use Only
VivaPenguinos 4:99535d368a9f 950 //pc.printf("%d\n", GET_Hours);
VivaPenguinos 4:99535d368a9f 951 //pc.printf("%d\n", GET_Minute);
VivaPenguinos 4:99535d368a9f 952 //pc.printf("%d\n", GET_Seconds);
VivaPenguinos 4:99535d368a9f 953 Ground_Elapse_Time();
VivaPenguinos 4:99535d368a9f 954 }
VivaPenguinos 5:5f08974ef8bb 955
VivaPenguinos 5:5f08974ef8bb 956 // This is the CMC Idling Program Page CM-39
VivaPenguinos 5:5f08974ef8bb 957 // This portion of code just turns off all of the display. Originally used to save power consumption.
VivaPenguinos 5:5f08974ef8bb 958 // Process:
VivaPenguinos 5:5f08974ef8bb 959 // Display PROG 00
VivaPenguinos 5:5f08974ef8bb 960 // Verb 37 Enter 00
VivaPenguinos 5:5f08974ef8bb 961 // Verb 06 Noun 38
VivaPenguinos 5:5f08974ef8bb 962 // Optional Display:
VivaPenguinos 5:5f08974ef8bb 963 // Verb 06 Noun 38 -
VivaPenguinos 5:5f08974ef8bb 964 // Time of State Vector being Integrated
VivaPenguinos 5:5f08974ef8bb 965 // 00xxx hours
VivaPenguinos 5:5f08974ef8bb 966 // 000xx minutes
VivaPenguinos 5:5f08974ef8bb 967 // 0xx.xx seconds
VivaPenguinos 5:5f08974ef8bb 968 void CMC_Idle()
VivaPenguinos 5:5f08974ef8bb 969 {
VivaPenguinos 5:5f08974ef8bb 970 NO_Light(7);
VivaPenguinos 5:5f08974ef8bb 971 P_A = 0x00;
VivaPenguinos 5:5f08974ef8bb 972 P_B = 0x00;
VivaPenguinos 5:5f08974ef8bb 973 Shift();
VivaPenguinos 5:5f08974ef8bb 974 while(1) {
VivaPenguinos 5:5f08974ef8bb 975 __wfi();
VivaPenguinos 5:5f08974ef8bb 976 if (Index >-1) {
VivaPenguinos 5:5f08974ef8bb 977 Interruption();
VivaPenguinos 5:5f08974ef8bb 978 break;
VivaPenguinos 5:5f08974ef8bb 979 }
VivaPenguinos 5:5f08974ef8bb 980
VivaPenguinos 5:5f08974ef8bb 981 }
VivaPenguinos 5:5f08974ef8bb 982
VivaPenguinos 5:5f08974ef8bb 983 }
VivaPenguinos 5:5f08974ef8bb 984
VivaPenguinos 5:5f08974ef8bb 985 /*
VivaPenguinos 5:5f08974ef8bb 986 P01 - Prelaunch or Service - Initialization Program CM-39
VivaPenguinos 5:5f08974ef8bb 987 Purpose:
VivaPenguinos 5:5f08974ef8bb 988 1. To intialize the platform for the prelaunch programs.
VivaPenguinos 5:5f08974ef8bb 989 2. To provide an initial stable member orientation for Gyrocompassing (P02)
VivaPenguinos 5:5f08974ef8bb 990 Assumptions:
VivaPenguinos 5:5f08974ef8bb 991 Erasble location has been Properly initialized.
VivaPenguinos 5:5f08974ef8bb 992 Azimuth, +1
VivaPenguinos 5:5f08974ef8bb 993 Latitude, +1
VivaPenguinos 5:5f08974ef8bb 994 LaunchAZ +1
VivaPenguinos 5:5f08974ef8bb 995 IMU compenstaion parameters
VivaPenguinos 5:5f08974ef8bb 996 */
VivaPenguinos 5:5f08974ef8bb 997 void PreLaunch_Initialization()
VivaPenguinos 5:5f08974ef8bb 998 {
VivaPenguinos 5:5f08974ef8bb 999 P_A = 0x00;
VivaPenguinos 5:5f08974ef8bb 1000 P_B = 0x01;
VivaPenguinos 5:5f08974ef8bb 1001 Shift();
VivaPenguinos 5:5f08974ef8bb 1002
VivaPenguinos 5:5f08974ef8bb 1003 if (IMUPWR == 1) {
VivaPenguinos 5:5f08974ef8bb 1004 NO_ATT = 0;
VivaPenguinos 5:5f08974ef8bb 1005 wait(9);
VivaPenguinos 5:5f08974ef8bb 1006 pc.printf("Course Align IMU\n");
VivaPenguinos 5:5f08974ef8bb 1007 NO_ATT = 1;
VivaPenguinos 5:5f08974ef8bb 1008 wait(10);
VivaPenguinos 5:5f08974ef8bb 1009 pc.printf("Course Align IMU complete\n");
VivaPenguinos 5:5f08974ef8bb 1010 NO_ATT = 0;
VivaPenguinos 5:5f08974ef8bb 1011 wait(2);
VivaPenguinos 5:5f08974ef8bb 1012 PreLaunch_Gyrocompassing();
VivaPenguinos 5:5f08974ef8bb 1013 } else {
VivaPenguinos 5:5f08974ef8bb 1014 // NO_ATT is off for 8 seconds, with one COMP_ACTY light.
VivaPenguinos 5:5f08974ef8bb 1015 PROG = 1;
VivaPenguinos 5:5f08974ef8bb 1016 wait(6);
VivaPenguinos 5:5f08974ef8bb 1017 COMP_ACTY = 1;
VivaPenguinos 5:5f08974ef8bb 1018 wait(0.5);
VivaPenguinos 5:5f08974ef8bb 1019 COMP_ACTY = 0;
VivaPenguinos 5:5f08974ef8bb 1020 wait(1.5);
VivaPenguinos 5:5f08974ef8bb 1021 // NO_ATT is on for 6 seconds, No COMP_ACTY light.
VivaPenguinos 5:5f08974ef8bb 1022 NO_ATT = 1;
VivaPenguinos 5:5f08974ef8bb 1023 wait(6);
VivaPenguinos 5:5f08974ef8bb 1024 NO_ATT = 0;
VivaPenguinos 5:5f08974ef8bb 1025 P_A = 0x0f;
VivaPenguinos 5:5f08974ef8bb 1026 P_B = 0x0f;
VivaPenguinos 5:5f08974ef8bb 1027 Shift();
VivaPenguinos 5:5f08974ef8bb 1028 }
VivaPenguinos 5:5f08974ef8bb 1029 }
VivaPenguinos 5:5f08974ef8bb 1030
VivaPenguinos 5:5f08974ef8bb 1031 /*
VivaPenguinos 5:5f08974ef8bb 1032 P02 - Prelaunch or Service - Gyrocompassing Program CM-39
VivaPenguinos 5:5f08974ef8bb 1033 Purpose:
VivaPenguinos 5:5f08974ef8bb 1034 1. Provide proper stable member orientation for launch
VivaPenguinos 5:5f08974ef8bb 1035 Assumptions:
VivaPenguinos 5:5f08974ef8bb 1036 1. Program may be interuppted to perform the prelaunch or service - optical verification of gyrocompassing program (P03)
VivaPenguinos 5:5f08974ef8bb 1037 2. V75 will be keyed in and displaed during this program to permit crew backup of the liftoff discrete.
VivaPenguinos 5:5f08974ef8bb 1038 3. Program is automatically selected by the Initialization Program (P01).
VivaPenguinos 5:5f08974ef8bb 1039 4. This program has capability (Via V78E) to change the luanch azimuth of the stable memeber while gyrocompassing.
VivaPenguinos 5:5f08974ef8bb 1040 Process:
VivaPenguinos 5:5f08974ef8bb 1041 1. After P01 is completed
VivaPenguinos 5:5f08974ef8bb 1042 2. Display P02
VivaPenguinos 5:5f08974ef8bb 1043 3. Flashing V06 N29 / Display LAUNCHAZ in R3
VivaPenguinos 5:5f08974ef8bb 1044 4. User input V21E
VivaPenguinos 5:5f08974ef8bb 1045 5. Flash V21N29 This is R1_Component May be for future use.
VivaPenguinos 5:5f08974ef8bb 1046 6. User inputs values for LAUNCHAZ
VivaPenguinos 5:5f08974ef8bb 1047 7. Flash V06 N29 / Display LAUNCHAZ in R3
VivaPenguinos 5:5f08974ef8bb 1048 8. Input Pro
VivaPenguinos 5:5f08974ef8bb 1049 9. Pulses Gyros
VivaPenguinos 5:5f08974ef8bb 1050 Programming Notes:
VivaPenguinos 5:5f08974ef8bb 1051 Void PreLaunch_Gyrocomapssing() and PreLaunch_Gyrocompassing_Configure() are tied together
VivaPenguinos 5:5f08974ef8bb 1052
VivaPenguinos 5:5f08974ef8bb 1053 */
VivaPenguinos 5:5f08974ef8bb 1054 void PreLaunch_Gyrocompassing ()
VivaPenguinos 5:5f08974ef8bb 1055 {
VivaPenguinos 5:5f08974ef8bb 1056 // Process 1
VivaPenguinos 5:5f08974ef8bb 1057 // Process 2
VivaPenguinos 5:5f08974ef8bb 1058 NO_Light(7);
VivaPenguinos 5:5f08974ef8bb 1059 P_A = 0x00;
VivaPenguinos 5:5f08974ef8bb 1060 P_B = 0x02;
VivaPenguinos 5:5f08974ef8bb 1061 Shift();
VivaPenguinos 5:5f08974ef8bb 1062 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1063 R3_E = LAUNCHAZ%10;
VivaPenguinos 5:5f08974ef8bb 1064 R3_D = (LAUNCHAZ/10)%10;
VivaPenguinos 5:5f08974ef8bb 1065 R3_C = (LAUNCHAZ/100)%10;
VivaPenguinos 5:5f08974ef8bb 1066 R3_B = (LAUNCHAZ/1000)%10;
VivaPenguinos 5:5f08974ef8bb 1067 R3_A = (LAUNCHAZ/10000)%10;
VivaPenguinos 5:5f08974ef8bb 1068 Shift();
VivaPenguinos 5:5f08974ef8bb 1069 while(1) {
VivaPenguinos 5:5f08974ef8bb 1070 // Process 3;
VivaPenguinos 5:5f08974ef8bb 1071 PreLaunch_Gyrocompassing_Configure();
VivaPenguinos 5:5f08974ef8bb 1072 COMP_ACTY = 1;
VivaPenguinos 5:5f08974ef8bb 1073 PreLaunch_Gyrocompassing_Configure();
VivaPenguinos 5:5f08974ef8bb 1074 wait(0.5);
VivaPenguinos 5:5f08974ef8bb 1075 PreLaunch_Gyrocompassing_Configure();
VivaPenguinos 5:5f08974ef8bb 1076 COMP_ACTY = 0;
VivaPenguinos 5:5f08974ef8bb 1077 PreLaunch_Gyrocompassing_Configure();
VivaPenguinos 5:5f08974ef8bb 1078 wait(0.5);
VivaPenguinos 5:5f08974ef8bb 1079 pc.printf("spam\n");
VivaPenguinos 5:5f08974ef8bb 1080 pc.printf("Index %d\n", Index);
VivaPenguinos 5:5f08974ef8bb 1081 } // While 1
VivaPenguinos 5:5f08974ef8bb 1082 } // prelaunch configuration
VivaPenguinos 5:5f08974ef8bb 1083
VivaPenguinos 5:5f08974ef8bb 1084 // This is used for the configuration of PreLaunch_Gyrocompassing();
VivaPenguinos 5:5f08974ef8bb 1085 // This has to be used since it awaits for the input of the astronauts.
VivaPenguinos 5:5f08974ef8bb 1086 void PreLaunch_Gyrocompassing_Configure()
VivaPenguinos 5:5f08974ef8bb 1087 {
VivaPenguinos 5:5f08974ef8bb 1088 int Azimuth;
VivaPenguinos 5:5f08974ef8bb 1089 while(1){
VivaPenguinos 5:5f08974ef8bb 1090 if (Index >-1) {
VivaPenguinos 5:5f08974ef8bb 1091 if (Index == 12) {
VivaPenguinos 5:5f08974ef8bb 1092 Verb_Button(); //For V21 use
VivaPenguinos 5:5f08974ef8bb 1093 }
VivaPenguinos 5:5f08974ef8bb 1094 if (Index == 11) {
VivaPenguinos 5:5f08974ef8bb 1095 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 1096 //Flash V21N29 and Get user inputs under R3
VivaPenguinos 5:5f08974ef8bb 1097 // Process 5 and 6
VivaPenguinos 5:5f08974ef8bb 1098 Azimuth = R1_Component(); // Goes to R1 Component
VivaPenguinos 5:5f08974ef8bb 1099 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 1100 // If it passes
VivaPenguinos 5:5f08974ef8bb 1101 LAUNCHAZ = Azimuth;
VivaPenguinos 5:5f08974ef8bb 1102 PreLaunch_Gyrocompassing();// This is suppose to go to PreLaunch_Gyrocompassing
VivaPenguinos 5:5f08974ef8bb 1103 }// if Azimuth = R1
VivaPenguinos 5:5f08974ef8bb 1104 else{
VivaPenguinos 5:5f08974ef8bb 1105 pc.printf("Failed");
VivaPenguinos 5:5f08974ef8bb 1106 } // Error checking
VivaPenguinos 5:5f08974ef8bb 1107 } // V21 N00 E00
VivaPenguinos 5:5f08974ef8bb 1108 } // Enter BUtton
VivaPenguinos 5:5f08974ef8bb 1109 if (Index == 99){ // This is Prog Button
VivaPenguinos 5:5f08974ef8bb 1110 // Error checks just in case
VivaPenguinos 5:5f08974ef8bb 1111 if (LAUNCHAZ > 0 && R3_POS == 1){
VivaPenguinos 5:5f08974ef8bb 1112 // Because there are no Phsyical Gyro's present, This section of code is just going to simulate gyros pulsing
VivaPenguinos 5:5f08974ef8bb 1113 for (int x = 0; x > 21; x++){
VivaPenguinos 5:5f08974ef8bb 1114 pc.printf("Pulsing Gyros...\n");
VivaPenguinos 5:5f08974ef8bb 1115 COMP_ACTY = 1;
VivaPenguinos 5:5f08974ef8bb 1116 wait(.5);
VivaPenguinos 5:5f08974ef8bb 1117 COMP_ACTY = 0;
VivaPenguinos 5:5f08974ef8bb 1118 wait(.5);
VivaPenguinos 5:5f08974ef8bb 1119 }// Pulsing Gyro simulation
VivaPenguinos 5:5f08974ef8bb 1120 pc.printf("Done!");
VivaPenguinos 5:5f08974ef8bb 1121 }// Prog Error checking
VivaPenguinos 5:5f08974ef8bb 1122 }// Prog Button
VivaPenguinos 5:5f08974ef8bb 1123 } // Index > -1
VivaPenguinos 5:5f08974ef8bb 1124 } // While(1)
VivaPenguinos 5:5f08974ef8bb 1125 } // PreLaunh_Gyrocompassing_Configure();
VivaPenguinos 5:5f08974ef8bb 1126
VivaPenguinos 5:5f08974ef8bb 1127
VivaPenguinos 5:5f08974ef8bb 1128 // Load Component 1 into R1
VivaPenguinos 5:5f08974ef8bb 1129 int R1_Component()
VivaPenguinos 5:5f08974ef8bb 1130 {
VivaPenguinos 5:5f08974ef8bb 1131 R1_POS = 0;
VivaPenguinos 5:5f08974ef8bb 1132 R1_NEG = 0;
VivaPenguinos 5:5f08974ef8bb 1133 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1134 do {
VivaPenguinos 5:5f08974ef8bb 1135 R_GET(3);
VivaPenguinos 5:5f08974ef8bb 1136 V_A = 0x02;
VivaPenguinos 5:5f08974ef8bb 1137 V_B = 0x01;
VivaPenguinos 5:5f08974ef8bb 1138 N_A = 0x02;
VivaPenguinos 5:5f08974ef8bb 1139 N_B = 0x09;
VivaPenguinos 5:5f08974ef8bb 1140 R_GET(3);
VivaPenguinos 5:5f08974ef8bb 1141 Shift();
VivaPenguinos 5:5f08974ef8bb 1142 wait(.5);
VivaPenguinos 5:5f08974ef8bb 1143 R_GET(3);
VivaPenguinos 5:5f08974ef8bb 1144 NO_Light(4);
VivaPenguinos 5:5f08974ef8bb 1145 NO_Light(5);
VivaPenguinos 5:5f08974ef8bb 1146 R_GET(3);
VivaPenguinos 5:5f08974ef8bb 1147 wait(.5);
VivaPenguinos 5:5f08974ef8bb 1148 } while (R3_Position != 7);
VivaPenguinos 5:5f08974ef8bb 1149 R_Position = 1;
VivaPenguinos 5:5f08974ef8bb 1150
VivaPenguinos 5:5f08974ef8bb 1151 return R_Concatenate(3);
VivaPenguinos 5:5f08974ef8bb 1152 }
VivaPenguinos 4:99535d368a9f 1153
VivaPenguinos 4:99535d368a9f 1154 // This is used to concatenate Row 3, Useful for when verifying inputs.
VivaPenguinos 4:99535d368a9f 1155 int R_Concatenate(int C) {
VivaPenguinos 4:99535d368a9f 1156
VivaPenguinos 4:99535d368a9f 1157 // Used for concatenation only
VivaPenguinos 4:99535d368a9f 1158 int RAB = 0;
VivaPenguinos 4:99535d368a9f 1159 int RCD = 0;
VivaPenguinos 4:99535d368a9f 1160 int RABCD = 0;
VivaPenguinos 4:99535d368a9f 1161 int RABCDE = 0;
VivaPenguinos 4:99535d368a9f 1162
VivaPenguinos 4:99535d368a9f 1163 // Actual Physical Interaces, Row Physical
VivaPenguinos 4:99535d368a9f 1164 int RPA = 0;
VivaPenguinos 4:99535d368a9f 1165 int RPB = 0;
VivaPenguinos 4:99535d368a9f 1166 int RPC = 0;
VivaPenguinos 4:99535d368a9f 1167 int RPD = 0;
VivaPenguinos 4:99535d368a9f 1168 int RPE = 0;
VivaPenguinos 4:99535d368a9f 1169
VivaPenguinos 4:99535d368a9f 1170 // This if Statement compares which rows to concatenate then replaces the variables with the correct one.
VivaPenguinos 4:99535d368a9f 1171 if (C == 3) {
VivaPenguinos 4:99535d368a9f 1172 RPA = R3_A;
VivaPenguinos 4:99535d368a9f 1173 RPB = R3_B;
VivaPenguinos 4:99535d368a9f 1174 RPC = R3_C;
VivaPenguinos 4:99535d368a9f 1175 RPD = R3_D;
VivaPenguinos 4:99535d368a9f 1176 RPE = R3_E;
VivaPenguinos 4:99535d368a9f 1177 }
VivaPenguinos 4:99535d368a9f 1178 if (C == 2) {
VivaPenguinos 4:99535d368a9f 1179 RPA = R2_A;
VivaPenguinos 4:99535d368a9f 1180 RPB = R3_B;
VivaPenguinos 4:99535d368a9f 1181 RPC = R2_C;
VivaPenguinos 4:99535d368a9f 1182 RPD = R2_D;
VivaPenguinos 4:99535d368a9f 1183 RPE = R2_E;
VivaPenguinos 4:99535d368a9f 1184 }
VivaPenguinos 4:99535d368a9f 1185 if (C == 1) {
VivaPenguinos 4:99535d368a9f 1186 RPA = R1_A;
VivaPenguinos 4:99535d368a9f 1187 RPB = R1_B;
VivaPenguinos 4:99535d368a9f 1188 RPC = R1_C;
VivaPenguinos 4:99535d368a9f 1189 RPD = R1_D;
VivaPenguinos 4:99535d368a9f 1190 RPE = R1_E;
VivaPenguinos 3:29cff763ae36 1191 }
VivaPenguinos 4:99535d368a9f 1192 RAB = concatenate(RPA, RPB); // R3A + R3B
VivaPenguinos 4:99535d368a9f 1193 RCD = concatenate(RPC, RPD); // R3C + R3D
VivaPenguinos 4:99535d368a9f 1194 RABCD = concatenate(RAB, RCD); // R3AB + R3CD
VivaPenguinos 4:99535d368a9f 1195 RABCDE = concatenate(RABCD, RPE); // R3ABCD = R3E
VivaPenguinos 4:99535d368a9f 1196 //Debug Use:
VivaPenguinos 4:99535d368a9f 1197 //pc.printf("%d\n", RAB);
VivaPenguinos 4:99535d368a9f 1198 //pc.printf("%d\n", RCD);
VivaPenguinos 4:99535d368a9f 1199 //pc.printf("%d\n", RABCD);
VivaPenguinos 4:99535d368a9f 1200 //pc.printf("%d\n", RABCDE);
VivaPenguinos 4:99535d368a9f 1201 return RABCDE;
VivaPenguinos 4:99535d368a9f 1202 }
VivaPenguinos 4:99535d368a9f 1203
VivaPenguinos 4:99535d368a9f 1204
VivaPenguinos 4:99535d368a9f 1205 // Concatenate two Integers. Credits to Mooing Duck. http://stackoverflow.com/questions/12700497/how-to-concatenate-two-integers-in-c
VivaPenguinos 4:99535d368a9f 1206 // 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 1207 unsigned concatenate(unsigned x, unsigned y) {
VivaPenguinos 4:99535d368a9f 1208 unsigned pow = 10;
VivaPenguinos 4:99535d368a9f 1209 while(y >= pow)
VivaPenguinos 4:99535d368a9f 1210 pow *= 10;
VivaPenguinos 4:99535d368a9f 1211 return x * pow + y;
VivaPenguinos 4:99535d368a9f 1212 }
VivaPenguinos 4:99535d368a9f 1213
VivaPenguinos 4:99535d368a9f 1214 void R_GET(int R)
VivaPenguinos 4:99535d368a9f 1215 {
VivaPenguinos 4:99535d368a9f 1216 if (R == 3) {
VivaPenguinos 5:5f08974ef8bb 1217 R3_POS = R_Pos;
VivaPenguinos 5:5f08974ef8bb 1218 R3_NEG = R_Neg;
VivaPenguinos 4:99535d368a9f 1219 R3_A = RVA;
VivaPenguinos 4:99535d368a9f 1220 R3_B = RVB;
VivaPenguinos 4:99535d368a9f 1221 R3_C = RVC;
VivaPenguinos 4:99535d368a9f 1222 R3_D = RVD;
VivaPenguinos 4:99535d368a9f 1223 R3_E = RVE;
VivaPenguinos 4:99535d368a9f 1224 R3_Position = R_Position;
VivaPenguinos 4:99535d368a9f 1225 }
VivaPenguinos 4:99535d368a9f 1226 if (R == 2) {
VivaPenguinos 5:5f08974ef8bb 1227 R2_POS = R_Pos;
VivaPenguinos 5:5f08974ef8bb 1228 R2_NEG = R_Neg;
VivaPenguinos 4:99535d368a9f 1229 R2_A = RVA;
VivaPenguinos 4:99535d368a9f 1230 R2_B = RVB;
VivaPenguinos 4:99535d368a9f 1231 R2_C = RVC;
VivaPenguinos 4:99535d368a9f 1232 R2_D = RVD;
VivaPenguinos 4:99535d368a9f 1233 R2_E = RVE;
VivaPenguinos 4:99535d368a9f 1234 R2_Position = R_Position;
VivaPenguinos 4:99535d368a9f 1235 }
VivaPenguinos 4:99535d368a9f 1236 if (R == 1) {
VivaPenguinos 5:5f08974ef8bb 1237 R1_POS = R_Pos;
VivaPenguinos 5:5f08974ef8bb 1238 R1_NEG = R_Neg;
VivaPenguinos 4:99535d368a9f 1239 R1_A = RVA;
VivaPenguinos 4:99535d368a9f 1240 R1_B = RVB;
VivaPenguinos 4:99535d368a9f 1241 R1_C = RVC;
VivaPenguinos 4:99535d368a9f 1242 R1_D = RVD;
VivaPenguinos 4:99535d368a9f 1243 R1_E = RVE;
VivaPenguinos 4:99535d368a9f 1244 R1_Position = R_Position;
VivaPenguinos 4:99535d368a9f 1245 }
VivaPenguinos 4:99535d368a9f 1246
VivaPenguinos 5:5f08974ef8bb 1247 switch (R_Position) {
VivaPenguinos 4:99535d368a9f 1248 case 1:
VivaPenguinos 4:99535d368a9f 1249 if (Index >-1) {
VivaPenguinos 5:5f08974ef8bb 1250 pc.printf("Plus-Minus\n");
VivaPenguinos 5:5f08974ef8bb 1251 RP = Button_Sort(Index);
VivaPenguinos 5:5f08974ef8bb 1252 if (RP == 0x10) {
VivaPenguinos 5:5f08974ef8bb 1253 R_Pos = 1;
VivaPenguinos 5:5f08974ef8bb 1254 pc.printf("+");
VivaPenguinos 5:5f08974ef8bb 1255 } else if (RP == 0x11) {
VivaPenguinos 5:5f08974ef8bb 1256 R_Neg = 1;
VivaPenguinos 5:5f08974ef8bb 1257 }
VivaPenguinos 5:5f08974ef8bb 1258 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1259 R_Position = 2;
VivaPenguinos 5:5f08974ef8bb 1260 }
VivaPenguinos 5:5f08974ef8bb 1261
VivaPenguinos 5:5f08974ef8bb 1262 case 2:
VivaPenguinos 5:5f08974ef8bb 1263 if (Index >-1) {
VivaPenguinos 4:99535d368a9f 1264 pc.printf("RA\n");
VivaPenguinos 4:99535d368a9f 1265 RA = Button_Sort(Index);
VivaPenguinos 4:99535d368a9f 1266 RVA = RA;
VivaPenguinos 4:99535d368a9f 1267 Shift();
VivaPenguinos 4:99535d368a9f 1268 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1269 R_Position = 3;
VivaPenguinos 4:99535d368a9f 1270 }
VivaPenguinos 5:5f08974ef8bb 1271 case 3:
VivaPenguinos 4:99535d368a9f 1272 if (Index >-1) {
VivaPenguinos 4:99535d368a9f 1273 pc.printf("RB\n");
VivaPenguinos 4:99535d368a9f 1274 RB = Button_Sort(Index);
VivaPenguinos 4:99535d368a9f 1275 RVB = RB;
VivaPenguinos 4:99535d368a9f 1276 Shift();
VivaPenguinos 4:99535d368a9f 1277 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1278 R_Position = 4;
VivaPenguinos 4:99535d368a9f 1279 }
VivaPenguinos 5:5f08974ef8bb 1280 case 4:
VivaPenguinos 4:99535d368a9f 1281 if (Index >-1) {
VivaPenguinos 4:99535d368a9f 1282 pc.printf("RC\n");
VivaPenguinos 4:99535d368a9f 1283 RC = Button_Sort(Index);
VivaPenguinos 4:99535d368a9f 1284 RVC = RC;
VivaPenguinos 4:99535d368a9f 1285 Shift();
VivaPenguinos 4:99535d368a9f 1286 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1287 R_Position = 5;
VivaPenguinos 4:99535d368a9f 1288 }
VivaPenguinos 5:5f08974ef8bb 1289 case 5:
VivaPenguinos 4:99535d368a9f 1290 if (Index >-1) {
VivaPenguinos 4:99535d368a9f 1291 pc.printf("RD\n");
VivaPenguinos 4:99535d368a9f 1292 RD = Button_Sort(Index);
VivaPenguinos 4:99535d368a9f 1293 RVD = RD;
VivaPenguinos 4:99535d368a9f 1294 Shift();
VivaPenguinos 4:99535d368a9f 1295 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1296 R_Position = 6;
VivaPenguinos 4:99535d368a9f 1297 }
VivaPenguinos 5:5f08974ef8bb 1298 case 6:
VivaPenguinos 4:99535d368a9f 1299 if (Index >-1) {
VivaPenguinos 4:99535d368a9f 1300 pc.printf("RE\n");
VivaPenguinos 4:99535d368a9f 1301 RE = Button_Sort(Index);
VivaPenguinos 4:99535d368a9f 1302 RVE = RE;
VivaPenguinos 4:99535d368a9f 1303 Shift();
VivaPenguinos 4:99535d368a9f 1304 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1305 R_Position = 7;
VivaPenguinos 5:5f08974ef8bb 1306 }
VivaPenguinos 5:5f08974ef8bb 1307 }
VivaPenguinos 5:5f08974ef8bb 1308 }
VivaPenguinos 5:5f08974ef8bb 1309
VivaPenguinos 5:5f08974ef8bb 1310 // 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 1311 void N_GET()
VivaPenguinos 5:5f08974ef8bb 1312 {
VivaPenguinos 5:5f08974ef8bb 1313 N_A = NA;
VivaPenguinos 5:5f08974ef8bb 1314 N_B = NB;
VivaPenguinos 5:5f08974ef8bb 1315
VivaPenguinos 5:5f08974ef8bb 1316 switch (N_Position) {
VivaPenguinos 5:5f08974ef8bb 1317 case 1:
VivaPenguinos 5:5f08974ef8bb 1318 if (Index > -1) {
VivaPenguinos 5:5f08974ef8bb 1319 pc.printf("NA\n");
VivaPenguinos 5:5f08974ef8bb 1320 NA = Button_Sort(Index);
VivaPenguinos 5:5f08974ef8bb 1321 Enter_Number1 = NA;
VivaPenguinos 5:5f08974ef8bb 1322 Shift();
VivaPenguinos 5:5f08974ef8bb 1323 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1324 N_Position = 2;
VivaPenguinos 5:5f08974ef8bb 1325 }
VivaPenguinos 5:5f08974ef8bb 1326 case 2:
VivaPenguinos 5:5f08974ef8bb 1327 if (Index > -1) {
VivaPenguinos 5:5f08974ef8bb 1328 pc.printf("NB\n");
VivaPenguinos 5:5f08974ef8bb 1329 NB = Button_Sort(Index);
VivaPenguinos 5:5f08974ef8bb 1330 Enter_Number2 = NB;
VivaPenguinos 5:5f08974ef8bb 1331 Shift();
VivaPenguinos 5:5f08974ef8bb 1332 Index = -1;
VivaPenguinos 5:5f08974ef8bb 1333 N_Position = 3;
VivaPenguinos 4:99535d368a9f 1334 }
VivaPenguinos 4:99535d368a9f 1335 }
VivaPenguinos 4:99535d368a9f 1336
VivaPenguinos 4:99535d368a9f 1337 }
VivaPenguinos 4:99535d368a9f 1338