![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Working Menu with selectable fields yet to add comparison with healthy temperature ranges
Dependencies: TMP102_02
17665328_SmartVeterinaryThermometer.cpp@9:483d03b3e1bc, 2022-02-04 (annotated)
- Committer:
- ejh23
- Date:
- Fri Feb 04 09:00:38 2022 +0000
- Revision:
- 9:483d03b3e1bc
- Child:
- 10:62da82b9b6de
Near completion - fix error with case switching and struct;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ejh23 | 9:483d03b3e1bc | 1 | /******************************************************************************* |
ejh23 | 9:483d03b3e1bc | 2 | Edward Hindley |
ejh23 | 9:483d03b3e1bc | 3 | Assistive Health device - measure temperature in an energy efficient and easy to use way |
ejh23 | 9:483d03b3e1bc | 4 | Board is initialised and awaits edge triggered interrupts to enable |
ejh23 | 9:483d03b3e1bc | 5 | a menu, measurement type selection and an average temperature reading. |
ejh23 | 9:483d03b3e1bc | 6 | |
ejh23 | 9:483d03b3e1bc | 7 | |
ejh23 | 9:483d03b3e1bc | 8 | * Craig A. Evans, University of Leeds, TMP102 Library, Feb 2016 |
ejh23 | 9:483d03b3e1bc | 9 | * Dr Edmond Nurellari, University of Lincoln, Joystick, N5110 Libraries, Feb 2022 |
ejh23 | 9:483d03b3e1bc | 10 | |
ejh23 | 9:483d03b3e1bc | 11 | *******************************************************************************/ |
ejh23 | 9:483d03b3e1bc | 12 | |
ejh23 | 9:483d03b3e1bc | 13 | #include "mbed.h" //Include all header files to be used throughout |
ejh23 | 9:483d03b3e1bc | 14 | #include "Timer.h" |
ejh23 | 9:483d03b3e1bc | 15 | #include "TMP102.h" |
ejh23 | 9:483d03b3e1bc | 16 | #include "Bitmap.h" |
ejh23 | 9:483d03b3e1bc | 17 | #include "N5110.h" |
ejh23 | 9:483d03b3e1bc | 18 | #include "Joystick.h" |
ejh23 | 9:483d03b3e1bc | 19 | |
ejh23 | 9:483d03b3e1bc | 20 | /******************************************************************************* |
ejh23 | 9:483d03b3e1bc | 21 | Set-up of all vital peripherals |
ejh23 | 9:483d03b3e1bc | 22 | Note that the following values correspond to these notes |
ejh23 | 9:483d03b3e1bc | 23 | NOTE_C4 262, NOTE_CS4 277, NOTE_D4 294, NOTE_DS4 311 |
ejh23 | 9:483d03b3e1bc | 24 | NOTE_E4 330, NOTE_F4 349, NOTE_FS4 370, NOTE_G4 392 |
ejh23 | 9:483d03b3e1bc | 25 | NOTE_GS4 415, NOTE_A4 440, NOTE_AS4 466, NOTE_B4 494 |
ejh23 | 9:483d03b3e1bc | 26 | NOTE_C5 523, NOTE_CS5 554, NOTE_D5 587, NOTE_DS5 622 |
ejh23 | 9:483d03b3e1bc | 27 | NOTE_E5 659, NOTE_F5 698, NOTE_FS5 740, NOTE_G5 784 |
ejh23 | 9:483d03b3e1bc | 28 | NOTE_GS5 831, NOTE_A5 880, NOTE_AS5 932, NOTE_B5 988 |
ejh23 | 9:483d03b3e1bc | 29 | NOTE_C6 1047 |
ejh23 | 9:483d03b3e1bc | 30 | *Author Jorge Rancé, PUBLISHED December 4, 2017 |
ejh23 | 9:483d03b3e1bc | 31 | *******************************************************************************/ |
ejh23 | 9:483d03b3e1bc | 32 | TMP102 tmp102(I2C_SDA,I2C_SCL); |
ejh23 | 9:483d03b3e1bc | 33 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
ejh23 | 9:483d03b3e1bc | 34 | Joystick joystick(PTB10,PTB11,PTC16); |
ejh23 | 9:483d03b3e1bc | 35 | InterruptIn StartButton(PTC5); |
ejh23 | 9:483d03b3e1bc | 36 | InterruptIn BackButton(PTB19); |
ejh23 | 9:483d03b3e1bc | 37 | InterruptIn MenuOnButton(PTB3); //Open Menu |
ejh23 | 9:483d03b3e1bc | 38 | InterruptIn MenuOffButton(PTB18); //Close Menu |
ejh23 | 9:483d03b3e1bc | 39 | InterruptIn YButton(PTC12); //Set contrast |
ejh23 | 9:483d03b3e1bc | 40 | DigitalIn AButton(PTB9); //Submit Joystick Position |
ejh23 | 9:483d03b3e1bc | 41 | DigitalIn BButton(PTD0); //As Yet Unused |
ejh23 | 9:483d03b3e1bc | 42 | BusOut LedStatus(PTA1, PTA2, PTC2, PTC3, PTC4, PTD3); |
ejh23 | 9:483d03b3e1bc | 43 | PwmOut Buzz(PTC10); |
ejh23 | 9:483d03b3e1bc | 44 | AnalogIn Pot(PTB2); |
ejh23 | 9:483d03b3e1bc | 45 | Serial pc(USBTX,USBRX); |
ejh23 | 9:483d03b3e1bc | 46 | /******************************************************************************* |
ejh23 | 9:483d03b3e1bc | 47 | Initiate Variables and Voids |
ejh23 | 9:483d03b3e1bc | 48 | *******************************************************************************/ |
ejh23 | 9:483d03b3e1bc | 49 | volatile int G_RepeatNum; //Global variables denoted G_ |
ejh23 | 9:483d03b3e1bc | 50 | volatile float G_TempR; // TempR = Temp read from sensor |
ejh23 | 9:483d03b3e1bc | 51 | volatile float G_TempAve; |
ejh23 | 9:483d03b3e1bc | 52 | volatile int G_MLayerFlag; // MenuLayer flags = Maintains while loops whilst navigating menus |
ejh23 | 9:483d03b3e1bc | 53 | volatile bool G_APressed; |
ejh23 | 9:483d03b3e1bc | 54 | volatile bool G_BPressed; |
ejh23 | 9:483d03b3e1bc | 55 | volatile int G_PageNum; |
ejh23 | 9:483d03b3e1bc | 56 | volatile int G_PagePos; |
ejh23 | 9:483d03b3e1bc | 57 | volatile int G_SpeciesSelect; |
ejh23 | 9:483d03b3e1bc | 58 | |
ejh23 | 9:483d03b3e1bc | 59 | Timer MLayer1Time; |
ejh23 | 9:483d03b3e1bc | 60 | Timer MLayer2Time; |
ejh23 | 9:483d03b3e1bc | 61 | Timer ReviewTime; //Create Flag reset timer to initiate sleep in inactivity |
ejh23 | 9:483d03b3e1bc | 62 | |
ejh23 | 9:483d03b3e1bc | 63 | void SetContrast(); |
ejh23 | 9:483d03b3e1bc | 64 | void initDevice(); |
ejh23 | 9:483d03b3e1bc | 65 | void FillAnimal(); |
ejh23 | 9:483d03b3e1bc | 66 | void OpenLayer1(); |
ejh23 | 9:483d03b3e1bc | 67 | void OpenLayer2(); |
ejh23 | 9:483d03b3e1bc | 68 | void PageOne(); |
ejh23 | 9:483d03b3e1bc | 69 | void PageTwo(); |
ejh23 | 9:483d03b3e1bc | 70 | void PageThree(); |
ejh23 | 9:483d03b3e1bc | 71 | void PG2_0(); |
ejh23 | 9:483d03b3e1bc | 72 | void PG2_1(); |
ejh23 | 9:483d03b3e1bc | 73 | void PG2_2(); |
ejh23 | 9:483d03b3e1bc | 74 | void PG2_3(); |
ejh23 | 9:483d03b3e1bc | 75 | void PG2_4(); |
ejh23 | 9:483d03b3e1bc | 76 | void PG3_0(); |
ejh23 | 9:483d03b3e1bc | 77 | void PG3_1(); |
ejh23 | 9:483d03b3e1bc | 78 | void PG3_2(); |
ejh23 | 9:483d03b3e1bc | 79 | void PG3_3(); |
ejh23 | 9:483d03b3e1bc | 80 | void PG3_4(); |
ejh23 | 9:483d03b3e1bc | 81 | void TakeRdng(); |
ejh23 | 9:483d03b3e1bc | 82 | void Display(); |
ejh23 | 9:483d03b3e1bc | 83 | void HealthCheck(); |
ejh23 | 9:483d03b3e1bc | 84 | void CloseMenu(); |
ejh23 | 9:483d03b3e1bc | 85 | void RemPrompt(); |
ejh23 | 9:483d03b3e1bc | 86 | |
ejh23 | 9:483d03b3e1bc | 87 | typedef struct Animal{ |
ejh23 | 9:483d03b3e1bc | 88 | float UTemp; |
ejh23 | 9:483d03b3e1bc | 89 | float LTemp; |
ejh23 | 9:483d03b3e1bc | 90 | }; |
ejh23 | 9:483d03b3e1bc | 91 | |
ejh23 | 9:483d03b3e1bc | 92 | //****************************************************************************** |
ejh23 | 9:483d03b3e1bc | 93 | void SetContrast() |
ejh23 | 9:483d03b3e1bc | 94 | { //Move Potentiometer to required position and Press Y to Set |
ejh23 | 9:483d03b3e1bc | 95 | float PotValue = Pot.read(); |
ejh23 | 9:483d03b3e1bc | 96 | printf("Brightness %f\n",PotValue); |
ejh23 | 9:483d03b3e1bc | 97 | lcd.setBrightness(PotValue); |
ejh23 | 9:483d03b3e1bc | 98 | } |
ejh23 | 9:483d03b3e1bc | 99 | |
ejh23 | 9:483d03b3e1bc | 100 | void initDevice() |
ejh23 | 9:483d03b3e1bc | 101 | { |
ejh23 | 9:483d03b3e1bc | 102 | pc.baud(9600); //Set compatible to Terminal software |
ejh23 | 9:483d03b3e1bc | 103 | lcd.init(); //Use library initialisation function for onboard devices |
ejh23 | 9:483d03b3e1bc | 104 | tmp102.init(); |
ejh23 | 9:483d03b3e1bc | 105 | joystick.init(); |
ejh23 | 9:483d03b3e1bc | 106 | StartButton.mode(PullDown); //Set so rise is press and fall is release |
ejh23 | 9:483d03b3e1bc | 107 | BackButton.mode(PullDown); |
ejh23 | 9:483d03b3e1bc | 108 | MenuOnButton.mode(PullDown); |
ejh23 | 9:483d03b3e1bc | 109 | MenuOffButton.mode(PullDown); |
ejh23 | 9:483d03b3e1bc | 110 | AButton.mode(PullDown); |
ejh23 | 9:483d03b3e1bc | 111 | BButton.mode(PullDown); |
ejh23 | 9:483d03b3e1bc | 112 | YButton.mode(PullDown); |
ejh23 | 9:483d03b3e1bc | 113 | printf("Hardware Initialisation Complete \n"); |
ejh23 | 9:483d03b3e1bc | 114 | } |
ejh23 | 9:483d03b3e1bc | 115 | |
ejh23 | 9:483d03b3e1bc | 116 | void FillAnimal() |
ejh23 | 9:483d03b3e1bc | 117 | { |
ejh23 | 9:483d03b3e1bc | 118 | Animal Dog[2]; |
ejh23 | 9:483d03b3e1bc | 119 | { |
ejh23 | 9:483d03b3e1bc | 120 | Dog.UTemp = 39.2; |
ejh23 | 9:483d03b3e1bc | 121 | Dog.LTemp = 37.5; |
ejh23 | 9:483d03b3e1bc | 122 | } |
ejh23 | 9:483d03b3e1bc | 123 | Animal Horse[2]; |
ejh23 | 9:483d03b3e1bc | 124 | { |
ejh23 | 9:483d03b3e1bc | 125 | Horse.UTemp = 38.6; |
ejh23 | 9:483d03b3e1bc | 126 | Horse.LTemp = 37.5; |
ejh23 | 9:483d03b3e1bc | 127 | } |
ejh23 | 9:483d03b3e1bc | 128 | Animal Rabbit[2]; |
ejh23 | 9:483d03b3e1bc | 129 | { |
ejh23 | 9:483d03b3e1bc | 130 | Rabbit.UTemp = 40.0; |
ejh23 | 9:483d03b3e1bc | 131 | Rabbit.LTemp = 38.5; |
ejh23 | 9:483d03b3e1bc | 132 | } |
ejh23 | 9:483d03b3e1bc | 133 | Animal Snake[2]; |
ejh23 | 9:483d03b3e1bc | 134 | { |
ejh23 | 9:483d03b3e1bc | 135 | Snake.UTemp = 31.1; |
ejh23 | 9:483d03b3e1bc | 136 | Snake.LTemp = 23.8; |
ejh23 | 9:483d03b3e1bc | 137 | } |
ejh23 | 9:483d03b3e1bc | 138 | } |
ejh23 | 9:483d03b3e1bc | 139 | |
ejh23 | 9:483d03b3e1bc | 140 | //****************************************************************************** Separator to aid readability |
ejh23 | 9:483d03b3e1bc | 141 | void OpenLayer1() |
ejh23 | 9:483d03b3e1bc | 142 | { |
ejh23 | 9:483d03b3e1bc | 143 | G_MLayerFlag = 1; |
ejh23 | 9:483d03b3e1bc | 144 | MLayer1Time.start(); //MLayer1Time timer started in case this is first time |
ejh23 | 9:483d03b3e1bc | 145 | MLayer1Time.reset(); // running and reset incase this is not first time running |
ejh23 | 9:483d03b3e1bc | 146 | PageOne(); |
ejh23 | 9:483d03b3e1bc | 147 | wait(2.0); |
ejh23 | 9:483d03b3e1bc | 148 | if (G_PageNum==1) |
ejh23 | 9:483d03b3e1bc | 149 | { |
ejh23 | 9:483d03b3e1bc | 150 | while(G_MLayerFlag==1) |
ejh23 | 9:483d03b3e1bc | 151 | { |
ejh23 | 9:483d03b3e1bc | 152 | //printf("G_MLayerFlag is True \n"); |
ejh23 | 9:483d03b3e1bc | 153 | Direction d = joystick.get_direction(); //Upon each cycle of while, check joystick direction and buttons statuses |
ejh23 | 9:483d03b3e1bc | 154 | //printf("Direction %i \n", d); |
ejh23 | 9:483d03b3e1bc | 155 | G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 156 | G_BPressed = BButton.read(); |
ejh23 | 9:483d03b3e1bc | 157 | printf("A Button Status : %d \n", G_APressed); |
ejh23 | 9:483d03b3e1bc | 158 | wait(0.1); |
ejh23 | 9:483d03b3e1bc | 159 | float TimeGone = MLayer1Time.read(); |
ejh23 | 9:483d03b3e1bc | 160 | |
ejh23 | 9:483d03b3e1bc | 161 | if(TimeGone >= 10) //Set value for timer comparitor called TimeGone (Seconds) |
ejh23 | 9:483d03b3e1bc | 162 | { |
ejh23 | 9:483d03b3e1bc | 163 | CloseMenu(); |
ejh23 | 9:483d03b3e1bc | 164 | } |
ejh23 | 9:483d03b3e1bc | 165 | else if(d==1) //1 corresponds to North in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 166 | { |
ejh23 | 9:483d03b3e1bc | 167 | printf("North Time is %.1f \n", TimeGone); |
ejh23 | 9:483d03b3e1bc | 168 | G_PagePos = 1; |
ejh23 | 9:483d03b3e1bc | 169 | G_SpeciesSelect = 1; |
ejh23 | 9:483d03b3e1bc | 170 | PageTwo(); |
ejh23 | 9:483d03b3e1bc | 171 | MLayer1Time.reset(); |
ejh23 | 9:483d03b3e1bc | 172 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 173 | } |
ejh23 | 9:483d03b3e1bc | 174 | else if(d==3) //3 corresponds to East in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 175 | { |
ejh23 | 9:483d03b3e1bc | 176 | printf("East Time is %.1f \n", TimeGone); |
ejh23 | 9:483d03b3e1bc | 177 | G_PagePos = 2; |
ejh23 | 9:483d03b3e1bc | 178 | G_SpeciesSelect = 2; |
ejh23 | 9:483d03b3e1bc | 179 | PageTwo(); |
ejh23 | 9:483d03b3e1bc | 180 | MLayer1Time.reset(); |
ejh23 | 9:483d03b3e1bc | 181 | wait(0.2); |
ejh23 | 9:483d03b3e1bc | 182 | } |
ejh23 | 9:483d03b3e1bc | 183 | else if(d==5) //5 correspsonds to South in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 184 | { |
ejh23 | 9:483d03b3e1bc | 185 | printf("South Time is %.1f \n", TimeGone); |
ejh23 | 9:483d03b3e1bc | 186 | G_PagePos = 3; |
ejh23 | 9:483d03b3e1bc | 187 | G_SpeciesSelect = 3; |
ejh23 | 9:483d03b3e1bc | 188 | PageTwo(); |
ejh23 | 9:483d03b3e1bc | 189 | MLayer1Time.reset(); |
ejh23 | 9:483d03b3e1bc | 190 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 191 | } |
ejh23 | 9:483d03b3e1bc | 192 | else if(d==7) //7 corresponds to West in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 193 | { |
ejh23 | 9:483d03b3e1bc | 194 | printf("West Time is %.1f \n", TimeGone); |
ejh23 | 9:483d03b3e1bc | 195 | G_PagePos = 4; |
ejh23 | 9:483d03b3e1bc | 196 | G_SpeciesSelect = 4; |
ejh23 | 9:483d03b3e1bc | 197 | PageTwo(); |
ejh23 | 9:483d03b3e1bc | 198 | MLayer1Time.reset(); |
ejh23 | 9:483d03b3e1bc | 199 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 200 | } |
ejh23 | 9:483d03b3e1bc | 201 | else if(TimeGone >=2) |
ejh23 | 9:483d03b3e1bc | 202 | { |
ejh23 | 9:483d03b3e1bc | 203 | PG2_0(); |
ejh23 | 9:483d03b3e1bc | 204 | } |
ejh23 | 9:483d03b3e1bc | 205 | if(G_BPressed==1) |
ejh23 | 9:483d03b3e1bc | 206 | { |
ejh23 | 9:483d03b3e1bc | 207 | if(G_PageNum==1) |
ejh23 | 9:483d03b3e1bc | 208 | { |
ejh23 | 9:483d03b3e1bc | 209 | printf("Go to CloseMenu"); |
ejh23 | 9:483d03b3e1bc | 210 | CloseMenu(); |
ejh23 | 9:483d03b3e1bc | 211 | } |
ejh23 | 9:483d03b3e1bc | 212 | else if(G_PageNum==2) |
ejh23 | 9:483d03b3e1bc | 213 | { |
ejh23 | 9:483d03b3e1bc | 214 | printf("Go to PageOne"); |
ejh23 | 9:483d03b3e1bc | 215 | PageOne(); |
ejh23 | 9:483d03b3e1bc | 216 | } |
ejh23 | 9:483d03b3e1bc | 217 | } |
ejh23 | 9:483d03b3e1bc | 218 | } |
ejh23 | 9:483d03b3e1bc | 219 | } |
ejh23 | 9:483d03b3e1bc | 220 | else if(G_PageNum==2) |
ejh23 | 9:483d03b3e1bc | 221 | { |
ejh23 | 9:483d03b3e1bc | 222 | OpenLayer2(); //if MLayer2Flag == 1 should return to OpenLayer2 |
ejh23 | 9:483d03b3e1bc | 223 | } |
ejh23 | 9:483d03b3e1bc | 224 | else if(G_PageNum==0) |
ejh23 | 9:483d03b3e1bc | 225 | { |
ejh23 | 9:483d03b3e1bc | 226 | printf("Menue Closed"); |
ejh23 | 9:483d03b3e1bc | 227 | } |
ejh23 | 9:483d03b3e1bc | 228 | } |
ejh23 | 9:483d03b3e1bc | 229 | //****************************************************************************** |
ejh23 | 9:483d03b3e1bc | 230 | void PageOne() |
ejh23 | 9:483d03b3e1bc | 231 | { |
ejh23 | 9:483d03b3e1bc | 232 | float PotValue = Pot.read(); |
ejh23 | 9:483d03b3e1bc | 233 | lcd.setBrightness(PotValue); |
ejh23 | 9:483d03b3e1bc | 234 | printf("Start Page"); |
ejh23 | 9:483d03b3e1bc | 235 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 236 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 237 | lcd.printString(" Veterinary ",0,1); |
ejh23 | 9:483d03b3e1bc | 238 | lcd.printString("Thermometer",0,2); |
ejh23 | 9:483d03b3e1bc | 239 | lcd.printString(" ",0,3); |
ejh23 | 9:483d03b3e1bc | 240 | lcd.printString("EJH - Feb '22",0,4); |
ejh23 | 9:483d03b3e1bc | 241 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 242 | wait(1.0); |
ejh23 | 9:483d03b3e1bc | 243 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 244 | G_PageNum = 1; |
ejh23 | 9:483d03b3e1bc | 245 | return; |
ejh23 | 9:483d03b3e1bc | 246 | } |
ejh23 | 9:483d03b3e1bc | 247 | |
ejh23 | 9:483d03b3e1bc | 248 | void PageTwo() |
ejh23 | 9:483d03b3e1bc | 249 | { |
ejh23 | 9:483d03b3e1bc | 250 | G_PageNum = 2; |
ejh23 | 9:483d03b3e1bc | 251 | if(G_PagePos==1) |
ejh23 | 9:483d03b3e1bc | 252 | { |
ejh23 | 9:483d03b3e1bc | 253 | PG2_1(); |
ejh23 | 9:483d03b3e1bc | 254 | } |
ejh23 | 9:483d03b3e1bc | 255 | else if(G_PagePos==2) |
ejh23 | 9:483d03b3e1bc | 256 | { |
ejh23 | 9:483d03b3e1bc | 257 | PG2_2(); |
ejh23 | 9:483d03b3e1bc | 258 | } |
ejh23 | 9:483d03b3e1bc | 259 | else if(G_PagePos==3) |
ejh23 | 9:483d03b3e1bc | 260 | { |
ejh23 | 9:483d03b3e1bc | 261 | PG2_3(); |
ejh23 | 9:483d03b3e1bc | 262 | } |
ejh23 | 9:483d03b3e1bc | 263 | else if(G_PagePos==4) |
ejh23 | 9:483d03b3e1bc | 264 | { |
ejh23 | 9:483d03b3e1bc | 265 | PG2_4(); |
ejh23 | 9:483d03b3e1bc | 266 | } |
ejh23 | 9:483d03b3e1bc | 267 | return; |
ejh23 | 9:483d03b3e1bc | 268 | } |
ejh23 | 9:483d03b3e1bc | 269 | void PG2_0() |
ejh23 | 9:483d03b3e1bc | 270 | { |
ejh23 | 9:483d03b3e1bc | 271 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 272 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 273 | lcd.printString(" Dog",0,1); |
ejh23 | 9:483d03b3e1bc | 274 | lcd.printString(" Horse",0,2); |
ejh23 | 9:483d03b3e1bc | 275 | lcd.printString(" Rabbit",0,3); |
ejh23 | 9:483d03b3e1bc | 276 | lcd.printString(" Snake",0,4); |
ejh23 | 9:483d03b3e1bc | 277 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 278 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 279 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 280 | return; |
ejh23 | 9:483d03b3e1bc | 281 | } |
ejh23 | 9:483d03b3e1bc | 282 | void PG2_1() |
ejh23 | 9:483d03b3e1bc | 283 | { |
ejh23 | 9:483d03b3e1bc | 284 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 285 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 286 | lcd.printString("-> Dog",0,1); |
ejh23 | 9:483d03b3e1bc | 287 | lcd.printString(" Horse",0,2); |
ejh23 | 9:483d03b3e1bc | 288 | lcd.printString(" Rabbit",0,3); |
ejh23 | 9:483d03b3e1bc | 289 | lcd.printString(" Snake",0,4); |
ejh23 | 9:483d03b3e1bc | 290 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 291 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 292 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 293 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 294 | { |
ejh23 | 9:483d03b3e1bc | 295 | G_PageNum=2; |
ejh23 | 9:483d03b3e1bc | 296 | G_MLayerFlag=2; |
ejh23 | 9:483d03b3e1bc | 297 | OpenLayer2(); |
ejh23 | 9:483d03b3e1bc | 298 | } |
ejh23 | 9:483d03b3e1bc | 299 | else |
ejh23 | 9:483d03b3e1bc | 300 | { |
ejh23 | 9:483d03b3e1bc | 301 | return; |
ejh23 | 9:483d03b3e1bc | 302 | } |
ejh23 | 9:483d03b3e1bc | 303 | } |
ejh23 | 9:483d03b3e1bc | 304 | void PG2_2() |
ejh23 | 9:483d03b3e1bc | 305 | { |
ejh23 | 9:483d03b3e1bc | 306 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 307 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 308 | lcd.printString(" Dog",0,1); |
ejh23 | 9:483d03b3e1bc | 309 | lcd.printString("-> Horse",0,2); |
ejh23 | 9:483d03b3e1bc | 310 | lcd.printString(" Rabbit",0,3); |
ejh23 | 9:483d03b3e1bc | 311 | lcd.printString(" Snake",0,4); |
ejh23 | 9:483d03b3e1bc | 312 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 313 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 314 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 315 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 316 | { |
ejh23 | 9:483d03b3e1bc | 317 | G_PageNum=2; |
ejh23 | 9:483d03b3e1bc | 318 | G_MLayerFlag=2; |
ejh23 | 9:483d03b3e1bc | 319 | OpenLayer2(); |
ejh23 | 9:483d03b3e1bc | 320 | } |
ejh23 | 9:483d03b3e1bc | 321 | else |
ejh23 | 9:483d03b3e1bc | 322 | { |
ejh23 | 9:483d03b3e1bc | 323 | return; |
ejh23 | 9:483d03b3e1bc | 324 | } |
ejh23 | 9:483d03b3e1bc | 325 | } |
ejh23 | 9:483d03b3e1bc | 326 | void PG2_3() |
ejh23 | 9:483d03b3e1bc | 327 | { |
ejh23 | 9:483d03b3e1bc | 328 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 329 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 330 | lcd.printString(" Dog",0,1); |
ejh23 | 9:483d03b3e1bc | 331 | lcd.printString(" Horse",0,2); |
ejh23 | 9:483d03b3e1bc | 332 | lcd.printString("-> Rabbit",0,3); |
ejh23 | 9:483d03b3e1bc | 333 | lcd.printString(" Snake",0,4); |
ejh23 | 9:483d03b3e1bc | 334 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 335 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 336 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 337 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 338 | { |
ejh23 | 9:483d03b3e1bc | 339 | G_PageNum=2; |
ejh23 | 9:483d03b3e1bc | 340 | G_MLayerFlag=2; |
ejh23 | 9:483d03b3e1bc | 341 | OpenLayer2(); |
ejh23 | 9:483d03b3e1bc | 342 | } |
ejh23 | 9:483d03b3e1bc | 343 | else |
ejh23 | 9:483d03b3e1bc | 344 | { |
ejh23 | 9:483d03b3e1bc | 345 | return; |
ejh23 | 9:483d03b3e1bc | 346 | } |
ejh23 | 9:483d03b3e1bc | 347 | } |
ejh23 | 9:483d03b3e1bc | 348 | void PG2_4() |
ejh23 | 9:483d03b3e1bc | 349 | { |
ejh23 | 9:483d03b3e1bc | 350 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 351 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 352 | lcd.printString(" Dog",0,1); |
ejh23 | 9:483d03b3e1bc | 353 | lcd.printString(" Horse",0,2); |
ejh23 | 9:483d03b3e1bc | 354 | lcd.printString(" Rabbit",0,3); |
ejh23 | 9:483d03b3e1bc | 355 | lcd.printString("-> Snake",0,4); |
ejh23 | 9:483d03b3e1bc | 356 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 357 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 358 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 359 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 360 | { |
ejh23 | 9:483d03b3e1bc | 361 | G_PageNum=2; |
ejh23 | 9:483d03b3e1bc | 362 | G_MLayerFlag=2; |
ejh23 | 9:483d03b3e1bc | 363 | OpenLayer2(); |
ejh23 | 9:483d03b3e1bc | 364 | } |
ejh23 | 9:483d03b3e1bc | 365 | else |
ejh23 | 9:483d03b3e1bc | 366 | { |
ejh23 | 9:483d03b3e1bc | 367 | return; |
ejh23 | 9:483d03b3e1bc | 368 | } |
ejh23 | 9:483d03b3e1bc | 369 | } |
ejh23 | 9:483d03b3e1bc | 370 | //****************************************************************************** |
ejh23 | 9:483d03b3e1bc | 371 | void OpenLayer2() |
ejh23 | 9:483d03b3e1bc | 372 | { |
ejh23 | 9:483d03b3e1bc | 373 | wait(1.0); |
ejh23 | 9:483d03b3e1bc | 374 | MLayer2Time.start(); //MLayer2Time timer started in case this is first time |
ejh23 | 9:483d03b3e1bc | 375 | MLayer2Time.reset(); // running and reset incase this is not first time running |
ejh23 | 9:483d03b3e1bc | 376 | |
ejh23 | 9:483d03b3e1bc | 377 | if(G_PageNum==2) |
ejh23 | 9:483d03b3e1bc | 378 | { |
ejh23 | 9:483d03b3e1bc | 379 | while(G_MLayerFlag==2) |
ejh23 | 9:483d03b3e1bc | 380 | { |
ejh23 | 9:483d03b3e1bc | 381 | //printf("G_MLayerFlag is True \n"); |
ejh23 | 9:483d03b3e1bc | 382 | Direction d = joystick.get_direction(); //Upon each cycle of while, check joystick direction and buttons statuses |
ejh23 | 9:483d03b3e1bc | 383 | printf("Direction %i \n", d); |
ejh23 | 9:483d03b3e1bc | 384 | bool G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 385 | bool G_BPressed = BButton.read(); |
ejh23 | 9:483d03b3e1bc | 386 | //printf("A Button Status : %d \n", G_APressed); |
ejh23 | 9:483d03b3e1bc | 387 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 388 | float TimeGone2 = MLayer2Time.read(); |
ejh23 | 9:483d03b3e1bc | 389 | |
ejh23 | 9:483d03b3e1bc | 390 | if(TimeGone2 >= 10) //Set value for timer comparitor called TimeGone (Seconds) |
ejh23 | 9:483d03b3e1bc | 391 | { |
ejh23 | 9:483d03b3e1bc | 392 | OpenLayer1(); |
ejh23 | 9:483d03b3e1bc | 393 | } |
ejh23 | 9:483d03b3e1bc | 394 | else if(d==1) //1 corresponds to North in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 395 | { |
ejh23 | 9:483d03b3e1bc | 396 | printf("North Time is %.1f \n", TimeGone2); |
ejh23 | 9:483d03b3e1bc | 397 | G_PagePos = 5; |
ejh23 | 9:483d03b3e1bc | 398 | PageThree(); |
ejh23 | 9:483d03b3e1bc | 399 | MLayer2Time.reset(); |
ejh23 | 9:483d03b3e1bc | 400 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 401 | } |
ejh23 | 9:483d03b3e1bc | 402 | else if(d==3) //3 corresponds to East in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 403 | { |
ejh23 | 9:483d03b3e1bc | 404 | printf("East Time is %.1f \n", TimeGone2); |
ejh23 | 9:483d03b3e1bc | 405 | G_PagePos = 6; |
ejh23 | 9:483d03b3e1bc | 406 | PageThree(); |
ejh23 | 9:483d03b3e1bc | 407 | MLayer2Time.reset(); |
ejh23 | 9:483d03b3e1bc | 408 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 409 | } |
ejh23 | 9:483d03b3e1bc | 410 | else if(d==5) //5 correspsonds to South in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 411 | { |
ejh23 | 9:483d03b3e1bc | 412 | printf("South Time is %.1f \n", TimeGone2); |
ejh23 | 9:483d03b3e1bc | 413 | G_PagePos = 7; |
ejh23 | 9:483d03b3e1bc | 414 | PageThree(); |
ejh23 | 9:483d03b3e1bc | 415 | MLayer2Time.reset(); |
ejh23 | 9:483d03b3e1bc | 416 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 417 | } |
ejh23 | 9:483d03b3e1bc | 418 | else if(d==7) //7 corresponds to West in the Enumerator (from joystick header) |
ejh23 | 9:483d03b3e1bc | 419 | { |
ejh23 | 9:483d03b3e1bc | 420 | printf("West Time is %.1f \n", TimeGone2); |
ejh23 | 9:483d03b3e1bc | 421 | G_PagePos = 8; |
ejh23 | 9:483d03b3e1bc | 422 | PageThree(); |
ejh23 | 9:483d03b3e1bc | 423 | MLayer2Time.reset(); |
ejh23 | 9:483d03b3e1bc | 424 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 425 | } |
ejh23 | 9:483d03b3e1bc | 426 | else if(TimeGone2 >=2) |
ejh23 | 9:483d03b3e1bc | 427 | { |
ejh23 | 9:483d03b3e1bc | 428 | PG3_0(); |
ejh23 | 9:483d03b3e1bc | 429 | } |
ejh23 | 9:483d03b3e1bc | 430 | else if(G_BPressed==1) |
ejh23 | 9:483d03b3e1bc | 431 | { |
ejh23 | 9:483d03b3e1bc | 432 | G_PageNum=1; |
ejh23 | 9:483d03b3e1bc | 433 | OpenLayer1(); |
ejh23 | 9:483d03b3e1bc | 434 | } |
ejh23 | 9:483d03b3e1bc | 435 | } |
ejh23 | 9:483d03b3e1bc | 436 | if (G_MLayerFlag==3) |
ejh23 | 9:483d03b3e1bc | 437 | { |
ejh23 | 9:483d03b3e1bc | 438 | TakeRdng(); |
ejh23 | 9:483d03b3e1bc | 439 | } |
ejh23 | 9:483d03b3e1bc | 440 | } |
ejh23 | 9:483d03b3e1bc | 441 | else if(G_PageNum==1) |
ejh23 | 9:483d03b3e1bc | 442 | { |
ejh23 | 9:483d03b3e1bc | 443 | OpenLayer1(); //if MLayer2Flag == 1 should return to OpenLayer2 |
ejh23 | 9:483d03b3e1bc | 444 | } |
ejh23 | 9:483d03b3e1bc | 445 | } |
ejh23 | 9:483d03b3e1bc | 446 | //****************************************************************************** |
ejh23 | 9:483d03b3e1bc | 447 | |
ejh23 | 9:483d03b3e1bc | 448 | void PageThree() |
ejh23 | 9:483d03b3e1bc | 449 | { |
ejh23 | 9:483d03b3e1bc | 450 | //G_PageNum = 3; |
ejh23 | 9:483d03b3e1bc | 451 | if(G_PagePos==5) |
ejh23 | 9:483d03b3e1bc | 452 | { |
ejh23 | 9:483d03b3e1bc | 453 | PG3_1(); |
ejh23 | 9:483d03b3e1bc | 454 | } |
ejh23 | 9:483d03b3e1bc | 455 | else if(G_PagePos==6) |
ejh23 | 9:483d03b3e1bc | 456 | { |
ejh23 | 9:483d03b3e1bc | 457 | PG3_2(); |
ejh23 | 9:483d03b3e1bc | 458 | } |
ejh23 | 9:483d03b3e1bc | 459 | else if(G_PagePos==7) |
ejh23 | 9:483d03b3e1bc | 460 | { |
ejh23 | 9:483d03b3e1bc | 461 | PG3_3(); |
ejh23 | 9:483d03b3e1bc | 462 | } |
ejh23 | 9:483d03b3e1bc | 463 | else if(G_PagePos==8) |
ejh23 | 9:483d03b3e1bc | 464 | { |
ejh23 | 9:483d03b3e1bc | 465 | PG3_4(); |
ejh23 | 9:483d03b3e1bc | 466 | } |
ejh23 | 9:483d03b3e1bc | 467 | return; |
ejh23 | 9:483d03b3e1bc | 468 | } |
ejh23 | 9:483d03b3e1bc | 469 | void PG3_0() |
ejh23 | 9:483d03b3e1bc | 470 | { |
ejh23 | 9:483d03b3e1bc | 471 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 472 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 473 | lcd.printString(" 1 Reading",0,1); |
ejh23 | 9:483d03b3e1bc | 474 | lcd.printString(" 5 Readings",0,2); |
ejh23 | 9:483d03b3e1bc | 475 | lcd.printString(" 20 Readings",0,3); |
ejh23 | 9:483d03b3e1bc | 476 | lcd.printString(" 100 Readings",0,4); |
ejh23 | 9:483d03b3e1bc | 477 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 478 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 479 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 480 | return; |
ejh23 | 9:483d03b3e1bc | 481 | } |
ejh23 | 9:483d03b3e1bc | 482 | void PG3_1() |
ejh23 | 9:483d03b3e1bc | 483 | { |
ejh23 | 9:483d03b3e1bc | 484 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 485 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 486 | lcd.printString("->1 Reading",0,1); |
ejh23 | 9:483d03b3e1bc | 487 | lcd.printString(" 5 Readings",0,2); |
ejh23 | 9:483d03b3e1bc | 488 | lcd.printString(" 20 Readings",0,3); |
ejh23 | 9:483d03b3e1bc | 489 | lcd.printString(" 100 Readings",0,4); |
ejh23 | 9:483d03b3e1bc | 490 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 491 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 492 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 493 | bool G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 494 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 495 | { |
ejh23 | 9:483d03b3e1bc | 496 | G_RepeatNum = 1; |
ejh23 | 9:483d03b3e1bc | 497 | G_MLayerFlag=3; |
ejh23 | 9:483d03b3e1bc | 498 | //TakeRdng(); |
ejh23 | 9:483d03b3e1bc | 499 | } |
ejh23 | 9:483d03b3e1bc | 500 | else |
ejh23 | 9:483d03b3e1bc | 501 | { |
ejh23 | 9:483d03b3e1bc | 502 | return; |
ejh23 | 9:483d03b3e1bc | 503 | } |
ejh23 | 9:483d03b3e1bc | 504 | } |
ejh23 | 9:483d03b3e1bc | 505 | void PG3_2() |
ejh23 | 9:483d03b3e1bc | 506 | { |
ejh23 | 9:483d03b3e1bc | 507 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 508 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 509 | lcd.printString(" 1 Reading",0,1); |
ejh23 | 9:483d03b3e1bc | 510 | lcd.printString("->5 Readings",0,2); |
ejh23 | 9:483d03b3e1bc | 511 | lcd.printString(" 20 Readings",0,3); |
ejh23 | 9:483d03b3e1bc | 512 | lcd.printString(" 100 Readings",0,4); |
ejh23 | 9:483d03b3e1bc | 513 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 514 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 515 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 516 | bool G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 517 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 518 | { |
ejh23 | 9:483d03b3e1bc | 519 | G_RepeatNum = 5; |
ejh23 | 9:483d03b3e1bc | 520 | G_MLayerFlag=3; |
ejh23 | 9:483d03b3e1bc | 521 | //TakeRdng(); |
ejh23 | 9:483d03b3e1bc | 522 | } |
ejh23 | 9:483d03b3e1bc | 523 | else |
ejh23 | 9:483d03b3e1bc | 524 | { |
ejh23 | 9:483d03b3e1bc | 525 | return; |
ejh23 | 9:483d03b3e1bc | 526 | } |
ejh23 | 9:483d03b3e1bc | 527 | } |
ejh23 | 9:483d03b3e1bc | 528 | void PG3_3() |
ejh23 | 9:483d03b3e1bc | 529 | { |
ejh23 | 9:483d03b3e1bc | 530 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 531 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 532 | lcd.printString(" 1 Reading",0,1); |
ejh23 | 9:483d03b3e1bc | 533 | lcd.printString(" 5 Readings",0,2); |
ejh23 | 9:483d03b3e1bc | 534 | lcd.printString("->20 Readings",0,3); |
ejh23 | 9:483d03b3e1bc | 535 | lcd.printString(" 100 Readings",0,4); |
ejh23 | 9:483d03b3e1bc | 536 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 537 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 538 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 539 | bool G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 540 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 541 | { |
ejh23 | 9:483d03b3e1bc | 542 | G_RepeatNum = 20; |
ejh23 | 9:483d03b3e1bc | 543 | G_MLayerFlag=3; |
ejh23 | 9:483d03b3e1bc | 544 | //TakeRdng(); |
ejh23 | 9:483d03b3e1bc | 545 | } |
ejh23 | 9:483d03b3e1bc | 546 | else |
ejh23 | 9:483d03b3e1bc | 547 | { |
ejh23 | 9:483d03b3e1bc | 548 | return; |
ejh23 | 9:483d03b3e1bc | 549 | } |
ejh23 | 9:483d03b3e1bc | 550 | } |
ejh23 | 9:483d03b3e1bc | 551 | void PG3_4() |
ejh23 | 9:483d03b3e1bc | 552 | { |
ejh23 | 9:483d03b3e1bc | 553 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 554 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 555 | lcd.printString(" 1 Reading",0,1); |
ejh23 | 9:483d03b3e1bc | 556 | lcd.printString(" 5 Readings",0,2); |
ejh23 | 9:483d03b3e1bc | 557 | lcd.printString(" 20 Readings",0,3); |
ejh23 | 9:483d03b3e1bc | 558 | lcd.printString("->100 Readings",0,4); |
ejh23 | 9:483d03b3e1bc | 559 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 560 | wait(0.05); |
ejh23 | 9:483d03b3e1bc | 561 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 562 | bool G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 563 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 564 | { |
ejh23 | 9:483d03b3e1bc | 565 | G_RepeatNum = 100; |
ejh23 | 9:483d03b3e1bc | 566 | G_MLayerFlag=3; |
ejh23 | 9:483d03b3e1bc | 567 | //TakeRdng(); |
ejh23 | 9:483d03b3e1bc | 568 | } |
ejh23 | 9:483d03b3e1bc | 569 | else |
ejh23 | 9:483d03b3e1bc | 570 | { |
ejh23 | 9:483d03b3e1bc | 571 | return; |
ejh23 | 9:483d03b3e1bc | 572 | } |
ejh23 | 9:483d03b3e1bc | 573 | } |
ejh23 | 9:483d03b3e1bc | 574 | void CloseMenu() |
ejh23 | 9:483d03b3e1bc | 575 | { |
ejh23 | 9:483d03b3e1bc | 576 | lcd.setBrightness(0.00); |
ejh23 | 9:483d03b3e1bc | 577 | G_PageNum = 0; |
ejh23 | 9:483d03b3e1bc | 578 | G_MLayerFlag = 0; |
ejh23 | 9:483d03b3e1bc | 579 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 580 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 581 | printf("Menu Closed and Flag Reset \n"); |
ejh23 | 9:483d03b3e1bc | 582 | } |
ejh23 | 9:483d03b3e1bc | 583 | |
ejh23 | 9:483d03b3e1bc | 584 | |
ejh23 | 9:483d03b3e1bc | 585 | void TakeRdng() |
ejh23 | 9:483d03b3e1bc | 586 | { |
ejh23 | 9:483d03b3e1bc | 587 | float TempSum = 0; |
ejh23 | 9:483d03b3e1bc | 588 | G_TempR = tmp102.get_temperature(); // read temperature save to variable TempR |
ejh23 | 9:483d03b3e1bc | 589 | for(int i=0; i<G_RepeatNum; i++) { //change G_RepeatNum set by user in menu |
ejh23 | 9:483d03b3e1bc | 590 | printf("Temp was %.2f \n", G_TempR); |
ejh23 | 9:483d03b3e1bc | 591 | TempSum = TempSum + G_TempR; |
ejh23 | 9:483d03b3e1bc | 592 | printf("TempSum = %.2f \n",TempSum); |
ejh23 | 9:483d03b3e1bc | 593 | /*Buzz.period(1.0/523.0); |
ejh23 | 9:483d03b3e1bc | 594 | Buzz = 0.5; |
ejh23 | 9:483d03b3e1bc | 595 | wait(0.5); //Rough time between readings |
ejh23 | 9:483d03b3e1bc | 596 | */Buzz = 0; |
ejh23 | 9:483d03b3e1bc | 597 | if(G_BPressed==1) |
ejh23 | 9:483d03b3e1bc | 598 | { |
ejh23 | 9:483d03b3e1bc | 599 | G_RepeatNum = 0; |
ejh23 | 9:483d03b3e1bc | 600 | OpenLayer2(); |
ejh23 | 9:483d03b3e1bc | 601 | } |
ejh23 | 9:483d03b3e1bc | 602 | } |
ejh23 | 9:483d03b3e1bc | 603 | G_TempAve = TempSum / G_RepeatNum; //Average Temperature Calculation using the RepeatNum |
ejh23 | 9:483d03b3e1bc | 604 | HealthCheck(); // variable as number of elements in average |
ejh23 | 9:483d03b3e1bc | 605 | } |
ejh23 | 9:483d03b3e1bc | 606 | enum SpeciesPage |
ejh23 | 9:483d03b3e1bc | 607 | { |
ejh23 | 9:483d03b3e1bc | 608 | SpeciesDog=1, |
ejh23 | 9:483d03b3e1bc | 609 | SpeciesHorse=2, |
ejh23 | 9:483d03b3e1bc | 610 | SpeciesRabbit=3, |
ejh23 | 9:483d03b3e1bc | 611 | SpeciesSnake=4, |
ejh23 | 9:483d03b3e1bc | 612 | SpeciesState=5, |
ejh23 | 9:483d03b3e1bc | 613 | }; |
ejh23 | 9:483d03b3e1bc | 614 | void Display() |
ejh23 | 9:483d03b3e1bc | 615 | { |
ejh23 | 9:483d03b3e1bc | 616 | int DisplayType = SpeciesState; |
ejh23 | 9:483d03b3e1bc | 617 | int NextDisplayType = SpeciesState; |
ejh23 | 9:483d03b3e1bc | 618 | switch(DisplayType) |
ejh23 | 9:483d03b3e1bc | 619 | { |
ejh23 | 9:483d03b3e1bc | 620 | case SpeciesState: |
ejh23 | 9:483d03b3e1bc | 621 | { |
ejh23 | 9:483d03b3e1bc | 622 | if(G_SpeciesSelect == 1) |
ejh23 | 9:483d03b3e1bc | 623 | { |
ejh23 | 9:483d03b3e1bc | 624 | NextDisplayType = SpeciesDog; |
ejh23 | 9:483d03b3e1bc | 625 | } |
ejh23 | 9:483d03b3e1bc | 626 | else if(G_SpeciesSelect == 2) |
ejh23 | 9:483d03b3e1bc | 627 | { |
ejh23 | 9:483d03b3e1bc | 628 | NextDisplayType = SpeciesHorse; |
ejh23 | 9:483d03b3e1bc | 629 | } |
ejh23 | 9:483d03b3e1bc | 630 | else if(G_SpeciesSelect == 3) |
ejh23 | 9:483d03b3e1bc | 631 | { |
ejh23 | 9:483d03b3e1bc | 632 | NextDisplayType = SpeciesRabbit; |
ejh23 | 9:483d03b3e1bc | 633 | } |
ejh23 | 9:483d03b3e1bc | 634 | else if(G_SpeciesSelect == 4) |
ejh23 | 9:483d03b3e1bc | 635 | { |
ejh23 | 9:483d03b3e1bc | 636 | NextDisplayType = SpeciesSnake; |
ejh23 | 9:483d03b3e1bc | 637 | } |
ejh23 | 9:483d03b3e1bc | 638 | } |
ejh23 | 9:483d03b3e1bc | 639 | case SpeciesDog: |
ejh23 | 9:483d03b3e1bc | 640 | { |
ejh23 | 9:483d03b3e1bc | 641 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 642 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 643 | lcd.printString("Dog Health",0,1); |
ejh23 | 9:483d03b3e1bc | 644 | char buffer[14]; |
ejh23 | 9:483d03b3e1bc | 645 | int length = sprintf(buffer,"T=%.3f 'C", G_TempAve); |
ejh23 | 9:483d03b3e1bc | 646 | if (length <= 14) //check string fits on screen (14 lots of 6 wide characters) |
ejh23 | 9:483d03b3e1bc | 647 | lcd.printString(buffer,0,2); |
ejh23 | 9:483d03b3e1bc | 648 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 649 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 650 | if (G_TempAve >= Dog.LTemp and G_TempAve <= Dog.UTemp) |
ejh23 | 9:483d03b3e1bc | 651 | { |
ejh23 | 9:483d03b3e1bc | 652 | lcd.printString("Temperature OK",0,3); |
ejh23 | 9:483d03b3e1bc | 653 | } |
ejh23 | 9:483d03b3e1bc | 654 | } |
ejh23 | 9:483d03b3e1bc | 655 | case SpeciesHorse: |
ejh23 | 9:483d03b3e1bc | 656 | { |
ejh23 | 9:483d03b3e1bc | 657 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 658 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 659 | lcd.printString("Horse Health",0,1); |
ejh23 | 9:483d03b3e1bc | 660 | char buffer[14]; |
ejh23 | 9:483d03b3e1bc | 661 | int length = sprintf(buffer,"T=%.3f 'C", G_TempAve); |
ejh23 | 9:483d03b3e1bc | 662 | if (length <= 14) //check string fits on screen (14 lots of 6 wide characters) |
ejh23 | 9:483d03b3e1bc | 663 | lcd.printString(buffer,0,2); |
ejh23 | 9:483d03b3e1bc | 664 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 665 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 666 | if (G_TempAve >= Horse.LTemp and G_TempAve <= Horse.UTemp) |
ejh23 | 9:483d03b3e1bc | 667 | { |
ejh23 | 9:483d03b3e1bc | 668 | lcd.printString("Temperature OK",0,3); |
ejh23 | 9:483d03b3e1bc | 669 | } |
ejh23 | 9:483d03b3e1bc | 670 | } |
ejh23 | 9:483d03b3e1bc | 671 | case SpeciesRabbit: |
ejh23 | 9:483d03b3e1bc | 672 | { |
ejh23 | 9:483d03b3e1bc | 673 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 674 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 675 | lcd.printString("Rabbit Health",0,1); |
ejh23 | 9:483d03b3e1bc | 676 | char buffer[14]; |
ejh23 | 9:483d03b3e1bc | 677 | int length = sprintf(buffer,"T=%.3f 'C", G_TempAve); |
ejh23 | 9:483d03b3e1bc | 678 | if (length <= 14) //check string fits on screen (14 lots of 6 wide characters) |
ejh23 | 9:483d03b3e1bc | 679 | lcd.printString(buffer,0,2); |
ejh23 | 9:483d03b3e1bc | 680 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 681 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 682 | if (G_TempAve >= Rabbit.LTemp and G_TempAve <= Rabbit.UTemp) |
ejh23 | 9:483d03b3e1bc | 683 | { |
ejh23 | 9:483d03b3e1bc | 684 | lcd.printString("Temperature OK",0,3); |
ejh23 | 9:483d03b3e1bc | 685 | } |
ejh23 | 9:483d03b3e1bc | 686 | } |
ejh23 | 9:483d03b3e1bc | 687 | case SpeciesSnake: |
ejh23 | 9:483d03b3e1bc | 688 | { |
ejh23 | 9:483d03b3e1bc | 689 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 690 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 691 | lcd.printString("Snake Health",0,1); |
ejh23 | 9:483d03b3e1bc | 692 | char buffer[14]; |
ejh23 | 9:483d03b3e1bc | 693 | int length = sprintf(buffer,"T=%.3f 'C", G_TempAve); |
ejh23 | 9:483d03b3e1bc | 694 | if (length <= 14) //check string fits on screen (14 lots of 6 wide characters) |
ejh23 | 9:483d03b3e1bc | 695 | lcd.printString(buffer,0,2); |
ejh23 | 9:483d03b3e1bc | 696 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 697 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 698 | if (G_TempAve >= Snake.LTemp and G_TempAve <= Snake.UTemp) |
ejh23 | 9:483d03b3e1bc | 699 | { |
ejh23 | 9:483d03b3e1bc | 700 | lcd.printString("Temperature OK",0,3); |
ejh23 | 9:483d03b3e1bc | 701 | } |
ejh23 | 9:483d03b3e1bc | 702 | } |
ejh23 | 9:483d03b3e1bc | 703 | } |
ejh23 | 9:483d03b3e1bc | 704 | /*printf("Average Reading = %.2f \n",G_TempAve); |
ejh23 | 9:483d03b3e1bc | 705 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 706 | char buffer[14]; |
ejh23 | 9:483d03b3e1bc | 707 | int length = sprintf(buffer,"T=%.3f 'C", G_TempAve); |
ejh23 | 9:483d03b3e1bc | 708 | if (length <= 14) //check string fits on screen (14 lots of 6 wide characters) |
ejh23 | 9:483d03b3e1bc | 709 | lcd.printString(buffer,0,1); |
ejh23 | 9:483d03b3e1bc | 710 | lcd.refresh(); */ |
ejh23 | 9:483d03b3e1bc | 711 | } |
ejh23 | 9:483d03b3e1bc | 712 | void RemPrompt() |
ejh23 | 9:483d03b3e1bc | 713 | { |
ejh23 | 9:483d03b3e1bc | 714 | lcd.clear(); |
ejh23 | 9:483d03b3e1bc | 715 | lcd.drawLine(1,1,84,1,1); |
ejh23 | 9:483d03b3e1bc | 716 | lcd.printString("Device may",0,1); |
ejh23 | 9:483d03b3e1bc | 717 | lcd.printString("sleep soon!",0,2); |
ejh23 | 9:483d03b3e1bc | 718 | lcd.printString("A to keep Temp",0,3); |
ejh23 | 9:483d03b3e1bc | 719 | lcd.printstring("B to main menu",0,4); |
ejh23 | 9:483d03b3e1bc | 720 | lcd.drawLine(1,47,84,47,1); |
ejh23 | 9:483d03b3e1bc | 721 | lcd.refresh(); |
ejh23 | 9:483d03b3e1bc | 722 | } //Prompts user to allow screen to sleep |
ejh23 | 9:483d03b3e1bc | 723 | void HealthCheck() |
ejh23 | 9:483d03b3e1bc | 724 | { |
ejh23 | 9:483d03b3e1bc | 725 | ReviewTime.start(); //ReviewTime timer started in case this is first time |
ejh23 | 9:483d03b3e1bc | 726 | bool G_APressed = AButton.read(); |
ejh23 | 9:483d03b3e1bc | 727 | Display(); |
ejh23 | 9:483d03b3e1bc | 728 | while(ReviewTime<=30) |
ejh23 | 9:483d03b3e1bc | 729 | { |
ejh23 | 9:483d03b3e1bc | 730 | if(ReviewTime>=10) |
ejh23 | 9:483d03b3e1bc | 731 | { |
ejh23 | 9:483d03b3e1bc | 732 | RemPrompt(); |
ejh23 | 9:483d03b3e1bc | 733 | } |
ejh23 | 9:483d03b3e1bc | 734 | if (G_APressed==1) |
ejh23 | 9:483d03b3e1bc | 735 | { |
ejh23 | 9:483d03b3e1bc | 736 | ReviewTime.reset(); |
ejh23 | 9:483d03b3e1bc | 737 | } |
ejh23 | 9:483d03b3e1bc | 738 | else if(G_BPressed==1) |
ejh23 | 9:483d03b3e1bc | 739 | { |
ejh23 | 9:483d03b3e1bc | 740 | G_MLayerFlag =1; |
ejh23 | 9:483d03b3e1bc | 741 | G_PageNum =1; |
ejh23 | 9:483d03b3e1bc | 742 | OpenLayer1(); |
ejh23 | 9:483d03b3e1bc | 743 | } |
ejh23 | 9:483d03b3e1bc | 744 | } |
ejh23 | 9:483d03b3e1bc | 745 | CloseMenu(); |
ejh23 | 9:483d03b3e1bc | 746 | } |
ejh23 | 9:483d03b3e1bc | 747 | |
ejh23 | 9:483d03b3e1bc | 748 | int main() |
ejh23 | 9:483d03b3e1bc | 749 | { |
ejh23 | 9:483d03b3e1bc | 750 | initDevice(); |
ejh23 | 9:483d03b3e1bc | 751 | FillAnimal(); //Initiate Hardware |
ejh23 | 9:483d03b3e1bc | 752 | YButton.rise(&SetContrast); //Interrupts connected to voids |
ejh23 | 9:483d03b3e1bc | 753 | StartButton.rise(&TakeRdng); |
ejh23 | 9:483d03b3e1bc | 754 | MenuOnButton.rise(&OpenLayer1); |
ejh23 | 9:483d03b3e1bc | 755 | MenuOffButton.rise(&CloseMenu); //Obselete |
ejh23 | 9:483d03b3e1bc | 756 | } |