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

Dependencies:   TMP102_02

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?

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