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

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
el13akr
Date:
Wed Apr 29 13:59:21 2015 +0000
Revision:
0:c2a88630fb72
Child:
1:026d80a2f7a9
29/04/15 - basic temperature and pressure displayed - no menu

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 0:c2a88630fb72 32 if (POT<(1.0/2.0)) {
el13akr 0:c2a88630fb72 33 lcd.printString("Temperature",15,3);
el13akr 0:c2a88630fb72 34 lcd.printString(">",76,3);
el13akr 0:c2a88630fb72 35 lcd.printString("Graph",6,6);
el13akr 0:c2a88630fb72 36 lcd.printString("Current",42,6);
el13akr 0:c2a88630fb72 37
el13akr 0:c2a88630fb72 38 } else {
el13akr 0:c2a88630fb72 39 lcd.printString("Pressure",18,3);
el13akr 0:c2a88630fb72 40 lcd.printString("<",2,3);
el13akr 0:c2a88630fb72 41 lcd.printString("Graph",6,6);
el13akr 0:c2a88630fb72 42 lcd.printString("Current",42,6);
el13akr 0:c2a88630fb72 43
el13akr 0:c2a88630fb72 44 }
el13akr 0:c2a88630fb72 45 }
el13akr 0:c2a88630fb72 46
el13akr 0:c2a88630fb72 47 void timerExpired(){
el13akr 0:c2a88630fb72 48 timerFlag = 1 ;
el13akr 0:c2a88630fb72 49 }
el13akr 0:c2a88630fb72 50
el13akr 0:c2a88630fb72 51 void timeOutStopped(){
el13akr 0:c2a88630fb72 52
el13akr 0:c2a88630fb72 53 timeOutFlag = 1;
el13akr 0:c2a88630fb72 54 }
el13akr 0:c2a88630fb72 55
el13akr 0:c2a88630fb72 56 void recieveData()
el13akr 0:c2a88630fb72 57 {
el13akr 0:c2a88630fb72 58
el13akr 0:c2a88630fb72 59 Measurement measurement; // measurement structure declared in BMP180 class
el13akr 0:c2a88630fb72 60
el13akr 0:c2a88630fb72 61 // read values (T in Celsius and P in mb) and print over serial port
el13akr 0:c2a88630fb72 62 measurement = bmp180.readValues();
el13akr 0:c2a88630fb72 63 serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure);
el13akr 0:c2a88630fb72 64
el13akr 0:c2a88630fb72 65 temperature = measurement.temperature ;
el13akr 0:c2a88630fb72 66 pressure = measurement.pressure ;
el13akr 0:c2a88630fb72 67
el13akr 0:c2a88630fb72 68 }
el13akr 0:c2a88630fb72 69
el13akr 0:c2a88630fb72 70
el13akr 0:c2a88630fb72 71 void displayData()
el13akr 0:c2a88630fb72 72 {
el13akr 0:c2a88630fb72 73
el13akr 0:c2a88630fb72 74 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el13akr 0:c2a88630fb72 75 // so can display a string of a maximum 14 characters in length
el13akr 0:c2a88630fb72 76 // or create formatted strings - ensure they aren't more than 14 characters long
el13akr 0:c2a88630fb72 77 int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer
el13akr 0:c2a88630fb72 78 // it is important the format specifier ensures the length will fit in the buffer
el13akr 0:c2a88630fb72 79 if (length <= 14) // if string will fit on display
el13akr 0:c2a88630fb72 80 lcd.printString(buffer,0,1); // display on screen
el13akr 0:c2a88630fb72 81 length = sprintf(buffer,"P = %.2f mb",pressure);
el13akr 0:c2a88630fb72 82 if (length <= 14)
el13akr 0:c2a88630fb72 83 lcd.printString(buffer,0,2);
el13akr 0:c2a88630fb72 84
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 int main()
el13akr 0:c2a88630fb72 92 {
el13akr 0:c2a88630fb72 93 // first need to initialise display
el13akr 0:c2a88630fb72 94 lcd.init();
el13akr 0:c2a88630fb72 95 // initiliase barometer
el13akr 0:c2a88630fb72 96 bmp180.init();
el13akr 0:c2a88630fb72 97 timer.attach (&timerExpired , 1.0);
el13akr 0:c2a88630fb72 98 timeOut.attach (&timeOutStopped , 2.0);
el13akr 0:c2a88630fb72 99 screen();
el13akr 0:c2a88630fb72 100 while(1) {
el13akr 0:c2a88630fb72 101 if (timeOutFlag ==1 ){
el13akr 0:c2a88630fb72 102 if (timerFlag ==1){
el13akr 0:c2a88630fb72 103 timerFlag = 0;
el13akr 0:c2a88630fb72 104 lcd.clear();
el13akr 0:c2a88630fb72 105 recieveData();
el13akr 0:c2a88630fb72 106 displayData();
el13akr 0:c2a88630fb72 107 // menu();
el13akr 0:c2a88630fb72 108 }
el13akr 0:c2a88630fb72 109 }
el13akr 0:c2a88630fb72 110 }
el13akr 0:c2a88630fb72 111 }