Program to display temperature and pressure readings along with date and time.
Dependencies: BMP180 N5110 PowerControl mbed
Diff: main.cpp
- Revision:
- 0:c2a88630fb72
- Child:
- 1:026d80a2f7a9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 29 13:59:21 2015 +0000 @@ -0,0 +1,111 @@ +#include "mbed.h" +#include "N5110.h" +#include "BMP180.h" + +// VCC,SCE,RST,D/C,MOSI,SCLK,LED +N5110 lcd(p7,p8,p9,p10,p11,p13,p26); +// Can also power (VCC) directly from VOUT (3.3 V) - +// Can give better performance due to current limitation from GPIO pin + +Ticker timer ; //create a ticker object to read the data from the sensor +Timeout timeOut ; +BMP180 bmp180(p28,p27); +Serial serial(USBTX,USBRX); +AnalogIn POT(p20); + +int timerFlag= 0; +int timeOutFlag = 0 ; +int temperature ; +float pressure; + + +void screen() +{ + lcd.printString("Weather Logger",0,2); + lcd.printString("3000",32,3); + lcd.printString("Alex Raper",15,5); + lcd.refresh(); +} + +void menu() +{ + if (POT<(1.0/2.0)) { + lcd.printString("Temperature",15,3); + lcd.printString(">",76,3); + lcd.printString("Graph",6,6); + lcd.printString("Current",42,6); + + } else { + lcd.printString("Pressure",18,3); + lcd.printString("<",2,3); + lcd.printString("Graph",6,6); + lcd.printString("Current",42,6); + + } +} + +void timerExpired(){ + timerFlag = 1 ; +} + +void timeOutStopped(){ + + timeOutFlag = 1; + } + +void recieveData() +{ + + Measurement measurement; // measurement structure declared in BMP180 class + + // read values (T in Celsius and P in mb) and print over serial port + measurement = bmp180.readValues(); + serial.printf("T = %.2f C P = %.2f mb\n",measurement.temperature,measurement.pressure); + + temperature = measurement.temperature ; + pressure = measurement.pressure ; + +} + + +void displayData() +{ + + 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 + int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer + // it is important the format specifier ensures the length will fit in the buffer + if (length <= 14) // if string will fit on display + lcd.printString(buffer,0,1); // display on screen + length = sprintf(buffer,"P = %.2f mb",pressure); + if (length <= 14) + lcd.printString(buffer,0,2); + +} + + + + + +int main() +{ + // first need to initialise display + lcd.init(); + // initiliase barometer + bmp180.init(); + timer.attach (&timerExpired , 1.0); + timeOut.attach (&timeOutStopped , 2.0); + screen(); + while(1) { + if (timeOutFlag ==1 ){ + if (timerFlag ==1){ + timerFlag = 0; + lcd.clear(); + recieveData(); + displayData(); + // menu(); + } + } + } +}