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:
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?

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 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