Leeds University

Dependencies:   N5110 beep mbed

Committer:
Gaz142
Date:
Mon May 11 21:58:29 2015 +0000
Revision:
1:477ed4a96308
Parent:
0:e8b157a824e7
New;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Gaz142 0:e8b157a824e7 1 #include "mbed.h"
Gaz142 0:e8b157a824e7 2 #include "N5110.h"
Gaz142 0:e8b157a824e7 3 #include "BMP180.h"
Gaz142 0:e8b157a824e7 4 #include "beep.h"
Gaz142 0:e8b157a824e7 5
Gaz142 0:e8b157a824e7 6 Serial serial(USBTX,USBRX);
Gaz142 0:e8b157a824e7 7 BMP180 bmp180(p28,p27); // SDA, SCL
Gaz142 0:e8b157a824e7 8 BusOut leds(LED1, LED2, LED3, LED4); // Debug - Error
Gaz142 0:e8b157a824e7 9 Beep buzzer(p21); // Buzzer Pin
Gaz142 0:e8b157a824e7 10 N5110 lcd(p7,p8,p9,p10,p11,p13,p26); // VCC,SCE,RST,D/C,MOSI,SCLK,LED
Gaz142 0:e8b157a824e7 11 InterruptIn unitChanger(p16); // unit changer button
Gaz142 0:e8b157a824e7 12 InterruptIn brightnessButton(p15); // sleep/brightness button
Gaz142 0:e8b157a824e7 13 AnalogIn battery(p17); // Battrey indicator
Gaz142 0:e8b157a824e7 14 DigitalOut led2(p24); // LED 1
Gaz142 0:e8b157a824e7 15 DigitalOut led1(p23); // LED 2
Gaz142 0:e8b157a824e7 16 DigitalOut sce(p8); // SCE
Gaz142 0:e8b157a824e7 17 SPI spi(p11,NC,p13); // SPI
Gaz142 0:e8b157a824e7 18 DigitalOut pwr(p7); // PWR
Gaz142 0:e8b157a824e7 19 DigitalOut dc(p10); // DC
Gaz142 0:e8b157a824e7 20 PwmOut led(p26); // LED
Gaz142 0:e8b157a824e7 21
Gaz142 0:e8b157a824e7 22 Measurement measurement; // Store the measurement values
Gaz142 0:e8b157a824e7 23 Ticker message; // Alert message
Gaz142 1:477ed4a96308 24 Ticker valueReading;
Gaz142 1:477ed4a96308 25 Ticker interrupt; // Each 60 sec a reading is taken
Gaz142 0:e8b157a824e7 26 LocalFileSystem Local("local"); // Store the data
Gaz142 0:e8b157a824e7 27
Gaz142 0:e8b157a824e7 28 void celsius(); // Celsius function
Gaz142 0:e8b157a824e7 29 void eraseRAM(); // Clear the RAM
Gaz142 0:e8b157a824e7 30 void displayOff(); // Turn off the display
Gaz142 0:e8b157a824e7 31 void displayOn(); // Turn on the display
Gaz142 0:e8b157a824e7 32 void ISR(); // Serial data
Gaz142 0:e8b157a824e7 33 void battreyIndicator(float); // Indicate the battrey lfie
Gaz142 0:e8b157a824e7 34 void registerTime(); // Time
Gaz142 0:e8b157a824e7 35 void setBrightness(float brightness); // Init the brightness
Gaz142 0:e8b157a824e7 36 void fahrenheit(); // Fahrenheit function
Gaz142 1:477ed4a96308 37 void dataWrite(float Measurement);// register data
Gaz142 0:e8b157a824e7 38 void error(); // indicate error
Gaz142 0:e8b157a824e7 39 void stop(); // stop the opreation
Gaz142 0:e8b157a824e7 40 void timeChange(); // intreeupt the time
Gaz142 0:e8b157a824e7 41
Gaz142 0:e8b157a824e7 42 // Those are flags for the functions
Gaz142 0:e8b157a824e7 43 int registerTimeFlag = 0;
Gaz142 0:e8b157a824e7 44 int unitChangerFlag = 0;
Gaz142 0:e8b157a824e7 45 int celsiusFlag =0;
Gaz142 0:e8b157a824e7 46 int brightnessButtonFlag =0;
Gaz142 1:477ed4a96308 47 int setTimeFlag = 0;
Gaz142 0:e8b157a824e7 48
Gaz142 0:e8b157a824e7 49 char buffer[30]; // creat a charracter
Gaz142 0:e8b157a824e7 50 char xString[16];
Gaz142 0:e8b157a824e7 51
Gaz142 0:e8b157a824e7 52
Gaz142 0:e8b157a824e7 53 void delayOption() // Calls the Celsius and the Fahrenheit function, however they are delayed by 60 sec
Gaz142 0:e8b157a824e7 54 {
Gaz142 0:e8b157a824e7 55 fahrenheit();
Gaz142 0:e8b157a824e7 56 celsius();
Gaz142 0:e8b157a824e7 57 lcd.refresh();
Gaz142 0:e8b157a824e7 58 }
Gaz142 0:e8b157a824e7 59
Gaz142 0:e8b157a824e7 60 void unitChangerProperties() // When the button is pressed value = 0 which changes it to fahrenheit and other way around
Gaz142 0:e8b157a824e7 61 {
Gaz142 0:e8b157a824e7 62
Gaz142 0:e8b157a824e7 63 if(unitChangerFlag == 1) {
Gaz142 0:e8b157a824e7 64 unitChangerFlag = 0;
Gaz142 0:e8b157a824e7 65 fahrenheit();
Gaz142 0:e8b157a824e7 66 } else { // after the click it returns it to the beggning
Gaz142 0:e8b157a824e7 67 unitChangerFlag = 1;
Gaz142 0:e8b157a824e7 68 celsius();
Gaz142 0:e8b157a824e7 69 }
Gaz142 0:e8b157a824e7 70 }
Gaz142 0:e8b157a824e7 71
Gaz142 0:e8b157a824e7 72 void brightnessSleep() // Gives the button 6 clicks and then return it to the beginning so it can be clicked again
Gaz142 0:e8b157a824e7 73 {
Gaz142 0:e8b157a824e7 74 if(brightnessButtonFlag == 6) {
Gaz142 0:e8b157a824e7 75 brightnessButtonFlag = 5;
Gaz142 0:e8b157a824e7 76 } else if (brightnessButtonFlag == 5) {
Gaz142 0:e8b157a824e7 77 brightnessButtonFlag =4;
Gaz142 0:e8b157a824e7 78 } else if (brightnessButtonFlag ==4) {
Gaz142 0:e8b157a824e7 79 brightnessButtonFlag =3;
Gaz142 0:e8b157a824e7 80 } else if (brightnessButtonFlag==3) {
Gaz142 0:e8b157a824e7 81 brightnessButtonFlag=2;
Gaz142 0:e8b157a824e7 82 } else if (brightnessButtonFlag ==2) {
Gaz142 0:e8b157a824e7 83 brightnessButtonFlag =1;
Gaz142 0:e8b157a824e7 84 } else if (brightnessButtonFlag ==1) {
Gaz142 0:e8b157a824e7 85 brightnessButtonFlag =0;
Gaz142 0:e8b157a824e7 86 } else {
Gaz142 0:e8b157a824e7 87 brightnessButtonFlag =6;
Gaz142 0:e8b157a824e7 88 }
Gaz142 0:e8b157a824e7 89 }
Gaz142 0:e8b157a824e7 90
Gaz142 0:e8b157a824e7 91 void buzzerMessage() // When the measurement.temperatureC reaches 27, the following buzz and message will appear
Gaz142 0:e8b157a824e7 92 {
Gaz142 0:e8b157a824e7 93 if ( measurement.temperatureC >= 27 ) {
Gaz142 0:e8b157a824e7 94 buzzer.beep(1000,0.3);
Gaz142 0:e8b157a824e7 95 lcd.printString("WARNING!", 15,15);
Gaz142 0:e8b157a824e7 96 lcd.refresh();
Gaz142 0:e8b157a824e7 97 } else {
Gaz142 0:e8b157a824e7 98 lcd.printString(" ", 15,15);
Gaz142 0:e8b157a824e7 99 lcd.refresh();
Gaz142 0:e8b157a824e7 100 }
Gaz142 0:e8b157a824e7 101 }
Gaz142 0:e8b157a824e7 102
Gaz142 0:e8b157a824e7 103 int main()
Gaz142 0:e8b157a824e7 104 {
Gaz142 0:e8b157a824e7 105 bmp180.init(); // initialise the sensor
Gaz142 0:e8b157a824e7 106 lcd.init(); // first need to initialise display
Gaz142 0:e8b157a824e7 107 message.attach(&buzzerMessage,0.5); // the message function keep checking every 0.5 seconds
Gaz142 0:e8b157a824e7 108 valueReading.attach(&delayOption, 60.0); // the reading is delayed by 60 second, so every minute the reading will be taken
Gaz142 0:e8b157a824e7 109 battreyIndicator(battery); // call the battrey indicator function
Gaz142 0:e8b157a824e7 110 unitChanger.rise(&unitChangerProperties); // calls the unit changer button function.
Gaz142 0:e8b157a824e7 111 brightnessButton.rise(&brightnessSleep); // calls the sleep/brightness button function.
Gaz142 0:e8b157a824e7 112 delayOption(); // calls the delay function
Gaz142 0:e8b157a824e7 113 lcd.refresh(); // refresh the LCD.
Gaz142 0:e8b157a824e7 114
Gaz142 1:477ed4a96308 115 // Section for tempearture
Gaz142 1:477ed4a96308 116 valueReading.attach(&stop,10.0); // Read temperature every 10 secondas
Gaz142 1:477ed4a96308 117
Gaz142 1:477ed4a96308 118 // section for keeping track of time
Gaz142 1:477ed4a96308 119 serial.attach(&ISR); // attach serial ISR
Gaz142 1:477ed4a96308 120 valueReading.attach(&stop,300.0);
Gaz142 1:477ed4a96308 121 set_time(1425386440); // initialise time to current time
Gaz142 1:477ed4a96308 122
Gaz142 1:477ed4a96308 123 interrupt.attach(&timeChange, 300.0); // print current time every 10.o seconds
Gaz142 1:477ed4a96308 124
Gaz142 1:477ed4a96308 125 // Section for writing files
Gaz142 1:477ed4a96308 126 //int counter = 0; // variable to increment
Gaz142 1:477ed4a96308 127
Gaz142 0:e8b157a824e7 128 while(1) {
Gaz142 0:e8b157a824e7 129
Gaz142 1:477ed4a96308 130 stop();
Gaz142 1:477ed4a96308 131 // section for writing files
Gaz142 1:477ed4a96308 132 // float temperature = getTemperature();
Gaz142 1:477ed4a96308 133 dataWrite(measurement.temperatureC); // write current value to disk
Gaz142 1:477ed4a96308 134
Gaz142 1:477ed4a96308 135
Gaz142 1:477ed4a96308 136
Gaz142 1:477ed4a96308 137 wait(1.0); // small delay
Gaz142 1:477ed4a96308 138 // Section for time tracking
Gaz142 1:477ed4a96308 139 if (setTimeFlag) { // if updated time has been sent
Gaz142 1:477ed4a96308 140 setTimeFlag = 0; // clear flag
Gaz142 1:477ed4a96308 141 registerTime(); // update time
Gaz142 1:477ed4a96308 142 }
Gaz142 1:477ed4a96308 143
Gaz142 1:477ed4a96308 144
Gaz142 1:477ed4a96308 145
Gaz142 0:e8b157a824e7 146 if(brightnessButtonFlag == 6) { // starts / and after the last click it return to here and wakes up the screen
Gaz142 0:e8b157a824e7 147 displayOn();
Gaz142 0:e8b157a824e7 148 lcd.setBrightness(0.2);
Gaz142 0:e8b157a824e7 149 lcd.refresh();
Gaz142 0:e8b157a824e7 150 } else if (brightnessButtonFlag == 5) { // the first click increase brightness by 20%
Gaz142 0:e8b157a824e7 151 lcd.setBrightness(0.4);
Gaz142 0:e8b157a824e7 152 } else if (brightnessButtonFlag ==4) {
Gaz142 0:e8b157a824e7 153 lcd.setBrightness(0.6);
Gaz142 0:e8b157a824e7 154 } else if (brightnessButtonFlag==3) {
Gaz142 0:e8b157a824e7 155 lcd.setBrightness(0.8);
Gaz142 0:e8b157a824e7 156 } else if (brightnessButtonFlag==2) {
Gaz142 0:e8b157a824e7 157 lcd.setBrightness (1);
Gaz142 0:e8b157a824e7 158 } else if (brightnessButtonFlag==1) { // Turn off the LCD and put it to sleep, it calls the function which are written below
Gaz142 0:e8b157a824e7 159 displayOff();
Gaz142 0:e8b157a824e7 160 lcd.clear();
Gaz142 0:e8b157a824e7 161 buzzer.nobeep();
Gaz142 0:e8b157a824e7 162 sleep();
Gaz142 0:e8b157a824e7 163 }
Gaz142 0:e8b157a824e7 164 }
Gaz142 0:e8b157a824e7 165 }
Gaz142 0:e8b157a824e7 166
Gaz142 0:e8b157a824e7 167 void celsius() // The function for the Celsius
Gaz142 0:e8b157a824e7 168 {
Gaz142 0:e8b157a824e7 169 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) // so can display a string of a maximum 14 characters in length // or create formatted strings - ensure they aren't more than 14 characters long
Gaz142 0:e8b157a824e7 170
Gaz142 0:e8b157a824e7 171 measurement = bmp180.readValues(); // read values (T in Celsius and P in mb) and print over serial port
Gaz142 0:e8b157a824e7 172 //wait(0.1); // short delau until next reading
Gaz142 0:e8b157a824e7 173
Gaz142 0:e8b157a824e7 174 int length = sprintf(buffer,"T = %.2f C",measurement.temperatureC); // print formatted data to buffer // it is important the format specifier ensures the length will fit in the buffer
Gaz142 0:e8b157a824e7 175 if (length <= 14) // if string will fit on display
Gaz142 0:e8b157a824e7 176 lcd.printString(buffer,0,1); // display on screen
Gaz142 0:e8b157a824e7 177
Gaz142 0:e8b157a824e7 178 length = sprintf(buffer,"P = %.2f mb",measurement.pressure);
Gaz142 0:e8b157a824e7 179 if (length <= 14)
Gaz142 0:e8b157a824e7 180 lcd.printString(buffer,0,2);
Gaz142 0:e8b157a824e7 181 lcd.refresh();
Gaz142 0:e8b157a824e7 182 }
Gaz142 0:e8b157a824e7 183
Gaz142 0:e8b157a824e7 184 void fahrenheit() // The function for the fahrenheit
Gaz142 0:e8b157a824e7 185 {
Gaz142 0:e8b157a824e7 186 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) // so can display a string of a maximum 14 characters in length // or create formatted strings - ensure they aren't more than 14 characters long
Gaz142 0:e8b157a824e7 187
Gaz142 0:e8b157a824e7 188 measurement = bmp180.readValues(); // read values (T in fahrenheit and P in mb) and print over serial port //serial.printf("T = %.2f F P = %.2f mb\n",measurement.temperature,measurement.pressure);
Gaz142 0:e8b157a824e7 189 //wait(0.1); // short delau until next reading
Gaz142 0:e8b157a824e7 190
Gaz142 0:e8b157a824e7 191 int length = sprintf(buffer,"T = %.2f F",measurement.temperatureF); // print formatted data to buffer // it is important the format specifier ensures the length will fit in the buffer
Gaz142 0:e8b157a824e7 192 if (length <= 14) // if string will fit on display
Gaz142 0:e8b157a824e7 193 lcd.printString(buffer,0,1); // display on screen
Gaz142 0:e8b157a824e7 194
Gaz142 0:e8b157a824e7 195 length = sprintf(buffer,"P = %.2f mb",measurement.pressure);
Gaz142 0:e8b157a824e7 196 if (length <= 14)
Gaz142 0:e8b157a824e7 197 lcd.printString(buffer,0,2);
Gaz142 0:e8b157a824e7 198 lcd.refresh();
Gaz142 0:e8b157a824e7 199 }
Gaz142 0:e8b157a824e7 200
Gaz142 0:e8b157a824e7 201 void eraseRAM() // Clear the RAM
Gaz142 0:e8b157a824e7 202 {
Gaz142 0:e8b157a824e7 203 int i;
Gaz142 0:e8b157a824e7 204 sce.write(0);
Gaz142 0:e8b157a824e7 205 for(i =0; i < 504; i++) {
Gaz142 0:e8b157a824e7 206 spi.write(0x00);
Gaz142 0:e8b157a824e7 207 }
Gaz142 0:e8b157a824e7 208
Gaz142 0:e8b157a824e7 209 }
Gaz142 0:e8b157a824e7 210
Gaz142 0:e8b157a824e7 211 void displayOn() // Turn on the display
Gaz142 0:e8b157a824e7 212 {
Gaz142 0:e8b157a824e7 213 setBrightness(1.0); // 100%
Gaz142 0:e8b157a824e7 214 pwr.write(1);
Gaz142 0:e8b157a824e7 215
Gaz142 0:e8b157a824e7 216 }
Gaz142 0:e8b157a824e7 217
Gaz142 0:e8b157a824e7 218 void displayOff() // Turn off the display
Gaz142 0:e8b157a824e7 219 {
Gaz142 0:e8b157a824e7 220 setBrightness(0.0); // 0%
Gaz142 0:e8b157a824e7 221 eraseRAM(); // calls the function
Gaz142 0:e8b157a824e7 222
Gaz142 0:e8b157a824e7 223 }
Gaz142 0:e8b157a824e7 224
Gaz142 0:e8b157a824e7 225 void setBrightness(float brightness) // set the brightness
Gaz142 0:e8b157a824e7 226 {
Gaz142 0:e8b157a824e7 227 if(brightness < 0.0) {
Gaz142 0:e8b157a824e7 228 brightness = 0.0;
Gaz142 0:e8b157a824e7 229 }
Gaz142 0:e8b157a824e7 230 if (brightness > 1.0) {
Gaz142 0:e8b157a824e7 231 brightness = 1.0;
Gaz142 0:e8b157a824e7 232 }
Gaz142 0:e8b157a824e7 233 led.write(brightness);
Gaz142 0:e8b157a824e7 234 }
Gaz142 0:e8b157a824e7 235
Gaz142 0:e8b157a824e7 236 void battreyIndicator(float voltageIn) // indicate the battrey life
Gaz142 0:e8b157a824e7 237 {
Gaz142 0:e8b157a824e7 238 if (voltageIn >=2.5) { // if the voltage equal or larger than 2.5V the green LED will light
Gaz142 0:e8b157a824e7 239 led2 =0;
Gaz142 0:e8b157a824e7 240 led1 =1;
Gaz142 0:e8b157a824e7 241 }
Gaz142 0:e8b157a824e7 242 if (voltageIn <=2.5) { // if the voltage equal or smaller than 2.5V the red LED will light
Gaz142 0:e8b157a824e7 243 led1= 0;
Gaz142 0:e8b157a824e7 244 led2= 1;
Gaz142 0:e8b157a824e7 245 }
Gaz142 0:e8b157a824e7 246 }
Gaz142 0:e8b157a824e7 247
Gaz142 0:e8b157a824e7 248
Gaz142 0:e8b157a824e7 249 void ISR()
Gaz142 0:e8b157a824e7 250 {
Gaz142 0:e8b157a824e7 251 serial.gets(xString,16);
Gaz142 0:e8b157a824e7 252 registerTimeFlag = 1;
Gaz142 0:e8b157a824e7 253 }
Gaz142 0:e8b157a824e7 254 // Writing
Gaz142 0:e8b157a824e7 255 void dataWrite(float Measurement)
Gaz142 0:e8b157a824e7 256 {
Gaz142 0:e8b157a824e7 257
Gaz142 0:e8b157a824e7 258 char buffer[30]; // store time
Gaz142 0:e8b157a824e7 259 time_t seconds = time(NULL); // get time
Gaz142 0:e8b157a824e7 260 // time and date
Gaz142 0:e8b157a824e7 261 strftime(buffer, 30 , "%X %D", localtime(&seconds));
Gaz142 0:e8b157a824e7 262
Gaz142 0:e8b157a824e7 263 FILE *fp = fopen("/local/log.csv", "a"); // open log
Gaz142 0:e8b157a824e7 264 // Create file
Gaz142 0:e8b157a824e7 265 fprintf(fp,"%f,%s\n",measurement.temperatureC, buffer); // print string to file
Gaz142 0:e8b157a824e7 266 fclose(fp); // Close it
Gaz142 0:e8b157a824e7 267 }
Gaz142 0:e8b157a824e7 268
Gaz142 0:e8b157a824e7 269 // Incase of error
Gaz142 0:e8b157a824e7 270 void error(int code)
Gaz142 0:e8b157a824e7 271 {
Gaz142 0:e8b157a824e7 272 while(1) {
Gaz142 0:e8b157a824e7 273 leds = 0;
Gaz142 0:e8b157a824e7 274 wait(0.25);
Gaz142 0:e8b157a824e7 275 leds = code;
Gaz142 0:e8b157a824e7 276 wait(0.25);
Gaz142 0:e8b157a824e7 277 }
Gaz142 0:e8b157a824e7 278 }
Gaz142 0:e8b157a824e7 279
Gaz142 0:e8b157a824e7 280 // register Temperature
Gaz142 0:e8b157a824e7 281 void stop()
Gaz142 0:e8b157a824e7 282 {
Gaz142 0:e8b157a824e7 283 serial.printf("T = %f C\n",measurement.temperatureC); // Show temp value
Gaz142 0:e8b157a824e7 284 dataWrite(measurement.temperatureC); // write temp value
Gaz142 0:e8b157a824e7 285 }
Gaz142 0:e8b157a824e7 286
Gaz142 0:e8b157a824e7 287 void registerTime()
Gaz142 0:e8b157a824e7 288 {
Gaz142 0:e8b157a824e7 289 // register the time for debugging purposes
Gaz142 0:e8b157a824e7 290 serial.printf("set_time - %s",xString);
Gaz142 0:e8b157a824e7 291 // String -> integer
Gaz142 0:e8b157a824e7 292 int time = atoi(xString);
Gaz142 0:e8b157a824e7 293 set_time(time);
Gaz142 0:e8b157a824e7 294 }
Gaz142 0:e8b157a824e7 295
Gaz142 0:e8b157a824e7 296 // Time
Gaz142 0:e8b157a824e7 297 void timeChange()
Gaz142 0:e8b157a824e7 298 {
Gaz142 0:e8b157a824e7 299 char buffer[30]; // store time
Gaz142 0:e8b157a824e7 300 time_t seconds = time(NULL); // get current time
Gaz142 0:e8b157a824e7 301 // format to string
Gaz142 0:e8b157a824e7 302 strftime(buffer, 30 , "%X %D", localtime(&seconds));
Gaz142 0:e8b157a824e7 303 // serial
Gaz142 0:e8b157a824e7 304 serial.printf("Time = %s\n",buffer);
Gaz142 0:e8b157a824e7 305 }