Working Menu with selectable fields yet to add comparison with healthy temperature ranges

Dependencies:   TMP102_02

Committer:
ejh23
Date:
Fri Feb 04 19:10:09 2022 +0000
Revision:
10:62da82b9b6de
Parent:
9:483d03b3e1bc
Final code for submission

Who changed what in which revision?

UserRevisionLine numberNew 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 10:62da82b9b6de 59 Timer MLayer1Time; //Create Flag reset timer to initiate sleep in inactivity
ejh23 10:62da82b9b6de 60 Timer MLayer2Time; // used extensively to ensure device is not on during periods of inactivity
ejh23 10:62da82b9b6de 61 Timer ReviewTime;
ejh23 10:62da82b9b6de 62 Timer PromptTime;
ejh23 9:483d03b3e1bc 63
ejh23 9:483d03b3e1bc 64 void SetContrast();
ejh23 9:483d03b3e1bc 65 void initDevice();
ejh23 9:483d03b3e1bc 66 void FillAnimal();
ejh23 9:483d03b3e1bc 67 void OpenLayer1();
ejh23 9:483d03b3e1bc 68 void OpenLayer2();
ejh23 9:483d03b3e1bc 69 void PageOne();
ejh23 9:483d03b3e1bc 70 void PageTwo();
ejh23 9:483d03b3e1bc 71 void PageThree();
ejh23 9:483d03b3e1bc 72 void PG2_0();
ejh23 9:483d03b3e1bc 73 void PG2_1();
ejh23 9:483d03b3e1bc 74 void PG2_2();
ejh23 9:483d03b3e1bc 75 void PG2_3();
ejh23 9:483d03b3e1bc 76 void PG2_4();
ejh23 9:483d03b3e1bc 77 void PG3_0();
ejh23 9:483d03b3e1bc 78 void PG3_1();
ejh23 9:483d03b3e1bc 79 void PG3_2();
ejh23 9:483d03b3e1bc 80 void PG3_3();
ejh23 9:483d03b3e1bc 81 void PG3_4();
ejh23 9:483d03b3e1bc 82 void TakeRdng();
ejh23 9:483d03b3e1bc 83 void Display();
ejh23 9:483d03b3e1bc 84 void HealthCheck();
ejh23 9:483d03b3e1bc 85 void CloseMenu();
ejh23 9:483d03b3e1bc 86 void RemPrompt();
ejh23 9:483d03b3e1bc 87
ejh23 10:62da82b9b6de 88 /*struct Animal{ Unsuccessful use of structs to store temperature ranges
ejh23 10:62da82b9b6de 89 float UTemp,LTemp; considered healthy for different species
ejh23 10:62da82b9b6de 90 };
ejh23 10:62da82b9b6de 91
ejh23 10:62da82b9b6de 92 struct Dog{
ejh23 10:62da82b9b6de 93 float UTemp = 39.2;
ejh23 10:62da82b9b6de 94 float LTemp = 37.5;
ejh23 9:483d03b3e1bc 95 };
ejh23 10:62da82b9b6de 96 struct Horse{
ejh23 10:62da82b9b6de 97 float UTemp = 38.6;
ejh23 10:62da82b9b6de 98 float LTemp = 37.5;
ejh23 10:62da82b9b6de 99 };
ejh23 10:62da82b9b6de 100 struct Rabbit{
ejh23 10:62da82b9b6de 101 float UTemp = 40.0;
ejh23 10:62da82b9b6de 102 float LTemp = 38.5;
ejh23 10:62da82b9b6de 103 };
ejh23 10:62da82b9b6de 104 struct Snake{
ejh23 10:62da82b9b6de 105 float UTemp = 31.1;
ejh23 10:62da82b9b6de 106 float LTemp = 23.8;
ejh23 10:62da82b9b6de 107 };*/
ejh23 9:483d03b3e1bc 108
ejh23 9:483d03b3e1bc 109 //******************************************************************************
ejh23 9:483d03b3e1bc 110 void SetContrast()
ejh23 9:483d03b3e1bc 111 { //Move Potentiometer to required position and Press Y to Set
ejh23 9:483d03b3e1bc 112 float PotValue = Pot.read();
ejh23 9:483d03b3e1bc 113 printf("Brightness %f\n",PotValue);
ejh23 9:483d03b3e1bc 114 lcd.setBrightness(PotValue);
ejh23 9:483d03b3e1bc 115 }
ejh23 9:483d03b3e1bc 116
ejh23 9:483d03b3e1bc 117 void initDevice()
ejh23 9:483d03b3e1bc 118 {
ejh23 9:483d03b3e1bc 119 pc.baud(9600); //Set compatible to Terminal software
ejh23 9:483d03b3e1bc 120 lcd.init(); //Use library initialisation function for onboard devices
ejh23 9:483d03b3e1bc 121 tmp102.init();
ejh23 9:483d03b3e1bc 122 joystick.init();
ejh23 9:483d03b3e1bc 123 StartButton.mode(PullDown); //Set so rise is press and fall is release
ejh23 9:483d03b3e1bc 124 BackButton.mode(PullDown);
ejh23 9:483d03b3e1bc 125 MenuOnButton.mode(PullDown);
ejh23 9:483d03b3e1bc 126 MenuOffButton.mode(PullDown);
ejh23 9:483d03b3e1bc 127 AButton.mode(PullDown);
ejh23 9:483d03b3e1bc 128 BButton.mode(PullDown);
ejh23 9:483d03b3e1bc 129 YButton.mode(PullDown);
ejh23 10:62da82b9b6de 130 lcd.setBrightness(0.00);
ejh23 10:62da82b9b6de 131 Buzz.period(1.0/587.0); //Play tones users can recognise as initialising the device
ejh23 10:62da82b9b6de 132 Buzz = 0.15; // ready for use but screen not on
ejh23 10:62da82b9b6de 133 wait(0.1);
ejh23 10:62da82b9b6de 134 Buzz.period(1.0/392.0);
ejh23 10:62da82b9b6de 135 Buzz = 0.5;
ejh23 10:62da82b9b6de 136 wait(0.2);
ejh23 10:62da82b9b6de 137 Buzz.period(1.0/659.0);
ejh23 10:62da82b9b6de 138 Buzz = 0.5;
ejh23 10:62da82b9b6de 139 wait(0.1);
ejh23 10:62da82b9b6de 140 Buzz = 0;
ejh23 9:483d03b3e1bc 141 printf("Hardware Initialisation Complete \n");
ejh23 9:483d03b3e1bc 142 }
ejh23 9:483d03b3e1bc 143
ejh23 9:483d03b3e1bc 144 void FillAnimal()
ejh23 9:483d03b3e1bc 145 {
ejh23 10:62da82b9b6de 146 // struct Animal Dog = {39.2,37.5}; Unsuccessful use of structs to store temperature ranges
ejh23 10:62da82b9b6de 147 //float UTemp,LTemp; considered healthy for different species
ejh23 10:62da82b9b6de 148 /* Animal Dog[2] =
ejh23 9:483d03b3e1bc 149 {
ejh23 9:483d03b3e1bc 150 Dog.UTemp = 39.2;
ejh23 9:483d03b3e1bc 151 Dog.LTemp = 37.5;
ejh23 9:483d03b3e1bc 152 }
ejh23 10:62da82b9b6de 153 Animal Horse[2] =
ejh23 9:483d03b3e1bc 154 {
ejh23 9:483d03b3e1bc 155 Horse.UTemp = 38.6;
ejh23 9:483d03b3e1bc 156 Horse.LTemp = 37.5;
ejh23 9:483d03b3e1bc 157 }
ejh23 10:62da82b9b6de 158 Animal Rabbit[2] =
ejh23 9:483d03b3e1bc 159 {
ejh23 9:483d03b3e1bc 160 Rabbit.UTemp = 40.0;
ejh23 9:483d03b3e1bc 161 Rabbit.LTemp = 38.5;
ejh23 9:483d03b3e1bc 162 }
ejh23 10:62da82b9b6de 163 Animal Snake[2] =
ejh23 9:483d03b3e1bc 164 {
ejh23 9:483d03b3e1bc 165 Snake.UTemp = 31.1;
ejh23 9:483d03b3e1bc 166 Snake.LTemp = 23.8;
ejh23 10:62da82b9b6de 167 }*/
ejh23 9:483d03b3e1bc 168 }
ejh23 9:483d03b3e1bc 169
ejh23 10:62da82b9b6de 170 /******************************************************************************
ejh23 10:62da82b9b6de 171 Reading values fromthe joystick - direction converted to integer in joystick cpp file
ejh23 10:62da82b9b6de 172 1 corresponds to North in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 173 3 corresponds to East in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 174 5 correspsonds to South in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 175 7 corresponds to West in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 176
ejh23 10:62da82b9b6de 177
ejh23 10:62da82b9b6de 178 *******************************************************************************/
ejh23 9:483d03b3e1bc 179 void OpenLayer1()
ejh23 9:483d03b3e1bc 180 {
ejh23 9:483d03b3e1bc 181 G_MLayerFlag = 1;
ejh23 9:483d03b3e1bc 182 MLayer1Time.start(); //MLayer1Time timer started in case this is first time
ejh23 9:483d03b3e1bc 183 MLayer1Time.reset(); // running and reset incase this is not first time running
ejh23 9:483d03b3e1bc 184 PageOne();
ejh23 9:483d03b3e1bc 185 wait(2.0);
ejh23 9:483d03b3e1bc 186 if (G_PageNum==1)
ejh23 9:483d03b3e1bc 187 {
ejh23 9:483d03b3e1bc 188 while(G_MLayerFlag==1)
ejh23 9:483d03b3e1bc 189 {
ejh23 9:483d03b3e1bc 190 //printf("G_MLayerFlag is True \n");
ejh23 10:62da82b9b6de 191 Direction d = joystick.get_direction(); //Upon each cycle of while, check joystick direction and buttons statuses
ejh23 10:62da82b9b6de 192 //printf("Direction %i \n", d); improvement could be made to up the reaction time to user input
ejh23 9:483d03b3e1bc 193 G_APressed = AButton.read();
ejh23 9:483d03b3e1bc 194 G_BPressed = BButton.read();
ejh23 9:483d03b3e1bc 195 printf("A Button Status : %d \n", G_APressed);
ejh23 9:483d03b3e1bc 196 wait(0.1);
ejh23 9:483d03b3e1bc 197 float TimeGone = MLayer1Time.read();
ejh23 9:483d03b3e1bc 198
ejh23 10:62da82b9b6de 199 if(TimeGone >= 10) //Set value for timer comparitor called TimeGone (Seconds)
ejh23 9:483d03b3e1bc 200 {
ejh23 9:483d03b3e1bc 201 CloseMenu();
ejh23 9:483d03b3e1bc 202 }
ejh23 10:62da82b9b6de 203 else if(d==1)
ejh23 9:483d03b3e1bc 204 {
ejh23 9:483d03b3e1bc 205 printf("North Time is %.1f \n", TimeGone);
ejh23 10:62da82b9b6de 206 G_PagePos = 1;
ejh23 9:483d03b3e1bc 207 G_SpeciesSelect = 1;
ejh23 10:62da82b9b6de 208 PageTwo();
ejh23 9:483d03b3e1bc 209 MLayer1Time.reset();
ejh23 9:483d03b3e1bc 210 wait(0.05);
ejh23 9:483d03b3e1bc 211 }
ejh23 10:62da82b9b6de 212 else if(d==3)
ejh23 9:483d03b3e1bc 213 {
ejh23 9:483d03b3e1bc 214 printf("East Time is %.1f \n", TimeGone);
ejh23 9:483d03b3e1bc 215 G_PagePos = 2;
ejh23 9:483d03b3e1bc 216 G_SpeciesSelect = 2;
ejh23 9:483d03b3e1bc 217 PageTwo();
ejh23 9:483d03b3e1bc 218 MLayer1Time.reset();
ejh23 9:483d03b3e1bc 219 wait(0.2);
ejh23 9:483d03b3e1bc 220 }
ejh23 10:62da82b9b6de 221 else if(d==5)
ejh23 9:483d03b3e1bc 222 {
ejh23 9:483d03b3e1bc 223 printf("South Time is %.1f \n", TimeGone);
ejh23 9:483d03b3e1bc 224 G_PagePos = 3;
ejh23 9:483d03b3e1bc 225 G_SpeciesSelect = 3;
ejh23 9:483d03b3e1bc 226 PageTwo();
ejh23 9:483d03b3e1bc 227 MLayer1Time.reset();
ejh23 9:483d03b3e1bc 228 wait(0.05);
ejh23 9:483d03b3e1bc 229 }
ejh23 10:62da82b9b6de 230 else if(d==7)
ejh23 9:483d03b3e1bc 231 {
ejh23 9:483d03b3e1bc 232 printf("West Time is %.1f \n", TimeGone);
ejh23 9:483d03b3e1bc 233 G_PagePos = 4;
ejh23 9:483d03b3e1bc 234 G_SpeciesSelect = 4;
ejh23 9:483d03b3e1bc 235 PageTwo();
ejh23 9:483d03b3e1bc 236 MLayer1Time.reset();
ejh23 9:483d03b3e1bc 237 wait(0.05);
ejh23 9:483d03b3e1bc 238 }
ejh23 10:62da82b9b6de 239 else if(TimeGone >=2) //removes arrow from last previous joystick input after 2 seconds
ejh23 9:483d03b3e1bc 240 {
ejh23 9:483d03b3e1bc 241 PG2_0();
ejh23 9:483d03b3e1bc 242 }
ejh23 10:62da82b9b6de 243 if(G_BPressed==1) //B button is used to reverse through menus
ejh23 9:483d03b3e1bc 244 {
ejh23 9:483d03b3e1bc 245 if(G_PageNum==1)
ejh23 9:483d03b3e1bc 246 {
ejh23 9:483d03b3e1bc 247 printf("Go to CloseMenu");
ejh23 9:483d03b3e1bc 248 CloseMenu();
ejh23 9:483d03b3e1bc 249 }
ejh23 9:483d03b3e1bc 250 else if(G_PageNum==2)
ejh23 9:483d03b3e1bc 251 {
ejh23 9:483d03b3e1bc 252 printf("Go to PageOne");
ejh23 9:483d03b3e1bc 253 PageOne();
ejh23 9:483d03b3e1bc 254 }
ejh23 9:483d03b3e1bc 255 }
ejh23 9:483d03b3e1bc 256 }
ejh23 9:483d03b3e1bc 257 }
ejh23 10:62da82b9b6de 258 else if(G_PageNum==2)
ejh23 9:483d03b3e1bc 259 {
ejh23 9:483d03b3e1bc 260 OpenLayer2(); //if MLayer2Flag == 1 should return to OpenLayer2
ejh23 9:483d03b3e1bc 261 }
ejh23 9:483d03b3e1bc 262 else if(G_PageNum==0)
ejh23 9:483d03b3e1bc 263 {
ejh23 9:483d03b3e1bc 264 printf("Menue Closed");
ejh23 9:483d03b3e1bc 265 }
ejh23 9:483d03b3e1bc 266 }
ejh23 10:62da82b9b6de 267 /*******************************************************************************
ejh23 10:62da82b9b6de 268 Page One used as a welcome screen to user
ejh23 10:62da82b9b6de 269 Plays welcome sounds when screen turns on and displays information about device
ejh23 10:62da82b9b6de 270 ******************************************************************************/
ejh23 9:483d03b3e1bc 271 void PageOne()
ejh23 9:483d03b3e1bc 272 {
ejh23 9:483d03b3e1bc 273 float PotValue = Pot.read();
ejh23 9:483d03b3e1bc 274 lcd.setBrightness(PotValue);
ejh23 9:483d03b3e1bc 275 printf("Start Page");
ejh23 9:483d03b3e1bc 276 lcd.clear();
ejh23 9:483d03b3e1bc 277 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 278 lcd.printString(" Veterinary ",0,1);
ejh23 9:483d03b3e1bc 279 lcd.printString("Thermometer",0,2);
ejh23 9:483d03b3e1bc 280 lcd.printString(" ",0,3);
ejh23 9:483d03b3e1bc 281 lcd.printString("EJH - Feb '22",0,4);
ejh23 10:62da82b9b6de 282 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 283 lcd.refresh();
ejh23 10:62da82b9b6de 284 Buzz.period(1.0/523.0);
ejh23 10:62da82b9b6de 285 Buzz = 0.15;
ejh23 10:62da82b9b6de 286 wait(0.1);
ejh23 10:62da82b9b6de 287 Buzz.period(1.0/659.0);
ejh23 10:62da82b9b6de 288 Buzz = 0.5;
ejh23 10:62da82b9b6de 289 wait(0.1);
ejh23 10:62da82b9b6de 290 Buzz.period(1.0/784.0);
ejh23 10:62da82b9b6de 291 Buzz = 0.5;
ejh23 10:62da82b9b6de 292 wait(0.1);
ejh23 10:62da82b9b6de 293 Buzz = 0;
ejh23 9:483d03b3e1bc 294 G_PageNum = 1;
ejh23 9:483d03b3e1bc 295 return;
ejh23 9:483d03b3e1bc 296 }
ejh23 9:483d03b3e1bc 297
ejh23 10:62da82b9b6de 298 void PageTwo() //Direct to different menu statements based on user selection
ejh23 9:483d03b3e1bc 299 {
ejh23 9:483d03b3e1bc 300 G_PageNum = 2;
ejh23 9:483d03b3e1bc 301 if(G_PagePos==1)
ejh23 9:483d03b3e1bc 302 {
ejh23 9:483d03b3e1bc 303 PG2_1();
ejh23 9:483d03b3e1bc 304 }
ejh23 9:483d03b3e1bc 305 else if(G_PagePos==2)
ejh23 9:483d03b3e1bc 306 {
ejh23 9:483d03b3e1bc 307 PG2_2();
ejh23 9:483d03b3e1bc 308 }
ejh23 9:483d03b3e1bc 309 else if(G_PagePos==3)
ejh23 9:483d03b3e1bc 310 {
ejh23 9:483d03b3e1bc 311 PG2_3();
ejh23 9:483d03b3e1bc 312 }
ejh23 9:483d03b3e1bc 313 else if(G_PagePos==4)
ejh23 9:483d03b3e1bc 314 {
ejh23 9:483d03b3e1bc 315 PG2_4();
ejh23 9:483d03b3e1bc 316 }
ejh23 9:483d03b3e1bc 317 return;
ejh23 9:483d03b3e1bc 318 }
ejh23 9:483d03b3e1bc 319 void PG2_0()
ejh23 9:483d03b3e1bc 320 {
ejh23 9:483d03b3e1bc 321 lcd.clear();
ejh23 9:483d03b3e1bc 322 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 323 lcd.printString(" Dog",0,1);
ejh23 9:483d03b3e1bc 324 lcd.printString(" Horse",0,2);
ejh23 9:483d03b3e1bc 325 lcd.printString(" Rabbit",0,3);
ejh23 9:483d03b3e1bc 326 lcd.printString(" Snake",0,4);
ejh23 9:483d03b3e1bc 327 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 328 wait(0.05);
ejh23 9:483d03b3e1bc 329 lcd.refresh();
ejh23 9:483d03b3e1bc 330 return;
ejh23 9:483d03b3e1bc 331 }
ejh23 9:483d03b3e1bc 332 void PG2_1()
ejh23 9:483d03b3e1bc 333 {
ejh23 9:483d03b3e1bc 334 lcd.clear();
ejh23 9:483d03b3e1bc 335 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 336 lcd.printString("-> Dog",0,1);
ejh23 9:483d03b3e1bc 337 lcd.printString(" Horse",0,2);
ejh23 9:483d03b3e1bc 338 lcd.printString(" Rabbit",0,3);
ejh23 9:483d03b3e1bc 339 lcd.printString(" Snake",0,4);
ejh23 9:483d03b3e1bc 340 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 341 wait(0.05);
ejh23 9:483d03b3e1bc 342 lcd.refresh();
ejh23 9:483d03b3e1bc 343 if (G_APressed==1)
ejh23 9:483d03b3e1bc 344 {
ejh23 9:483d03b3e1bc 345 G_PageNum=2;
ejh23 9:483d03b3e1bc 346 G_MLayerFlag=2;
ejh23 10:62da82b9b6de 347 Buzz.period(1.0/784.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 348 Buzz = 0.5;
ejh23 10:62da82b9b6de 349 wait(0.1);
ejh23 10:62da82b9b6de 350 Buzz = 0;
ejh23 9:483d03b3e1bc 351 OpenLayer2();
ejh23 9:483d03b3e1bc 352 }
ejh23 9:483d03b3e1bc 353 else
ejh23 9:483d03b3e1bc 354 {
ejh23 9:483d03b3e1bc 355 return;
ejh23 9:483d03b3e1bc 356 }
ejh23 9:483d03b3e1bc 357 }
ejh23 9:483d03b3e1bc 358 void PG2_2()
ejh23 9:483d03b3e1bc 359 {
ejh23 9:483d03b3e1bc 360 lcd.clear();
ejh23 9:483d03b3e1bc 361 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 362 lcd.printString(" Dog",0,1);
ejh23 9:483d03b3e1bc 363 lcd.printString("-> Horse",0,2);
ejh23 9:483d03b3e1bc 364 lcd.printString(" Rabbit",0,3);
ejh23 9:483d03b3e1bc 365 lcd.printString(" Snake",0,4);
ejh23 9:483d03b3e1bc 366 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 367 wait(0.05);
ejh23 9:483d03b3e1bc 368 lcd.refresh();
ejh23 9:483d03b3e1bc 369 if (G_APressed==1)
ejh23 9:483d03b3e1bc 370 {
ejh23 9:483d03b3e1bc 371 G_PageNum=2;
ejh23 9:483d03b3e1bc 372 G_MLayerFlag=2;
ejh23 10:62da82b9b6de 373 Buzz.period(1.0/784.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 374 Buzz = 0.5;
ejh23 10:62da82b9b6de 375 wait(0.1);
ejh23 10:62da82b9b6de 376 Buzz = 0;
ejh23 9:483d03b3e1bc 377 OpenLayer2();
ejh23 9:483d03b3e1bc 378 }
ejh23 9:483d03b3e1bc 379 else
ejh23 9:483d03b3e1bc 380 {
ejh23 9:483d03b3e1bc 381 return;
ejh23 9:483d03b3e1bc 382 }
ejh23 9:483d03b3e1bc 383 }
ejh23 9:483d03b3e1bc 384 void PG2_3()
ejh23 9:483d03b3e1bc 385 {
ejh23 9:483d03b3e1bc 386 lcd.clear();
ejh23 9:483d03b3e1bc 387 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 388 lcd.printString(" Dog",0,1);
ejh23 9:483d03b3e1bc 389 lcd.printString(" Horse",0,2);
ejh23 9:483d03b3e1bc 390 lcd.printString("-> Rabbit",0,3);
ejh23 9:483d03b3e1bc 391 lcd.printString(" Snake",0,4);
ejh23 9:483d03b3e1bc 392 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 393 wait(0.05);
ejh23 9:483d03b3e1bc 394 lcd.refresh();
ejh23 9:483d03b3e1bc 395 if (G_APressed==1)
ejh23 9:483d03b3e1bc 396 {
ejh23 9:483d03b3e1bc 397 G_PageNum=2;
ejh23 9:483d03b3e1bc 398 G_MLayerFlag=2;
ejh23 10:62da82b9b6de 399 Buzz.period(1.0/784.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 400 Buzz = 0.5;
ejh23 10:62da82b9b6de 401 wait(0.1);
ejh23 10:62da82b9b6de 402 Buzz = 0;
ejh23 9:483d03b3e1bc 403 OpenLayer2();
ejh23 9:483d03b3e1bc 404 }
ejh23 9:483d03b3e1bc 405 else
ejh23 9:483d03b3e1bc 406 {
ejh23 9:483d03b3e1bc 407 return;
ejh23 9:483d03b3e1bc 408 }
ejh23 9:483d03b3e1bc 409 }
ejh23 9:483d03b3e1bc 410 void PG2_4()
ejh23 9:483d03b3e1bc 411 {
ejh23 9:483d03b3e1bc 412 lcd.clear();
ejh23 9:483d03b3e1bc 413 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 414 lcd.printString(" Dog",0,1);
ejh23 9:483d03b3e1bc 415 lcd.printString(" Horse",0,2);
ejh23 9:483d03b3e1bc 416 lcd.printString(" Rabbit",0,3);
ejh23 9:483d03b3e1bc 417 lcd.printString("-> Snake",0,4);
ejh23 9:483d03b3e1bc 418 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 419 wait(0.05);
ejh23 9:483d03b3e1bc 420 lcd.refresh();
ejh23 9:483d03b3e1bc 421 if (G_APressed==1)
ejh23 9:483d03b3e1bc 422 {
ejh23 9:483d03b3e1bc 423 G_PageNum=2;
ejh23 9:483d03b3e1bc 424 G_MLayerFlag=2;
ejh23 10:62da82b9b6de 425 Buzz.period(1.0/784.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 426 Buzz = 0.5;
ejh23 10:62da82b9b6de 427 wait(0.1);
ejh23 10:62da82b9b6de 428 Buzz = 0;
ejh23 9:483d03b3e1bc 429 OpenLayer2();
ejh23 9:483d03b3e1bc 430 }
ejh23 9:483d03b3e1bc 431 else
ejh23 9:483d03b3e1bc 432 {
ejh23 9:483d03b3e1bc 433 return;
ejh23 9:483d03b3e1bc 434 }
ejh23 9:483d03b3e1bc 435 }
ejh23 10:62da82b9b6de 436 /*******************************************************************************
ejh23 10:62da82b9b6de 437 Reading values fromthe joystick - direction converted to integer in joystick cpp file
ejh23 10:62da82b9b6de 438 1 corresponds to North in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 439 3 corresponds to East in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 440 5 correspsonds to South in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 441 7 corresponds to West in the Enumerator (from joystick header)
ejh23 10:62da82b9b6de 442 *******************************************************************************/
ejh23 9:483d03b3e1bc 443 void OpenLayer2()
ejh23 9:483d03b3e1bc 444 {
ejh23 9:483d03b3e1bc 445 wait(1.0);
ejh23 9:483d03b3e1bc 446 MLayer2Time.start(); //MLayer2Time timer started in case this is first time
ejh23 9:483d03b3e1bc 447 MLayer2Time.reset(); // running and reset incase this is not first time running
ejh23 9:483d03b3e1bc 448
ejh23 9:483d03b3e1bc 449 if(G_PageNum==2)
ejh23 9:483d03b3e1bc 450 {
ejh23 9:483d03b3e1bc 451 while(G_MLayerFlag==2)
ejh23 9:483d03b3e1bc 452 {
ejh23 9:483d03b3e1bc 453 //printf("G_MLayerFlag is True \n");
ejh23 9:483d03b3e1bc 454 Direction d = joystick.get_direction(); //Upon each cycle of while, check joystick direction and buttons statuses
ejh23 9:483d03b3e1bc 455 printf("Direction %i \n", d);
ejh23 9:483d03b3e1bc 456 bool G_APressed = AButton.read();
ejh23 9:483d03b3e1bc 457 bool G_BPressed = BButton.read();
ejh23 9:483d03b3e1bc 458 //printf("A Button Status : %d \n", G_APressed);
ejh23 9:483d03b3e1bc 459 wait(0.05);
ejh23 9:483d03b3e1bc 460 float TimeGone2 = MLayer2Time.read();
ejh23 9:483d03b3e1bc 461
ejh23 10:62da82b9b6de 462 if(TimeGone2 >= 10) //Set value for timer comparitor called TimeGone2 (Seconds)
ejh23 9:483d03b3e1bc 463 {
ejh23 9:483d03b3e1bc 464 OpenLayer1();
ejh23 9:483d03b3e1bc 465 }
ejh23 10:62da82b9b6de 466 else if(d==1)
ejh23 9:483d03b3e1bc 467 {
ejh23 9:483d03b3e1bc 468 printf("North Time is %.1f \n", TimeGone2);
ejh23 9:483d03b3e1bc 469 G_PagePos = 5;
ejh23 9:483d03b3e1bc 470 PageThree();
ejh23 9:483d03b3e1bc 471 MLayer2Time.reset();
ejh23 9:483d03b3e1bc 472 wait(0.05);
ejh23 9:483d03b3e1bc 473 }
ejh23 10:62da82b9b6de 474 else if(d==3)
ejh23 9:483d03b3e1bc 475 {
ejh23 9:483d03b3e1bc 476 printf("East Time is %.1f \n", TimeGone2);
ejh23 9:483d03b3e1bc 477 G_PagePos = 6;
ejh23 9:483d03b3e1bc 478 PageThree();
ejh23 9:483d03b3e1bc 479 MLayer2Time.reset();
ejh23 9:483d03b3e1bc 480 wait(0.05);
ejh23 9:483d03b3e1bc 481 }
ejh23 10:62da82b9b6de 482 else if(d==5)
ejh23 9:483d03b3e1bc 483 {
ejh23 9:483d03b3e1bc 484 printf("South Time is %.1f \n", TimeGone2);
ejh23 9:483d03b3e1bc 485 G_PagePos = 7;
ejh23 9:483d03b3e1bc 486 PageThree();
ejh23 9:483d03b3e1bc 487 MLayer2Time.reset();
ejh23 9:483d03b3e1bc 488 wait(0.05);
ejh23 9:483d03b3e1bc 489 }
ejh23 10:62da82b9b6de 490 else if(d==7)
ejh23 9:483d03b3e1bc 491 {
ejh23 9:483d03b3e1bc 492 printf("West Time is %.1f \n", TimeGone2);
ejh23 9:483d03b3e1bc 493 G_PagePos = 8;
ejh23 9:483d03b3e1bc 494 PageThree();
ejh23 9:483d03b3e1bc 495 MLayer2Time.reset();
ejh23 9:483d03b3e1bc 496 wait(0.05);
ejh23 9:483d03b3e1bc 497 }
ejh23 9:483d03b3e1bc 498 else if(TimeGone2 >=2)
ejh23 9:483d03b3e1bc 499 {
ejh23 9:483d03b3e1bc 500 PG3_0();
ejh23 9:483d03b3e1bc 501 }
ejh23 10:62da82b9b6de 502 else if(G_BPressed==1) //Direct to previous menu
ejh23 9:483d03b3e1bc 503 {
ejh23 9:483d03b3e1bc 504 G_PageNum=1;
ejh23 9:483d03b3e1bc 505 OpenLayer1();
ejh23 9:483d03b3e1bc 506 }
ejh23 9:483d03b3e1bc 507 }
ejh23 9:483d03b3e1bc 508 if (G_MLayerFlag==3)
ejh23 9:483d03b3e1bc 509 {
ejh23 9:483d03b3e1bc 510 TakeRdng();
ejh23 9:483d03b3e1bc 511 }
ejh23 9:483d03b3e1bc 512 }
ejh23 9:483d03b3e1bc 513 else if(G_PageNum==1)
ejh23 9:483d03b3e1bc 514 {
ejh23 9:483d03b3e1bc 515 OpenLayer1(); //if MLayer2Flag == 1 should return to OpenLayer2
ejh23 9:483d03b3e1bc 516 }
ejh23 9:483d03b3e1bc 517 }
ejh23 9:483d03b3e1bc 518 //******************************************************************************
ejh23 9:483d03b3e1bc 519
ejh23 9:483d03b3e1bc 520 void PageThree()
ejh23 9:483d03b3e1bc 521 {
ejh23 9:483d03b3e1bc 522 //G_PageNum = 3;
ejh23 9:483d03b3e1bc 523 if(G_PagePos==5)
ejh23 9:483d03b3e1bc 524 {
ejh23 9:483d03b3e1bc 525 PG3_1();
ejh23 9:483d03b3e1bc 526 }
ejh23 9:483d03b3e1bc 527 else if(G_PagePos==6)
ejh23 9:483d03b3e1bc 528 {
ejh23 9:483d03b3e1bc 529 PG3_2();
ejh23 9:483d03b3e1bc 530 }
ejh23 9:483d03b3e1bc 531 else if(G_PagePos==7)
ejh23 9:483d03b3e1bc 532 {
ejh23 9:483d03b3e1bc 533 PG3_3();
ejh23 9:483d03b3e1bc 534 }
ejh23 9:483d03b3e1bc 535 else if(G_PagePos==8)
ejh23 9:483d03b3e1bc 536 {
ejh23 9:483d03b3e1bc 537 PG3_4();
ejh23 9:483d03b3e1bc 538 }
ejh23 9:483d03b3e1bc 539 return;
ejh23 9:483d03b3e1bc 540 }
ejh23 9:483d03b3e1bc 541 void PG3_0()
ejh23 9:483d03b3e1bc 542 {
ejh23 9:483d03b3e1bc 543 lcd.clear();
ejh23 9:483d03b3e1bc 544 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 545 lcd.printString(" 1 Reading",0,1);
ejh23 9:483d03b3e1bc 546 lcd.printString(" 5 Readings",0,2);
ejh23 9:483d03b3e1bc 547 lcd.printString(" 20 Readings",0,3);
ejh23 9:483d03b3e1bc 548 lcd.printString(" 100 Readings",0,4);
ejh23 9:483d03b3e1bc 549 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 550 wait(0.05);
ejh23 9:483d03b3e1bc 551 lcd.refresh();
ejh23 9:483d03b3e1bc 552 return;
ejh23 9:483d03b3e1bc 553 }
ejh23 9:483d03b3e1bc 554 void PG3_1()
ejh23 9:483d03b3e1bc 555 {
ejh23 9:483d03b3e1bc 556 lcd.clear();
ejh23 9:483d03b3e1bc 557 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 558 lcd.printString("->1 Reading",0,1);
ejh23 9:483d03b3e1bc 559 lcd.printString(" 5 Readings",0,2);
ejh23 9:483d03b3e1bc 560 lcd.printString(" 20 Readings",0,3);
ejh23 9:483d03b3e1bc 561 lcd.printString(" 100 Readings",0,4);
ejh23 9:483d03b3e1bc 562 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 563 wait(0.05);
ejh23 9:483d03b3e1bc 564 lcd.refresh();
ejh23 9:483d03b3e1bc 565 bool G_APressed = AButton.read();
ejh23 9:483d03b3e1bc 566 if (G_APressed==1)
ejh23 9:483d03b3e1bc 567 {
ejh23 9:483d03b3e1bc 568 G_RepeatNum = 1;
ejh23 9:483d03b3e1bc 569 G_MLayerFlag=3;
ejh23 10:62da82b9b6de 570 Buzz.period(1.0/587.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 571 Buzz = 0.5;
ejh23 10:62da82b9b6de 572 wait(0.1);
ejh23 10:62da82b9b6de 573 Buzz = 0;
ejh23 9:483d03b3e1bc 574 //TakeRdng();
ejh23 9:483d03b3e1bc 575 }
ejh23 9:483d03b3e1bc 576 else
ejh23 9:483d03b3e1bc 577 {
ejh23 9:483d03b3e1bc 578 return;
ejh23 9:483d03b3e1bc 579 }
ejh23 9:483d03b3e1bc 580 }
ejh23 9:483d03b3e1bc 581 void PG3_2()
ejh23 9:483d03b3e1bc 582 {
ejh23 9:483d03b3e1bc 583 lcd.clear();
ejh23 9:483d03b3e1bc 584 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 585 lcd.printString(" 1 Reading",0,1);
ejh23 9:483d03b3e1bc 586 lcd.printString("->5 Readings",0,2);
ejh23 9:483d03b3e1bc 587 lcd.printString(" 20 Readings",0,3);
ejh23 9:483d03b3e1bc 588 lcd.printString(" 100 Readings",0,4);
ejh23 9:483d03b3e1bc 589 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 590 wait(0.05);
ejh23 9:483d03b3e1bc 591 lcd.refresh();
ejh23 9:483d03b3e1bc 592 bool G_APressed = AButton.read();
ejh23 9:483d03b3e1bc 593 if (G_APressed==1)
ejh23 9:483d03b3e1bc 594 {
ejh23 9:483d03b3e1bc 595 G_RepeatNum = 5;
ejh23 9:483d03b3e1bc 596 G_MLayerFlag=3;
ejh23 10:62da82b9b6de 597 Buzz.period(1.0/587.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 598 Buzz = 0.5;
ejh23 10:62da82b9b6de 599 wait(0.1);
ejh23 10:62da82b9b6de 600 Buzz = 0;
ejh23 9:483d03b3e1bc 601 //TakeRdng();
ejh23 9:483d03b3e1bc 602 }
ejh23 9:483d03b3e1bc 603 else
ejh23 9:483d03b3e1bc 604 {
ejh23 9:483d03b3e1bc 605 return;
ejh23 9:483d03b3e1bc 606 }
ejh23 9:483d03b3e1bc 607 }
ejh23 9:483d03b3e1bc 608 void PG3_3()
ejh23 9:483d03b3e1bc 609 {
ejh23 9:483d03b3e1bc 610 lcd.clear();
ejh23 9:483d03b3e1bc 611 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 612 lcd.printString(" 1 Reading",0,1);
ejh23 9:483d03b3e1bc 613 lcd.printString(" 5 Readings",0,2);
ejh23 9:483d03b3e1bc 614 lcd.printString("->20 Readings",0,3);
ejh23 9:483d03b3e1bc 615 lcd.printString(" 100 Readings",0,4);
ejh23 9:483d03b3e1bc 616 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 617 wait(0.05);
ejh23 9:483d03b3e1bc 618 lcd.refresh();
ejh23 9:483d03b3e1bc 619 bool G_APressed = AButton.read();
ejh23 9:483d03b3e1bc 620 if (G_APressed==1)
ejh23 9:483d03b3e1bc 621 {
ejh23 9:483d03b3e1bc 622 G_RepeatNum = 20;
ejh23 9:483d03b3e1bc 623 G_MLayerFlag=3;
ejh23 10:62da82b9b6de 624 Buzz.period(1.0/587.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 625 Buzz = 0.5;
ejh23 10:62da82b9b6de 626 wait(0.1);
ejh23 10:62da82b9b6de 627 Buzz = 0;
ejh23 9:483d03b3e1bc 628 //TakeRdng();
ejh23 9:483d03b3e1bc 629 }
ejh23 9:483d03b3e1bc 630 else
ejh23 9:483d03b3e1bc 631 {
ejh23 9:483d03b3e1bc 632 return;
ejh23 9:483d03b3e1bc 633 }
ejh23 9:483d03b3e1bc 634 }
ejh23 9:483d03b3e1bc 635 void PG3_4()
ejh23 9:483d03b3e1bc 636 {
ejh23 9:483d03b3e1bc 637 lcd.clear();
ejh23 9:483d03b3e1bc 638 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 639 lcd.printString(" 1 Reading",0,1);
ejh23 9:483d03b3e1bc 640 lcd.printString(" 5 Readings",0,2);
ejh23 9:483d03b3e1bc 641 lcd.printString(" 20 Readings",0,3);
ejh23 9:483d03b3e1bc 642 lcd.printString("->100 Readings",0,4);
ejh23 9:483d03b3e1bc 643 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 644 wait(0.05);
ejh23 9:483d03b3e1bc 645 lcd.refresh();
ejh23 9:483d03b3e1bc 646 bool G_APressed = AButton.read();
ejh23 9:483d03b3e1bc 647 if (G_APressed==1)
ejh23 9:483d03b3e1bc 648 {
ejh23 9:483d03b3e1bc 649 G_RepeatNum = 100;
ejh23 9:483d03b3e1bc 650 G_MLayerFlag=3;
ejh23 10:62da82b9b6de 651 Buzz.period(1.0/587.0); //Affirmation sound on user input
ejh23 10:62da82b9b6de 652 Buzz = 0.5;
ejh23 10:62da82b9b6de 653 wait(0.1);
ejh23 10:62da82b9b6de 654 Buzz = 0;
ejh23 9:483d03b3e1bc 655 //TakeRdng();
ejh23 9:483d03b3e1bc 656 }
ejh23 9:483d03b3e1bc 657 else
ejh23 9:483d03b3e1bc 658 {
ejh23 9:483d03b3e1bc 659 return;
ejh23 9:483d03b3e1bc 660 }
ejh23 9:483d03b3e1bc 661 }
ejh23 10:62da82b9b6de 662
ejh23 10:62da82b9b6de 663 /*******************************************************************************
ejh23 10:62da82b9b6de 664 Close screen as a result of inactivity or user input exiting menus
ejh23 10:62da82b9b6de 665 Play close down tones for user affirmation
ejh23 10:62da82b9b6de 666 *******************************************************************************/
ejh23 9:483d03b3e1bc 667 void CloseMenu()
ejh23 9:483d03b3e1bc 668 {
ejh23 9:483d03b3e1bc 669 lcd.setBrightness(0.00);
ejh23 9:483d03b3e1bc 670 G_PageNum = 0;
ejh23 9:483d03b3e1bc 671 G_MLayerFlag = 0;
ejh23 9:483d03b3e1bc 672 lcd.clear();
ejh23 9:483d03b3e1bc 673 lcd.refresh();
ejh23 10:62da82b9b6de 674 Buzz.period(1.0/784.0);
ejh23 10:62da82b9b6de 675 Buzz = 0.5;
ejh23 10:62da82b9b6de 676 wait(0.1);
ejh23 10:62da82b9b6de 677 Buzz.period(1.0/659.0);
ejh23 10:62da82b9b6de 678 Buzz = 0.5;
ejh23 10:62da82b9b6de 679 wait(0.1);
ejh23 10:62da82b9b6de 680 Buzz.period(1.0/523.0);
ejh23 10:62da82b9b6de 681 Buzz = 0.5;
ejh23 10:62da82b9b6de 682 wait(0.1);
ejh23 10:62da82b9b6de 683 Buzz = 0;
ejh23 9:483d03b3e1bc 684 printf("Menu Closed and Flag Reset \n");
ejh23 9:483d03b3e1bc 685 }
ejh23 9:483d03b3e1bc 686
ejh23 9:483d03b3e1bc 687
ejh23 9:483d03b3e1bc 688 void TakeRdng()
ejh23 9:483d03b3e1bc 689 {
ejh23 9:483d03b3e1bc 690 float TempSum = 0;
ejh23 9:483d03b3e1bc 691 G_TempR = tmp102.get_temperature(); // read temperature save to variable TempR
ejh23 9:483d03b3e1bc 692 for(int i=0; i<G_RepeatNum; i++) { //change G_RepeatNum set by user in menu
ejh23 9:483d03b3e1bc 693 printf("Temp was %.2f \n", G_TempR);
ejh23 9:483d03b3e1bc 694 TempSum = TempSum + G_TempR;
ejh23 9:483d03b3e1bc 695 printf("TempSum = %.2f \n",TempSum);
ejh23 10:62da82b9b6de 696 Buzz.period(1.0/523.0);
ejh23 10:62da82b9b6de 697 Buzz = 0.15;
ejh23 10:62da82b9b6de 698 wait(0.1);
ejh23 10:62da82b9b6de 699 Buzz.period(1.0/659.0);
ejh23 10:62da82b9b6de 700 Buzz = 0.5;
ejh23 10:62da82b9b6de 701 wait(0.1); //Time between tones utilisaed as break between readings
ejh23 10:62da82b9b6de 702 Buzz = 0;
ejh23 9:483d03b3e1bc 703 if(G_BPressed==1)
ejh23 9:483d03b3e1bc 704 {
ejh23 9:483d03b3e1bc 705 G_RepeatNum = 0;
ejh23 9:483d03b3e1bc 706 OpenLayer2();
ejh23 9:483d03b3e1bc 707 }
ejh23 9:483d03b3e1bc 708 }
ejh23 9:483d03b3e1bc 709 G_TempAve = TempSum / G_RepeatNum; //Average Temperature Calculation using the RepeatNum
ejh23 10:62da82b9b6de 710 HealthCheck(); // variable as number of elements in average
ejh23 9:483d03b3e1bc 711 }
ejh23 9:483d03b3e1bc 712 enum SpeciesPage
ejh23 10:62da82b9b6de 713 { //Enum used in case switching below defines states to switch between
ejh23 10:62da82b9b6de 714 SpeciesDog,
ejh23 10:62da82b9b6de 715 SpeciesHorse,
ejh23 10:62da82b9b6de 716 SpeciesRabbit,
ejh23 10:62da82b9b6de 717 SpeciesSnake,
ejh23 10:62da82b9b6de 718 SpeciesState,
ejh23 9:483d03b3e1bc 719 };
ejh23 9:483d03b3e1bc 720 void Display()
ejh23 9:483d03b3e1bc 721 {
ejh23 10:62da82b9b6de 722 printf("Display \n");
ejh23 9:483d03b3e1bc 723 int DisplayType = SpeciesState;
ejh23 9:483d03b3e1bc 724 int NextDisplayType = SpeciesState;
ejh23 10:62da82b9b6de 725 printf("SpeciesType %i", G_SpeciesSelect);
ejh23 9:483d03b3e1bc 726 switch(DisplayType)
ejh23 9:483d03b3e1bc 727 {
ejh23 10:62da82b9b6de 728 case SpeciesState: //uses global SpreciesSelect variable to determine range of healthy temperatures
ejh23 9:483d03b3e1bc 729 {
ejh23 9:483d03b3e1bc 730 if(G_SpeciesSelect == 1)
ejh23 9:483d03b3e1bc 731 {
ejh23 9:483d03b3e1bc 732 NextDisplayType = SpeciesDog;
ejh23 9:483d03b3e1bc 733 }
ejh23 9:483d03b3e1bc 734 else if(G_SpeciesSelect == 2)
ejh23 9:483d03b3e1bc 735 {
ejh23 9:483d03b3e1bc 736 NextDisplayType = SpeciesHorse;
ejh23 9:483d03b3e1bc 737 }
ejh23 9:483d03b3e1bc 738 else if(G_SpeciesSelect == 3)
ejh23 9:483d03b3e1bc 739 {
ejh23 9:483d03b3e1bc 740 NextDisplayType = SpeciesRabbit;
ejh23 9:483d03b3e1bc 741 }
ejh23 9:483d03b3e1bc 742 else if(G_SpeciesSelect == 4)
ejh23 9:483d03b3e1bc 743 {
ejh23 9:483d03b3e1bc 744 NextDisplayType = SpeciesSnake;
ejh23 9:483d03b3e1bc 745 }
ejh23 9:483d03b3e1bc 746 }
ejh23 9:483d03b3e1bc 747 case SpeciesDog:
ejh23 9:483d03b3e1bc 748 {
ejh23 10:62da82b9b6de 749 lcd.clear(); //Display relevant information for species previously selected by user
ejh23 9:483d03b3e1bc 750 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 751 lcd.printString("Dog Health",0,1);
ejh23 9:483d03b3e1bc 752 char buffer[14];
ejh23 9:483d03b3e1bc 753 int length = sprintf(buffer,"T=%.3f 'C", G_TempAve);
ejh23 10:62da82b9b6de 754 if (length <= 14) //check string fits on screen (14 lots of 6 wide characters)
ejh23 9:483d03b3e1bc 755 lcd.printString(buffer,0,2);
ejh23 9:483d03b3e1bc 756 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 757 lcd.refresh();
ejh23 10:62da82b9b6de 758 /*if (G_TempAve >= Dog.LTemp and G_TempAve <= Dog.UTemp)
ejh23 9:483d03b3e1bc 759 {
ejh23 9:483d03b3e1bc 760 lcd.printString("Temperature OK",0,3);
ejh23 10:62da82b9b6de 761 }*/
ejh23 9:483d03b3e1bc 762 }
ejh23 9:483d03b3e1bc 763 case SpeciesHorse:
ejh23 10:62da82b9b6de 764 { //Display relevant information for species previously selected by user
ejh23 9:483d03b3e1bc 765 lcd.clear();
ejh23 9:483d03b3e1bc 766 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 767 lcd.printString("Horse Health",0,1);
ejh23 9:483d03b3e1bc 768 char buffer[14];
ejh23 9:483d03b3e1bc 769 int length = sprintf(buffer,"T=%.3f 'C", G_TempAve);
ejh23 10:62da82b9b6de 770 if (length <= 14) //check string fits on screen (14 lots of 6 wide characters)
ejh23 9:483d03b3e1bc 771 lcd.printString(buffer,0,2);
ejh23 9:483d03b3e1bc 772 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 773 lcd.refresh();
ejh23 10:62da82b9b6de 774 /*if (G_TempAve >= Horse.LTemp and G_TempAve <= Horse.UTemp)
ejh23 9:483d03b3e1bc 775 {
ejh23 9:483d03b3e1bc 776 lcd.printString("Temperature OK",0,3);
ejh23 10:62da82b9b6de 777 }*/
ejh23 9:483d03b3e1bc 778 }
ejh23 9:483d03b3e1bc 779 case SpeciesRabbit:
ejh23 10:62da82b9b6de 780 { //Display relevant information for species previously selected by user
ejh23 9:483d03b3e1bc 781 lcd.clear();
ejh23 9:483d03b3e1bc 782 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 783 lcd.printString("Rabbit Health",0,1);
ejh23 9:483d03b3e1bc 784 char buffer[14];
ejh23 9:483d03b3e1bc 785 int length = sprintf(buffer,"T=%.3f 'C", G_TempAve);
ejh23 10:62da82b9b6de 786 if (length <= 14) //check string fits on screen (14 lots of 6 wide characters)
ejh23 9:483d03b3e1bc 787 lcd.printString(buffer,0,2);
ejh23 9:483d03b3e1bc 788 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 789 lcd.refresh();
ejh23 10:62da82b9b6de 790 /*if (G_TempAve >= Rabbit.LTemp and G_TempAve <= Rabbit.UTemp)
ejh23 9:483d03b3e1bc 791 {
ejh23 9:483d03b3e1bc 792 lcd.printString("Temperature OK",0,3);
ejh23 10:62da82b9b6de 793 }*/
ejh23 9:483d03b3e1bc 794 }
ejh23 9:483d03b3e1bc 795 case SpeciesSnake:
ejh23 10:62da82b9b6de 796 { //Display relevant information for species previously selected by user
ejh23 9:483d03b3e1bc 797 lcd.clear();
ejh23 9:483d03b3e1bc 798 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 799 lcd.printString("Snake Health",0,1);
ejh23 9:483d03b3e1bc 800 char buffer[14];
ejh23 9:483d03b3e1bc 801 int length = sprintf(buffer,"T=%.3f 'C", G_TempAve);
ejh23 10:62da82b9b6de 802 if (length <= 14) //check string fits on screen (14 lots of 6 wide characters)
ejh23 9:483d03b3e1bc 803 lcd.printString(buffer,0,2);
ejh23 9:483d03b3e1bc 804 lcd.drawLine(1,47,84,47,1);
ejh23 9:483d03b3e1bc 805 lcd.refresh();
ejh23 10:62da82b9b6de 806 /*if (G_TempAve >= Snake.LTemp and G_TempAve <= Snake.UTemp)
ejh23 9:483d03b3e1bc 807 {
ejh23 9:483d03b3e1bc 808 lcd.printString("Temperature OK",0,3);
ejh23 10:62da82b9b6de 809 }*/
ejh23 9:483d03b3e1bc 810 }
ejh23 9:483d03b3e1bc 811 }
ejh23 9:483d03b3e1bc 812 /*printf("Average Reading = %.2f \n",G_TempAve);
ejh23 9:483d03b3e1bc 813 lcd.clear();
ejh23 9:483d03b3e1bc 814 char buffer[14];
ejh23 9:483d03b3e1bc 815 int length = sprintf(buffer,"T=%.3f 'C", G_TempAve);
ejh23 9:483d03b3e1bc 816 if (length <= 14) //check string fits on screen (14 lots of 6 wide characters)
ejh23 9:483d03b3e1bc 817 lcd.printString(buffer,0,1);
ejh23 9:483d03b3e1bc 818 lcd.refresh(); */
ejh23 9:483d03b3e1bc 819 }
ejh23 10:62da82b9b6de 820
ejh23 10:62da82b9b6de 821 /*******************************************************************************
ejh23 10:62da82b9b6de 822 waits for user inactivity then promts the user to keep device on else device
ejh23 10:62da82b9b6de 823 will shut down
ejh23 10:62da82b9b6de 824 *******************************************************************************/
ejh23 9:483d03b3e1bc 825 void RemPrompt()
ejh23 9:483d03b3e1bc 826 {
ejh23 10:62da82b9b6de 827 printf("RP ");
ejh23 9:483d03b3e1bc 828 lcd.clear();
ejh23 9:483d03b3e1bc 829 lcd.drawLine(1,1,84,1,1);
ejh23 9:483d03b3e1bc 830 lcd.printString("Device may",0,1);
ejh23 9:483d03b3e1bc 831 lcd.printString("sleep soon!",0,2);
ejh23 9:483d03b3e1bc 832 lcd.printString("A to keep Temp",0,3);
ejh23 10:62da82b9b6de 833 lcd.printString("B to main menu",0,4);
ejh23 9:483d03b3e1bc 834 lcd.drawLine(1,47,84,47,1);
ejh23 10:62da82b9b6de 835 lcd.refresh();
ejh23 10:62da82b9b6de 836 PromptTime.start();
ejh23 10:62da82b9b6de 837 while (PromptTime<=10)
ejh23 10:62da82b9b6de 838 {
ejh23 10:62da82b9b6de 839 Display();
ejh23 10:62da82b9b6de 840 if (G_APressed==1)
ejh23 10:62da82b9b6de 841 {
ejh23 10:62da82b9b6de 842 ReviewTime.reset(); //Time out function is reset when the user interacts with device
ejh23 10:62da82b9b6de 843 HealthCheck();
ejh23 10:62da82b9b6de 844 }
ejh23 10:62da82b9b6de 845 else if(G_BPressed==1)
ejh23 10:62da82b9b6de 846 {
ejh23 10:62da82b9b6de 847 G_MLayerFlag =1;
ejh23 10:62da82b9b6de 848 G_PageNum =1;
ejh23 10:62da82b9b6de 849 OpenLayer1();
ejh23 10:62da82b9b6de 850 }
ejh23 10:62da82b9b6de 851 }
ejh23 10:62da82b9b6de 852 return;
ejh23 10:62da82b9b6de 853 } //Prompts user to allow screen to sleep
ejh23 9:483d03b3e1bc 854 void HealthCheck()
ejh23 9:483d03b3e1bc 855 {
ejh23 10:62da82b9b6de 856 printf("HealthCheck \n");
ejh23 9:483d03b3e1bc 857 ReviewTime.start(); //ReviewTime timer started in case this is first time
ejh23 9:483d03b3e1bc 858 Display();
ejh23 9:483d03b3e1bc 859 while(ReviewTime<=30)
ejh23 9:483d03b3e1bc 860 {
ejh23 10:62da82b9b6de 861 bool G_APressed = AButton.read();
ejh23 10:62da82b9b6de 862 bool G_BPressed = BButton.read();
ejh23 10:62da82b9b6de 863 if(ReviewTime>=10) //Added Time out function after 10 seconds
ejh23 9:483d03b3e1bc 864 {
ejh23 9:483d03b3e1bc 865 RemPrompt();
ejh23 9:483d03b3e1bc 866 }
ejh23 9:483d03b3e1bc 867 }
ejh23 9:483d03b3e1bc 868 CloseMenu();
ejh23 9:483d03b3e1bc 869 }
ejh23 9:483d03b3e1bc 870
ejh23 9:483d03b3e1bc 871 int main()
ejh23 9:483d03b3e1bc 872 {
ejh23 9:483d03b3e1bc 873 initDevice();
ejh23 9:483d03b3e1bc 874 FillAnimal(); //Initiate Hardware
ejh23 9:483d03b3e1bc 875 YButton.rise(&SetContrast); //Interrupts connected to voids
ejh23 9:483d03b3e1bc 876 StartButton.rise(&TakeRdng);
ejh23 9:483d03b3e1bc 877 MenuOnButton.rise(&OpenLayer1);
ejh23 9:483d03b3e1bc 878 MenuOffButton.rise(&CloseMenu); //Obselete
ejh23 9:483d03b3e1bc 879 }