This code is written to run on the ARMmbed LPC1768 board. It is developed to configure the board which is connected to a TMP102 to constantly measure temperature, update the display evey minute and also plot these readings on a Nokia N5110 LCD

Dependencies:   N5110 mbed

Committer:
el16ooo
Date:
Wed Feb 01 22:22:10 2017 +0000
Revision:
1:f37cf0e5d0e8
Parent:
0:bfd4c95124c3
This code is written to run on the ARMmbed LPC1768 board. It is developed to configure the board which is connected to a TMP102 to constantly measure temperature, update the display evey minute and also plot these readings on a Nokia N5110 LCD.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el16ooo 0:bfd4c95124c3 1 //INTRODUCTION
el16ooo 0:bfd4c95124c3 2 /*------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 3 Author: Oluwole O. Oyetoke
el16ooo 0:bfd4c95124c3 4 Date: 25th November, 2016
el16ooo 0:bfd4c95124c3 5 SUMMARY: This code is written to run on the ARMmbed LPC1768 board.
el16ooo 0:bfd4c95124c3 6 It is developed to configure the board which is connected to a
el16ooo 0:bfd4c95124c3 7 TMP102 to constantly measure temperature, update the display
el16ooo 0:bfd4c95124c3 8 evey minute and also plot these values over time on the LCD
el16ooo 0:bfd4c95124c3 9 ------------------------------------------------------------------------------*/
el16ooo 0:bfd4c95124c3 10
el16ooo 0:bfd4c95124c3 11
el16ooo 0:bfd4c95124c3 12
el16ooo 0:bfd4c95124c3 13 //HEADER INCLUSION & DEFINITIONS
el16ooo 0:bfd4c95124c3 14 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 15 #include "mbed.h" //mbed header file inclusion
el16ooo 0:bfd4c95124c3 16 #include "N5110.h" //Nokia LCD Screen header file inclusion
el16ooo 0:bfd4c95124c3 17 #include <math.h>
el16ooo 0:bfd4c95124c3 18
el16ooo 0:bfd4c95124c3 19 //Define slave address for different conditions
el16ooo 0:bfd4c95124c3 20 //ADD0 of TMP102 is connected to ground... address will be Ob1001000 = 0x48
el16ooo 0:bfd4c95124c3 21 #define slaveAddress 0x48
el16ooo 0:bfd4c95124c3 22 #define slaveWriteAddress 0x90
el16ooo 0:bfd4c95124c3 23 #define slaveReadAddress 0x91
el16ooo 0:bfd4c95124c3 24
el16ooo 0:bfd4c95124c3 25
el16ooo 0:bfd4c95124c3 26 /*Define needed register addresses
el16ooo 0:bfd4c95124c3 27 --------------------------------------------------------------
el16ooo 0:bfd4c95124c3 28 | BIT FUNCTION | P7 | P6 | P5 | P4 | P3 | P2 | P1 | p0 | |
el16ooo 0:bfd4c95124c3 29 | BYTE 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | |
el16ooo 0:bfd4c95124c3 30 |------------------------------------------------------------|
el16ooo 0:bfd4c95124c3 31 P1 P0 REGISTER
el16ooo 0:bfd4c95124c3 32 0 0 TEMPERATURE REGISTER (Read Only)
el16ooo 0:bfd4c95124c3 33 0 1 CONFIGURATION REGISTER (Read/Write)
el16ooo 0:bfd4c95124c3 34 1 0 TLOW REGISTER (Read/Write)
el16ooo 0:bfd4c95124c3 35 1 1 THIGH REGISTER (Read/Write)
el16ooo 0:bfd4c95124c3 36 */
el16ooo 0:bfd4c95124c3 37 #define tempRegAddress 0x00 //0b00000000
el16ooo 0:bfd4c95124c3 38 #define configRegAddress 0x01; //0b00000001
el16ooo 0:bfd4c95124c3 39 #define tlowRegAddress 0x02; //0b00000010
el16ooo 0:bfd4c95124c3 40 #define thighRegAddress 0x03; //0b00000011
el16ooo 0:bfd4c95124c3 41 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 42
el16ooo 0:bfd4c95124c3 43
el16ooo 0:bfd4c95124c3 44 //PIN CONNECTION SET-UP
el16ooo 0:bfd4c95124c3 45 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 46 //Set pin connection to LCD
el16ooo 0:bfd4c95124c3 47 N5110 lcd(p7,p8,p9,p10,p11,p13,p21);
el16ooo 0:bfd4c95124c3 48
el16ooo 0:bfd4c95124c3 49 //Set pin connection for the TMP102
el16ooo 0:bfd4c95124c3 50 I2C tmp102(p28, p27); //p28-SDA, p27-SCL
el16ooo 0:bfd4c95124c3 51
el16ooo 0:bfd4c95124c3 52 //Set pins for error display leds
el16ooo 0:bfd4c95124c3 53 BusOut myleds(LED1, LED2, LED3, LED4);
el16ooo 0:bfd4c95124c3 54
el16ooo 0:bfd4c95124c3 55 //Set pins for USB connectivity
el16ooo 0:bfd4c95124c3 56 Serial pc(USBTX,USBRX); //Usually (p9,p10) for external devices
el16ooo 0:bfd4c95124c3 57
el16ooo 0:bfd4c95124c3 58 //Set logging control pin
el16ooo 0:bfd4c95124c3 59 DigitalIn loggerSwitch(p18);
el16ooo 0:bfd4c95124c3 60 DigitalIn plotterModeButton(p16);
el16ooo 0:bfd4c95124c3 61 DigitalIn standbyButton(p17);
el16ooo 0:bfd4c95124c3 62
el16ooo 0:bfd4c95124c3 63 //Set interrupt on pin 16 and 17
el16ooo 0:bfd4c95124c3 64 InterruptIn plotterInterrupt(p16);
el16ooo 0:bfd4c95124c3 65 InterruptIn standbyInterrupt(p17);
el16ooo 0:bfd4c95124c3 66 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 67
el16ooo 0:bfd4c95124c3 68
el16ooo 0:bfd4c95124c3 69 //DEFINE NEEDED OBJECTS
el16ooo 0:bfd4c95124c3 70 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 71 Ticker tempIntervalReader, timeIntervalReader, fileWriteInterval;
el16ooo 0:bfd4c95124c3 72 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 73
el16ooo 0:bfd4c95124c3 74
el16ooo 0:bfd4c95124c3 75 //FUNCTION DEFINITION
el16ooo 0:bfd4c95124c3 76 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 77 void ErrorBuzzer(int code);
el16ooo 0:bfd4c95124c3 78 void initializeTMP102(); //Function used to initialize the TMP102 & configure
el16ooo 0:bfd4c95124c3 79 void readTemperature(); //Function used to read the temperature momentarily
el16ooo 0:bfd4c95124c3 80 void serialISR(); //ISR that is called when serial data is received
el16ooo 0:bfd4c95124c3 81 void setTime(); //Function to set the UNIX time
el16ooo 0:bfd4c95124c3 82 void writeDataToFile(int data); //Function for writing to file
el16ooo 0:bfd4c95124c3 83 void updateLCDTime(); //Function to update LCD Time
el16ooo 1:f37cf0e5d0e8 84 void trigerViewChange(); //Function used to trigger view change
el16ooo 0:bfd4c95124c3 85 void plot();
el16ooo 0:bfd4c95124c3 86 void standbyFunction();
el16ooo 0:bfd4c95124c3 87 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 88
el16ooo 0:bfd4c95124c3 89
el16ooo 0:bfd4c95124c3 90
el16ooo 0:bfd4c95124c3 91 //DEFINE GLOBAL VARIABLES
el16ooo 0:bfd4c95124c3 92 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 93 char rxString[16]; //Buffer to store received string
el16ooo 0:bfd4c95124c3 94 int setTimeFlag = 0; //Flag for ISR
el16ooo 0:bfd4c95124c3 95 int setLogFlag = 0; //Flag to control logging
el16ooo 0:bfd4c95124c3 96 int setPlotFlag = 0; //Flag to switch in and out of plot mode
el16ooo 0:bfd4c95124c3 97 int LCDStanbyFlag=0; //Flag to stanby LCD
el16ooo 0:bfd4c95124c3 98 float temperatureValue = 0; //Initial temperature value
el16ooo 0:bfd4c95124c3 99 char tempValueDispBuffer[14]; // Screen can only take 14 characters/line @ maximum
el16ooo 0:bfd4c95124c3 100 char timeValueDispBuffer[30]; // Screen can only take 14 characters/line @ maximum
el16ooo 0:bfd4c95124c3 101 char dateValueDispBuffer[30]; // Screen can only take 14 characters/line @ maximum
el16ooo 0:bfd4c95124c3 102 char datetimeValueDispBuffer[30]; // Screen can only take 14 characters/line @ maximum
el16ooo 0:bfd4c95124c3 103 LocalFileSystem local("local"); //Create Local File System
el16ooo 0:bfd4c95124c3 104 int xAxisCounter=0;
el16ooo 0:bfd4c95124c3 105 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 106
el16ooo 0:bfd4c95124c3 107
el16ooo 0:bfd4c95124c3 108
el16ooo 0:bfd4c95124c3 109 //FUNCTION TO SET RTC TIME THROUGH SERIAL CONNECTION
el16ooo 0:bfd4c95124c3 110 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 111 void setTime() {
el16ooo 0:bfd4c95124c3 112 pc.printf("set_time - %s",rxString);// print time for debugging
el16ooo 0:bfd4c95124c3 113 int time = atoi(rxString); // atoi() converts a string to an integer
el16ooo 0:bfd4c95124c3 114 set_time(time); // update the time
el16ooo 0:bfd4c95124c3 115 }
el16ooo 0:bfd4c95124c3 116 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 117
el16ooo 0:bfd4c95124c3 118 //FUNCTION TO UPDATE LCD WITH NEW TIME READING
el16ooo 0:bfd4c95124c3 119 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 120 void updateLCDTime(){
el16ooo 0:bfd4c95124c3 121 time_t seconds = time(NULL); // Get current time
el16ooo 0:bfd4c95124c3 122
el16ooo 0:bfd4c95124c3 123 // Format time into a string (time and date)
el16ooo 0:bfd4c95124c3 124 strftime(timeValueDispBuffer, 30 , " %X", localtime(&seconds));
el16ooo 0:bfd4c95124c3 125 strftime(dateValueDispBuffer, 30 , " %x", localtime(&seconds));
el16ooo 0:bfd4c95124c3 126 strftime(datetimeValueDispBuffer,30 , "%x %X", localtime(&seconds));
el16ooo 0:bfd4c95124c3 127
el16ooo 0:bfd4c95124c3 128
el16ooo 0:bfd4c95124c3 129 // print time on LCD
el16ooo 0:bfd4c95124c3 130 if((setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 131 lcd.printString(dateValueDispBuffer,0,2); // Print on LCD
el16ooo 0:bfd4c95124c3 132 lcd.printString(timeValueDispBuffer,0,3); // Print on LCD
el16ooo 0:bfd4c95124c3 133 }
el16ooo 0:bfd4c95124c3 134 }
el16ooo 0:bfd4c95124c3 135 //--------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 136
el16ooo 0:bfd4c95124c3 137
el16ooo 0:bfd4c95124c3 138 //SERIAL LINK INTERRUPT SERVICE ROUTINE
el16ooo 0:bfd4c95124c3 139 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 140 void serialISR() {
el16ooo 0:bfd4c95124c3 141 // when a serial interrupt occurs, read rx string into buffer
el16ooo 0:bfd4c95124c3 142 pc.gets(rxString,16);
el16ooo 0:bfd4c95124c3 143 // set flag
el16ooo 0:bfd4c95124c3 144 setTimeFlag = 1;
el16ooo 0:bfd4c95124c3 145 }
el16ooo 0:bfd4c95124c3 146 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 147
el16ooo 0:bfd4c95124c3 148
el16ooo 0:bfd4c95124c3 149 // FUNCTION USED TO INITIATE LED FLASHING WHEN AN ERROR OCCURS
el16ooo 0:bfd4c95124c3 150 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 151 void ErrorBuzzer(int code)
el16ooo 0:bfd4c95124c3 152 {
el16ooo 0:bfd4c95124c3 153 while(1) { //hang in infinite loop flashing error code
el16ooo 0:bfd4c95124c3 154 myleds = 0; //LEDs OFF
el16ooo 0:bfd4c95124c3 155 wait(0.25); //Wait for 1/4th of a second
el16ooo 0:bfd4c95124c3 156 myleds = code; //LEDs ON
el16ooo 0:bfd4c95124c3 157 wait(0.25); //Wait for 1/4th of a second
el16ooo 0:bfd4c95124c3 158 }
el16ooo 0:bfd4c95124c3 159 }
el16ooo 0:bfd4c95124c3 160 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 161
el16ooo 0:bfd4c95124c3 162
el16ooo 0:bfd4c95124c3 163 //FUNCTIONUSED TO SET-UP TMP102 CONFIGURATION REGISTER AS DESIRED
el16ooo 0:bfd4c95124c3 164 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 165 void initializeTMP102(){
el16ooo 0:bfd4c95124c3 166
el16ooo 0:bfd4c95124c3 167 //Set bus speed to 400kHz
el16ooo 0:bfd4c95124c3 168 tmp102.frequency(400000);
el16ooo 0:bfd4c95124c3 169
el16ooo 0:bfd4c95124c3 170 int acknowledgement = 1; //Initialized to false
el16ooo 0:bfd4c95124c3 171
el16ooo 0:bfd4c95124c3 172 /*
el16ooo 0:bfd4c95124c3 173 Configure the 16 bits register structure of the configuration register
el16ooo 0:bfd4c95124c3 174 --------------------------------------------------------------
el16ooo 0:bfd4c95124c3 175 | BIT FUNCTION | OS | R1 | R0 | F1 | F0 | POL | TM | SD | |
el16ooo 0:bfd4c95124c3 176 | BYTE 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |
el16ooo 0:bfd4c95124c3 177 |------------------------------------------------------------|
el16ooo 0:bfd4c95124c3 178 | BIT FUNCTION | CR1 | CR0 | AL | EM | 0 | 0 | 0 | 0 | |
el16ooo 0:bfd4c95124c3 179 | BYTE 2 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | | |
el16ooo 0:bfd4c95124c3 180 --------------------------------------------------------------
el16ooo 0:bfd4c95124c3 181 BIT FUNTION EXPLANTION
el16ooo 0:bfd4c95124c3 182 OS (ONE-SHOT): 0 --> not in use
el16ooo 0:bfd4c95124c3 183 R1, R2 (RESOLUTION): 1, 1 --> Sets the temperature register to 12 bits
el16ooo 0:bfd4c95124c3 184 F1, F0 (FALUT QUE): 1,1 --> 6 consecutive faults before alert is triggered
el16ooo 0:bfd4c95124c3 185 POL (POLARITY): 0 --> Alert pin will be active low
el16ooo 0:bfd4c95124c3 186 TM (THERMOSTAT MODE): 0 --> Comparator mode activated
el16ooo 0:bfd4c95124c3 187 SD (SHUTDOWN MODE): 0 --> Continious conversion. No intermitent shutdown
el16ooo 0:bfd4c95124c3 188 CR1, CR0 (CONV. RES.): 0, 1 --> 1Hz, 1 conversion per second
el16ooo 0:bfd4c95124c3 189 AL (ALERT): 1 --> Read only + only takes the opposite vaue of POL
el16ooo 0:bfd4c95124c3 190 EM (EXTENDED MODE): 0 --> Normal Mode. Sets TREG,THIGH,TLOW reg. to 12 bts
el16ooo 0:bfd4c95124c3 191 */
el16ooo 0:bfd4c95124c3 192 char byteOne = 0x70; //0b01111000
el16ooo 0:bfd4c95124c3 193 char byteTwo = 0x60; //0b01100000
el16ooo 0:bfd4c95124c3 194
el16ooo 0:bfd4c95124c3 195
el16ooo 0:bfd4c95124c3 196 //Initiate contact with slave, specify desired register and the data to write.
el16ooo 0:bfd4c95124c3 197 //Package contains address and the data to write
el16ooo 0:bfd4c95124c3 198 char configPackage[3];
el16ooo 0:bfd4c95124c3 199 configPackage[0] = configRegAddress;
el16ooo 0:bfd4c95124c3 200 configPackage[1] = byteOne;
el16ooo 0:bfd4c95124c3 201 configPackage[2] = byteTwo;
el16ooo 0:bfd4c95124c3 202 acknowledgement = tmp102.write(slaveWriteAddress, configPackage, 3);
el16ooo 0:bfd4c95124c3 203 if(acknowledgement==1){ //I2C always returns 0 for successful operation
el16ooo 0:bfd4c95124c3 204 ErrorBuzzer(1); //Error Message
el16ooo 0:bfd4c95124c3 205 }
el16ooo 0:bfd4c95124c3 206 }
el16ooo 0:bfd4c95124c3 207 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 208
el16ooo 0:bfd4c95124c3 209
el16ooo 0:bfd4c95124c3 210
el16ooo 0:bfd4c95124c3 211
el16ooo 0:bfd4c95124c3 212
el16ooo 0:bfd4c95124c3 213 //Temperature Reader Function
el16ooo 0:bfd4c95124c3 214 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 215 void readTemperature(){
el16ooo 0:bfd4c95124c3 216 int acknowledgement=1; //Initialized to 1
el16ooo 0:bfd4c95124c3 217 char tempRegisterData[2];
el16ooo 0:bfd4c95124c3 218 int temperature = 0;
el16ooo 0:bfd4c95124c3 219 //Inititate contact with slave by trying to write to its temp register
el16ooo 0:bfd4c95124c3 220 //Temp register is a read only register, so it will not happen
el16ooo 0:bfd4c95124c3 221 acknowledgement = tmp102.write(slaveWriteAddress,tempRegAddress,1);
el16ooo 0:bfd4c95124c3 222 if(acknowledgement==1){ //I2C always returns 0 for successful operation
el16ooo 0:bfd4c95124c3 223 ErrorBuzzer(2); //Error Message
el16ooo 0:bfd4c95124c3 224 }
el16ooo 0:bfd4c95124c3 225 //Try to read from temperature register
el16ooo 0:bfd4c95124c3 226 acknowledgement = tmp102.read(slaveReadAddress,tempRegisterData,2);
el16ooo 0:bfd4c95124c3 227 if(acknowledgement==1){ //I2C always returns 0 for successful operation
el16ooo 0:bfd4c95124c3 228 ErrorBuzzer(3); //Error Message
el16ooo 0:bfd4c95124c3 229 }
el16ooo 0:bfd4c95124c3 230
el16ooo 0:bfd4c95124c3 231 temperature = (tempRegisterData[0] << 4) | (tempRegisterData[1] >> 4);
el16ooo 0:bfd4c95124c3 232 temperatureValue = temperature*0.0625;
el16ooo 0:bfd4c95124c3 233 if(setPlotFlag==1){
el16ooo 0:bfd4c95124c3 234 plot();
el16ooo 0:bfd4c95124c3 235 }
el16ooo 0:bfd4c95124c3 236 //return temperature*0.0625;
el16ooo 0:bfd4c95124c3 237 //float tmp = (float((tempRegisterData[0]<<8)|tempRegisterData[1]) / 256.0);
el16ooo 0:bfd4c95124c3 238 }
el16ooo 0:bfd4c95124c3 239 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 240
el16ooo 0:bfd4c95124c3 241
el16ooo 0:bfd4c95124c3 242 //FUNCTION FOR WRITING TO FILE
el16ooo 0:bfd4c95124c3 243 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 244 void writeDataToFile()
el16ooo 0:bfd4c95124c3 245 {
el16ooo 0:bfd4c95124c3 246 if(setLogFlag==1){ //Only record if logging is turned ON
el16ooo 0:bfd4c95124c3 247 myleds = 15; // turn on LEDs for feedback
el16ooo 0:bfd4c95124c3 248 FILE *fp = fopen("/local/templog.csv", "a"); // open 'templog.txt' for appending
el16ooo 0:bfd4c95124c3 249 // if the file doesn't exist it is created, if it exists, data is appended to the end
el16ooo 0:bfd4c95124c3 250 fprintf(fp,"%s, %.2f \n",datetimeValueDispBuffer, temperatureValue ); // print string to file
el16ooo 0:bfd4c95124c3 251 fclose(fp); // close file
el16ooo 0:bfd4c95124c3 252 myleds = 0; // turn off LEDs to signify file access has finished
el16ooo 0:bfd4c95124c3 253 }
el16ooo 0:bfd4c95124c3 254 }
el16ooo 0:bfd4c95124c3 255 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 256
el16ooo 0:bfd4c95124c3 257
el16ooo 0:bfd4c95124c3 258 //INTERRUPT FUNCTION FOR DETECTING PLOT vs WRITE MODE
el16ooo 0:bfd4c95124c3 259 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 260 void trigerViewChange() {
el16ooo 0:bfd4c95124c3 261 if(setPlotFlag==0){
el16ooo 0:bfd4c95124c3 262 setPlotFlag=1;
el16ooo 0:bfd4c95124c3 263 lcd.clear();
el16ooo 0:bfd4c95124c3 264 for(int i=0; i<=83; i++){
el16ooo 0:bfd4c95124c3 265 lcd.setPixel(i,45);
el16ooo 0:bfd4c95124c3 266 }
el16ooo 0:bfd4c95124c3 267
el16ooo 0:bfd4c95124c3 268 for(int i=0; i<=47; i++){
el16ooo 0:bfd4c95124c3 269
el16ooo 0:bfd4c95124c3 270 lcd.setPixel(2,i);
el16ooo 0:bfd4c95124c3 271 }
el16ooo 0:bfd4c95124c3 272 }
el16ooo 0:bfd4c95124c3 273 else if(setPlotFlag==1){
el16ooo 0:bfd4c95124c3 274 setPlotFlag = 0;
el16ooo 0:bfd4c95124c3 275 lcd.clear();
el16ooo 0:bfd4c95124c3 276 lcd.printString(" TEMP. LOGGER!",0,0); //Print Welcome Message
el16ooo 0:bfd4c95124c3 277 }
el16ooo 0:bfd4c95124c3 278
el16ooo 0:bfd4c95124c3 279 }
el16ooo 0:bfd4c95124c3 280 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 281
el16ooo 0:bfd4c95124c3 282
el16ooo 0:bfd4c95124c3 283 //FUNCTION FOR PLOTTING TEMPERATURE VALUE ON LCD
el16ooo 0:bfd4c95124c3 284 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 285 void plot(){
el16ooo 0:bfd4c95124c3 286 //Note that 0,0 of the LCD starts from thr top left hand corner
el16ooo 0:bfd4c95124c3 287 //Pixels are addressed in the range of 0 to 47 (y) and 0 to 83 (x).
el16ooo 0:bfd4c95124c3 288 int tempIntegerValue=8;
el16ooo 0:bfd4c95124c3 289 //Plot only tempertures between 0 and 47 degree celcious
el16ooo 0:bfd4c95124c3 290 tempIntegerValue = floor(temperatureValue);
el16ooo 0:bfd4c95124c3 291 //Note that 0,0 of the LCD starts from thr top left hand corner
el16ooo 0:bfd4c95124c3 292 int rightYPosition=0;
el16ooo 0:bfd4c95124c3 293
el16ooo 0:bfd4c95124c3 294
el16ooo 0:bfd4c95124c3 295 if (setPlotFlag==1){
el16ooo 0:bfd4c95124c3 296 if((tempIntegerValue<47) && (xAxisCounter<=83) ){
el16ooo 0:bfd4c95124c3 297 rightYPosition = 47-tempIntegerValue;
el16ooo 0:bfd4c95124c3 298 lcd.setPixel(xAxisCounter, rightYPosition);
el16ooo 0:bfd4c95124c3 299 lcd.refresh();
el16ooo 0:bfd4c95124c3 300 xAxisCounter++;
el16ooo 0:bfd4c95124c3 301 sprintf(tempValueDispBuffer,"Now %.2f C",temperatureValue);
el16ooo 0:bfd4c95124c3 302 lcd.printString(tempValueDispBuffer,0,0); // Print on LCD
el16ooo 0:bfd4c95124c3 303 }else if(xAxisCounter>83){
el16ooo 0:bfd4c95124c3 304 lcd.clear();
el16ooo 0:bfd4c95124c3 305 lcd.refresh();
el16ooo 0:bfd4c95124c3 306 xAxisCounter=0;
el16ooo 0:bfd4c95124c3 307 rightYPosition = 47-tempIntegerValue;
el16ooo 0:bfd4c95124c3 308 lcd.setPixel(xAxisCounter, rightYPosition);
el16ooo 0:bfd4c95124c3 309 lcd.refresh();
el16ooo 0:bfd4c95124c3 310 }
el16ooo 0:bfd4c95124c3 311 else{
el16ooo 0:bfd4c95124c3 312 xAxisCounter=0;
el16ooo 0:bfd4c95124c3 313
el16ooo 0:bfd4c95124c3 314 }
el16ooo 0:bfd4c95124c3 315 }
el16ooo 0:bfd4c95124c3 316
el16ooo 0:bfd4c95124c3 317 }
el16ooo 0:bfd4c95124c3 318 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 319
el16ooo 0:bfd4c95124c3 320
el16ooo 0:bfd4c95124c3 321 //STANDBY AND WAKE FUNCTION
el16ooo 0:bfd4c95124c3 322 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 323 void standbyFunction(){
el16ooo 0:bfd4c95124c3 324 if(LCDStanbyFlag==0){
el16ooo 0:bfd4c95124c3 325 lcd.turnOff();
el16ooo 0:bfd4c95124c3 326 LCDStanbyFlag = 1;
el16ooo 0:bfd4c95124c3 327 }
el16ooo 0:bfd4c95124c3 328 else if (LCDStanbyFlag==1){
el16ooo 1:f37cf0e5d0e8 329 lcd.init(); //Initialize and Turn ON LCD
el16ooo 0:bfd4c95124c3 330 if((setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 331 lcd.printString(" TEMP. LOGGER!",0,0); //Print Welcome Message
el16ooo 0:bfd4c95124c3 332 }else{
el16ooo 0:bfd4c95124c3 333 // lcd.printString(" PLT MODE,",0,0);
el16ooo 0:bfd4c95124c3 334 }
el16ooo 0:bfd4c95124c3 335 LCDStanbyFlag = 0;
el16ooo 0:bfd4c95124c3 336 }
el16ooo 0:bfd4c95124c3 337
el16ooo 0:bfd4c95124c3 338 }
el16ooo 0:bfd4c95124c3 339 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 340
el16ooo 0:bfd4c95124c3 341
el16ooo 0:bfd4c95124c3 342 //MAIN FUNCTION
el16ooo 0:bfd4c95124c3 343 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 344 int main() {
el16ooo 0:bfd4c95124c3 345
el16ooo 0:bfd4c95124c3 346 //Initialize temperature display lengths
el16ooo 0:bfd4c95124c3 347 int tempDispLength=0;
el16ooo 0:bfd4c95124c3 348
el16ooo 0:bfd4c95124c3 349 plotterModeButton.mode(PullUp);
el16ooo 0:bfd4c95124c3 350 standbyButton.mode(PullUp);
el16ooo 0:bfd4c95124c3 351
el16ooo 0:bfd4c95124c3 352 lcd.init(); //Initialize LCD
el16ooo 0:bfd4c95124c3 353 if((setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 354 lcd.printString(" TEMP. LOGGER!",0,0); //Print Welcome Message
el16ooo 0:bfd4c95124c3 355 }
el16ooo 0:bfd4c95124c3 356
el16ooo 0:bfd4c95124c3 357 initializeTMP102(); //Initialize Temperature Sensor
el16ooo 0:bfd4c95124c3 358
el16ooo 0:bfd4c95124c3 359
el16ooo 0:bfd4c95124c3 360 // Attach serialISR function to the ISR and set serial baud rate
el16ooo 0:bfd4c95124c3 361 pc.attach(&serialISR);
el16ooo 0:bfd4c95124c3 362 pc.baud(9600);
el16ooo 0:bfd4c95124c3 363
el16ooo 0:bfd4c95124c3 364
el16ooo 0:bfd4c95124c3 365 //Attach readTemperature function to the ticker.
el16ooo 0:bfd4c95124c3 366 //Schedule to interrup every 60 seconds
el16ooo 0:bfd4c95124c3 367 readTemperature();
el16ooo 0:bfd4c95124c3 368 tempIntervalReader.attach(&readTemperature, 2.0);
el16ooo 0:bfd4c95124c3 369
el16ooo 0:bfd4c95124c3 370 //Attach write to file operation to a 60 seconds ticker
el16ooo 0:bfd4c95124c3 371 fileWriteInterval.attach(&writeDataToFile, 2.0);
el16ooo 0:bfd4c95124c3 372
el16ooo 0:bfd4c95124c3 373 //Attach updateLCDTime function to the ticker.
el16ooo 0:bfd4c95124c3 374 //Schedule to interrupt and update LCDTime every 1 second
el16ooo 0:bfd4c95124c3 375 timeIntervalReader.attach(&updateLCDTime, 1.0);
el16ooo 0:bfd4c95124c3 376
el16ooo 0:bfd4c95124c3 377 //Attach interrupt to button on p16 to trigger view change to and from plotter
el16ooo 0:bfd4c95124c3 378 plotterInterrupt.fall(&trigerViewChange);
el16ooo 0:bfd4c95124c3 379
el16ooo 0:bfd4c95124c3 380 //Attach standby function to interrupt on button p17
el16ooo 0:bfd4c95124c3 381 standbyInterrupt.fall(&standbyFunction);
el16ooo 0:bfd4c95124c3 382
el16ooo 0:bfd4c95124c3 383 //Value '0' will initialise time to 1st January 1970
el16ooo 0:bfd4c95124c3 384 //set_time(1480958460); //Uncomment after RTC clock value has been set
el16ooo 0:bfd4c95124c3 385
el16ooo 0:bfd4c95124c3 386 //Continue spining this loop, however, every
el16ooo 0:bfd4c95124c3 387 // 60 seconds, the ticker will be called and the time updated ever 1s
el16ooo 0:bfd4c95124c3 388 while(1) {
el16ooo 0:bfd4c95124c3 389 if((setLogFlag==0) && (setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 390 lcd.printString(" LOGGING OFF ",0,5);
el16ooo 0:bfd4c95124c3 391 }
el16ooo 0:bfd4c95124c3 392 else if((setLogFlag==1) && (setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 393 lcd.printString(" LOGGING ON ",0, 5);
el16ooo 0:bfd4c95124c3 394 }
el16ooo 0:bfd4c95124c3 395
el16ooo 0:bfd4c95124c3 396 //Display Current Temperature Reading
el16ooo 0:bfd4c95124c3 397 // print formatted data to buffer
el16ooo 0:bfd4c95124c3 398 tempDispLength = sprintf(tempValueDispBuffer," T = %.2f C",temperatureValue);
el16ooo 0:bfd4c95124c3 399 if ((tempDispLength <= 14) && (setPlotFlag==0)) {
el16ooo 0:bfd4c95124c3 400 lcd.printString(tempValueDispBuffer,0,4); // Print on LCD
el16ooo 0:bfd4c95124c3 401 }
el16ooo 0:bfd4c95124c3 402
el16ooo 0:bfd4c95124c3 403 //If updated time has been sent through serial
el16ooo 0:bfd4c95124c3 404 if (setTimeFlag==1) {
el16ooo 0:bfd4c95124c3 405 setTimeFlag = 0; // clear set time flag
el16ooo 0:bfd4c95124c3 406 setTime(); // Call update time function
el16ooo 0:bfd4c95124c3 407 }
el16ooo 0:bfd4c95124c3 408
el16ooo 0:bfd4c95124c3 409 //Check if Logging is ON
el16ooo 0:bfd4c95124c3 410 if(loggerSwitch){
el16ooo 0:bfd4c95124c3 411 setLogFlag=1;
el16ooo 0:bfd4c95124c3 412 }
el16ooo 0:bfd4c95124c3 413 else{
el16ooo 0:bfd4c95124c3 414 setLogFlag=0;
el16ooo 0:bfd4c95124c3 415 }
el16ooo 0:bfd4c95124c3 416
el16ooo 0:bfd4c95124c3 417 //Switch to plotter Mode through button toggle
el16ooo 0:bfd4c95124c3 418 if(setPlotFlag==0){
el16ooo 0:bfd4c95124c3 419 lcd.printString(" VIEW MODE",0,1);
el16ooo 0:bfd4c95124c3 420 }else{
el16ooo 0:bfd4c95124c3 421 // lcd.printString(" PLT MODE,",0,0);
el16ooo 0:bfd4c95124c3 422 }
el16ooo 0:bfd4c95124c3 423 }
el16ooo 0:bfd4c95124c3 424 }
el16ooo 0:bfd4c95124c3 425 //------------------------------------------------------------------------------