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 21:46:00 2017 +0000
Revision:
0:bfd4c95124c3
Child:
1:f37cf0e5d0e8
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 the 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 0:bfd4c95124c3 84 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 0:bfd4c95124c3 329 lcd.turnOn();
el16ooo 0:bfd4c95124c3 330 lcd.init(); //Initialize LCD
el16ooo 0:bfd4c95124c3 331 if((setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 332 lcd.printString(" TEMP. LOGGER!",0,0); //Print Welcome Message
el16ooo 0:bfd4c95124c3 333 }else{
el16ooo 0:bfd4c95124c3 334 // lcd.printString(" PLT MODE,",0,0);
el16ooo 0:bfd4c95124c3 335 }
el16ooo 0:bfd4c95124c3 336 LCDStanbyFlag = 0;
el16ooo 0:bfd4c95124c3 337 }
el16ooo 0:bfd4c95124c3 338
el16ooo 0:bfd4c95124c3 339 }
el16ooo 0:bfd4c95124c3 340 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 341
el16ooo 0:bfd4c95124c3 342
el16ooo 0:bfd4c95124c3 343 //MAIN FUNCTION
el16ooo 0:bfd4c95124c3 344 //------------------------------------------------------------------------------
el16ooo 0:bfd4c95124c3 345 int main() {
el16ooo 0:bfd4c95124c3 346
el16ooo 0:bfd4c95124c3 347 //Initialize temperature display lengths
el16ooo 0:bfd4c95124c3 348 int tempDispLength=0;
el16ooo 0:bfd4c95124c3 349
el16ooo 0:bfd4c95124c3 350 plotterModeButton.mode(PullUp);
el16ooo 0:bfd4c95124c3 351 standbyButton.mode(PullUp);
el16ooo 0:bfd4c95124c3 352
el16ooo 0:bfd4c95124c3 353 lcd.init(); //Initialize LCD
el16ooo 0:bfd4c95124c3 354 if((setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 355 lcd.printString(" TEMP. LOGGER!",0,0); //Print Welcome Message
el16ooo 0:bfd4c95124c3 356 }
el16ooo 0:bfd4c95124c3 357
el16ooo 0:bfd4c95124c3 358 initializeTMP102(); //Initialize Temperature Sensor
el16ooo 0:bfd4c95124c3 359
el16ooo 0:bfd4c95124c3 360
el16ooo 0:bfd4c95124c3 361 // Attach serialISR function to the ISR and set serial baud rate
el16ooo 0:bfd4c95124c3 362 pc.attach(&serialISR);
el16ooo 0:bfd4c95124c3 363 pc.baud(9600);
el16ooo 0:bfd4c95124c3 364
el16ooo 0:bfd4c95124c3 365
el16ooo 0:bfd4c95124c3 366 //Attach readTemperature function to the ticker.
el16ooo 0:bfd4c95124c3 367 //Schedule to interrup every 60 seconds
el16ooo 0:bfd4c95124c3 368 readTemperature();
el16ooo 0:bfd4c95124c3 369 tempIntervalReader.attach(&readTemperature, 2.0);
el16ooo 0:bfd4c95124c3 370
el16ooo 0:bfd4c95124c3 371 //Attach write to file operation to a 60 seconds ticker
el16ooo 0:bfd4c95124c3 372 fileWriteInterval.attach(&writeDataToFile, 2.0);
el16ooo 0:bfd4c95124c3 373
el16ooo 0:bfd4c95124c3 374 //Attach updateLCDTime function to the ticker.
el16ooo 0:bfd4c95124c3 375 //Schedule to interrupt and update LCDTime every 1 second
el16ooo 0:bfd4c95124c3 376 timeIntervalReader.attach(&updateLCDTime, 1.0);
el16ooo 0:bfd4c95124c3 377
el16ooo 0:bfd4c95124c3 378 //Attach interrupt to button on p16 to trigger view change to and from plotter
el16ooo 0:bfd4c95124c3 379 plotterInterrupt.fall(&trigerViewChange);
el16ooo 0:bfd4c95124c3 380
el16ooo 0:bfd4c95124c3 381 //Attach standby function to interrupt on button p17
el16ooo 0:bfd4c95124c3 382 standbyInterrupt.fall(&standbyFunction);
el16ooo 0:bfd4c95124c3 383
el16ooo 0:bfd4c95124c3 384 //Value '0' will initialise time to 1st January 1970
el16ooo 0:bfd4c95124c3 385 //set_time(1480958460); //Uncomment after RTC clock value has been set
el16ooo 0:bfd4c95124c3 386
el16ooo 0:bfd4c95124c3 387 //Continue spining this loop, however, every
el16ooo 0:bfd4c95124c3 388 // 60 seconds, the ticker will be called and the time updated ever 1s
el16ooo 0:bfd4c95124c3 389 while(1) {
el16ooo 0:bfd4c95124c3 390 if((setLogFlag==0) && (setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 391 lcd.printString(" LOGGING OFF ",0,5);
el16ooo 0:bfd4c95124c3 392 }
el16ooo 0:bfd4c95124c3 393 else if((setLogFlag==1) && (setPlotFlag==0)){
el16ooo 0:bfd4c95124c3 394 lcd.printString(" LOGGING ON ",0, 5);
el16ooo 0:bfd4c95124c3 395 }
el16ooo 0:bfd4c95124c3 396
el16ooo 0:bfd4c95124c3 397 //Display Current Temperature Reading
el16ooo 0:bfd4c95124c3 398 // print formatted data to buffer
el16ooo 0:bfd4c95124c3 399 tempDispLength = sprintf(tempValueDispBuffer," T = %.2f C",temperatureValue);
el16ooo 0:bfd4c95124c3 400 if ((tempDispLength <= 14) && (setPlotFlag==0)) {
el16ooo 0:bfd4c95124c3 401 lcd.printString(tempValueDispBuffer,0,4); // Print on LCD
el16ooo 0:bfd4c95124c3 402 }
el16ooo 0:bfd4c95124c3 403
el16ooo 0:bfd4c95124c3 404 //If updated time has been sent through serial
el16ooo 0:bfd4c95124c3 405 if (setTimeFlag==1) {
el16ooo 0:bfd4c95124c3 406 setTimeFlag = 0; // clear set time flag
el16ooo 0:bfd4c95124c3 407 setTime(); // Call update time function
el16ooo 0:bfd4c95124c3 408 }
el16ooo 0:bfd4c95124c3 409
el16ooo 0:bfd4c95124c3 410 //Check if Logging is ON
el16ooo 0:bfd4c95124c3 411 if(loggerSwitch){
el16ooo 0:bfd4c95124c3 412 setLogFlag=1;
el16ooo 0:bfd4c95124c3 413 }
el16ooo 0:bfd4c95124c3 414 else{
el16ooo 0:bfd4c95124c3 415 setLogFlag=0;
el16ooo 0:bfd4c95124c3 416 }
el16ooo 0:bfd4c95124c3 417
el16ooo 0:bfd4c95124c3 418 //Switch to plotter Mode through button toggle
el16ooo 0:bfd4c95124c3 419 if(setPlotFlag==0){
el16ooo 0:bfd4c95124c3 420 lcd.printString(" VIEW MODE",0,1);
el16ooo 0:bfd4c95124c3 421 }else{
el16ooo 0:bfd4c95124c3 422 // lcd.printString(" PLT MODE,",0,0);
el16ooo 0:bfd4c95124c3 423 }
el16ooo 0:bfd4c95124c3 424 }
el16ooo 0:bfd4c95124c3 425 }
el16ooo 0:bfd4c95124c3 426 //------------------------------------------------------------------------------