Program to display temperature and pressure readings along with date and time.

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
el13akr
Date:
Wed Apr 29 14:21:02 2015 +0000
Revision:
1:026d80a2f7a9
Parent:
0:c2a88630fb72
Child:
2:63ef0a1afcbe
menu works but buttons don't do anything yet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el13akr 0:c2a88630fb72 1 #include "mbed.h"
el13akr 0:c2a88630fb72 2 #include "N5110.h"
el13akr 0:c2a88630fb72 3 #include "BMP180.h"
el13akr 0:c2a88630fb72 4
el13akr 0:c2a88630fb72 5 // VCC,SCE,RST,D/C,MOSI,SCLK,LED
el13akr 0:c2a88630fb72 6 N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
el13akr 0:c2a88630fb72 7 // Can also power (VCC) directly from VOUT (3.3 V) -
el13akr 0:c2a88630fb72 8 // Can give better performance due to current limitation from GPIO pin
el13akr 0:c2a88630fb72 9
el13akr 0:c2a88630fb72 10 Ticker timer ; //create a ticker object to read the data from the sensor
el13akr 0:c2a88630fb72 11 Timeout timeOut ;
el13akr 0:c2a88630fb72 12 BMP180 bmp180(p28,p27);
el13akr 0:c2a88630fb72 13 Serial serial(USBTX,USBRX);
el13akr 0:c2a88630fb72 14 AnalogIn POT(p20);
el13akr 0:c2a88630fb72 15
el13akr 0:c2a88630fb72 16 int timerFlag= 0;
el13akr 0:c2a88630fb72 17 int timeOutFlag = 0 ;
el13akr 0:c2a88630fb72 18 int temperature ;
el13akr 0:c2a88630fb72 19 float pressure;
el13akr 0:c2a88630fb72 20
el13akr 0:c2a88630fb72 21
el13akr 0:c2a88630fb72 22 void screen()
el13akr 0:c2a88630fb72 23 {
el13akr 0:c2a88630fb72 24 lcd.printString("Weather Logger",0,2);
el13akr 0:c2a88630fb72 25 lcd.printString("3000",32,3);
el13akr 0:c2a88630fb72 26 lcd.printString("Alex Raper",15,5);
el13akr 0:c2a88630fb72 27 lcd.refresh();
el13akr 0:c2a88630fb72 28 }
el13akr 0:c2a88630fb72 29
el13akr 0:c2a88630fb72 30 void menu()
el13akr 0:c2a88630fb72 31 {
el13akr 1:026d80a2f7a9 32 lcd.clear();
el13akr 1:026d80a2f7a9 33 if (POT>(1.0/2.0)) {
el13akr 1:026d80a2f7a9 34 lcd.printString("Temperature",2,2);
el13akr 1:026d80a2f7a9 35 lcd.printString(">",76,2);
el13akr 1:026d80a2f7a9 36 lcd.printString("Graph",0,5);
el13akr 1:026d80a2f7a9 37 lcd.printString("Current",42,5);
el13akr 0:c2a88630fb72 38
el13akr 0:c2a88630fb72 39 } else {
el13akr 1:026d80a2f7a9 40 lcd.printString("Pressure",18,2);
el13akr 1:026d80a2f7a9 41 lcd.printString("<",2,2);
el13akr 1:026d80a2f7a9 42 lcd.printString("Graph",0,5);
el13akr 1:026d80a2f7a9 43 lcd.printString("Current",42,5);
el13akr 0:c2a88630fb72 44
el13akr 0:c2a88630fb72 45 }
el13akr 0:c2a88630fb72 46 }
el13akr 0:c2a88630fb72 47
el13akr 0:c2a88630fb72 48 void timerExpired(){
el13akr 0:c2a88630fb72 49 timerFlag = 1 ;
el13akr 0:c2a88630fb72 50 }
el13akr 0:c2a88630fb72 51
el13akr 0:c2a88630fb72 52 void timeOutStopped(){
el13akr 0:c2a88630fb72 53
el13akr 0:c2a88630fb72 54 timeOutFlag = 1;
el13akr 0:c2a88630fb72 55 }
el13akr 0:c2a88630fb72 56
el13akr 0:c2a88630fb72 57 void recieveData()
el13akr 0:c2a88630fb72 58 {
el13akr 0:c2a88630fb72 59
el13akr 0:c2a88630fb72 60 Measurement measurement; // measurement structure declared in BMP180 class
el13akr 0:c2a88630fb72 61
el13akr 0:c2a88630fb72 62 // read values (T in Celsius and P in mb) and print over serial port
el13akr 0:c2a88630fb72 63 measurement = bmp180.readValues();
el13akr 0:c2a88630fb72 64 serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
el13akr 0:c2a88630fb72 65
el13akr 0:c2a88630fb72 66 temperature = measurement.temperature ;
el13akr 0:c2a88630fb72 67 pressure = measurement.pressure ;
el13akr 0:c2a88630fb72 68
el13akr 0:c2a88630fb72 69 }
el13akr 0:c2a88630fb72 70
el13akr 0:c2a88630fb72 71
el13akr 0:c2a88630fb72 72 void displayData()
el13akr 0:c2a88630fb72 73 {
el13akr 0:c2a88630fb72 74
el13akr 0:c2a88630fb72 75 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el13akr 0:c2a88630fb72 76 // so can display a string of a maximum 14 characters in length
el13akr 0:c2a88630fb72 77 // or create formatted strings - ensure they aren't more than 14 characters long
el13akr 0:c2a88630fb72 78 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
el13akr 0:c2a88630fb72 79 // it is important the format specifier ensures the length will fit in the buffer
el13akr 0:c2a88630fb72 80 if (length <= 14) // if string will fit on display
el13akr 0:c2a88630fb72 81 lcd.printString(buffer,0,1); // display on screen
el13akr 0:c2a88630fb72 82 length = sprintf(buffer,"P = %.2f mb",pressure);
el13akr 0:c2a88630fb72 83 if (length <= 14)
el13akr 0:c2a88630fb72 84 lcd.printString(buffer,0,2);
el13akr 0:c2a88630fb72 85
el13akr 0:c2a88630fb72 86 }
el13akr 0:c2a88630fb72 87
el13akr 0:c2a88630fb72 88
el13akr 0:c2a88630fb72 89
el13akr 0:c2a88630fb72 90
el13akr 0:c2a88630fb72 91
el13akr 0:c2a88630fb72 92 int main()
el13akr 0:c2a88630fb72 93 {
el13akr 0:c2a88630fb72 94 // first need to initialise display
el13akr 0:c2a88630fb72 95 lcd.init();
el13akr 0:c2a88630fb72 96 // initiliase barometer
el13akr 0:c2a88630fb72 97 bmp180.init();
el13akr 0:c2a88630fb72 98 timer.attach (&timerExpired , 1.0);
el13akr 0:c2a88630fb72 99 timeOut.attach (&timeOutStopped , 2.0);
el13akr 0:c2a88630fb72 100 screen();
el13akr 1:026d80a2f7a9 101
el13akr 0:c2a88630fb72 102 while(1) {
el13akr 0:c2a88630fb72 103 if (timeOutFlag ==1 ){
el13akr 1:026d80a2f7a9 104
el13akr 1:026d80a2f7a9 105 menu();
el13akr 1:026d80a2f7a9 106
el13akr 1:026d80a2f7a9 107
el13akr 1:026d80a2f7a9 108
el13akr 1:026d80a2f7a9 109 // if (timerFlag ==1){
el13akr 1:026d80a2f7a9 110 // timerFlag = 0;
el13akr 1:026d80a2f7a9 111 // lcd.clear();
el13akr 1:026d80a2f7a9 112 // recieveData();
el13akr 1:026d80a2f7a9 113 // displayData();
el13akr 1:026d80a2f7a9 114 // // menu();
el13akr 1:026d80a2f7a9 115 // }
el13akr 0:c2a88630fb72 116 }
el13akr 0:c2a88630fb72 117 }
el13akr 0:c2a88630fb72 118 }