Temperature and Pressure Logger

Dependencies:   BMP180 N5110 PowerControl mbed

Committer:
Chakweza
Date:
Mon May 11 20:36:26 2015 +0000
Revision:
0:ab353447a5d6
Rev1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Chakweza 0:ab353447a5d6 1 /**
Chakweza 0:ab353447a5d6 2 @file main.cpp
Chakweza 0:ab353447a5d6 3
Chakweza 0:ab353447a5d6 4 @brief Program Implementation
Chakweza 0:ab353447a5d6 5
Chakweza 0:ab353447a5d6 6 */
Chakweza 0:ab353447a5d6 7 #include "mbed.h"
Chakweza 0:ab353447a5d6 8 #include "N5110.h"
Chakweza 0:ab353447a5d6 9 #include "BMP180.h"
Chakweza 0:ab353447a5d6 10 #include "PowerControl/PowerControl.h"
Chakweza 0:ab353447a5d6 11 #include "PowerControl/EthernetPowerControl.h"
Chakweza 0:ab353447a5d6 12
Chakweza 0:ab353447a5d6 13 ///NOKIA SCREEN
Chakweza 0:ab353447a5d6 14 /// VCC,SCE,RST,D/C,MOSI,SCLK,LED
Chakweza 0:ab353447a5d6 15 N5110 lcd(p7,p8,p9,p10,p11,p13,p26);
Chakweza 0:ab353447a5d6 16
Chakweza 0:ab353447a5d6 17 char timeBuffer[14]; /// buffer used to store time string
Chakweza 0:ab353447a5d6 18
Chakweza 0:ab353447a5d6 19 void Sleep();///Put to sleep
Chakweza 0:ab353447a5d6 20
Chakweza 0:ab353447a5d6 21 void turnOff();///Turn off
Chakweza 0:ab353447a5d6 22
Chakweza 0:ab353447a5d6 23
Chakweza 0:ab353447a5d6 24 void startscreen()///Display start screen
Chakweza 0:ab353447a5d6 25
Chakweza 0:ab353447a5d6 26 {
Chakweza 0:ab353447a5d6 27 lcd.printString("Welcome",15,1); ///Print on screen
Chakweza 0:ab353447a5d6 28 lcd.printString("To",20,2);
Chakweza 0:ab353447a5d6 29 lcd.printString("My",6,3);
Chakweza 0:ab353447a5d6 30 lcd.printString("T & P logger",0,5);
Chakweza 0:ab353447a5d6 31 }
Chakweza 0:ab353447a5d6 32
Chakweza 0:ab353447a5d6 33 ///TEMPERATURE & PRESSURE SENSOR
Chakweza 0:ab353447a5d6 34 BMP180 bmp180(p28,p27); /// SDA, SCL
Chakweza 0:ab353447a5d6 35
Chakweza 0:ab353447a5d6 36 char buffer[14];///Character length
Chakweza 0:ab353447a5d6 37
Chakweza 0:ab353447a5d6 38 ///BUZZER
Chakweza 0:ab353447a5d6 39 PwmOut buzzer (p21);
Chakweza 0:ab353447a5d6 40
Chakweza 0:ab353447a5d6 41 ///LEDS
Chakweza 0:ab353447a5d6 42 DigitalOut greenled(p24);
Chakweza 0:ab353447a5d6 43 DigitalOut redled(p23);
Chakweza 0:ab353447a5d6 44
Chakweza 0:ab353447a5d6 45 ///POTENTIOMETER FOR BACKLIGHT CONTROL
Chakweza 0:ab353447a5d6 46 AnalogIn pot(p18);
Chakweza 0:ab353447a5d6 47 PwmOut backlight(p26);
Chakweza 0:ab353447a5d6 48
Chakweza 0:ab353447a5d6 49 ///INTERRUPT
Chakweza 0:ab353447a5d6 50 InterruptIn button(p17); ///Sleep button
Chakweza 0:ab353447a5d6 51 int buttonFlag = 0;///Button Flag
Chakweza 0:ab353447a5d6 52 ///Interrupt Service Routine
Chakweza 0:ab353447a5d6 53 void buttonPressed()
Chakweza 0:ab353447a5d6 54 {
Chakweza 0:ab353447a5d6 55 buttonFlag = 1; ///set flag
Chakweza 0:ab353447a5d6 56 }
Chakweza 0:ab353447a5d6 57
Chakweza 0:ab353447a5d6 58
Chakweza 0:ab353447a5d6 59 int main()
Chakweza 0:ab353447a5d6 60 {
Chakweza 0:ab353447a5d6 61 ///set_time(1430942878); /// initialise time to 1st January 1970
Chakweza 0:ab353447a5d6 62 button.rise(&buttonPressed); ///event generated on rising edge
Chakweza 0:ab353447a5d6 63
Chakweza 0:ab353447a5d6 64 int result();
Chakweza 0:ab353447a5d6 65 PHY_PowerDown(); /// Power down Ethernet interface
Chakweza 0:ab353447a5d6 66
Chakweza 0:ab353447a5d6 67
Chakweza 0:ab353447a5d6 68 /// Normal mbed power level for this setup is around 690mW
Chakweza 0:ab353447a5d6 69 ///assuming 5V used on Vin pin
Chakweza 0:ab353447a5d6 70 /// If you don't need networking...
Chakweza 0:ab353447a5d6 71 /// Power down Ethernet interface - saves around 175mW
Chakweza 0:ab353447a5d6 72 /// Also need to unplug network cable - just a cable sucks power
Chakweza 0:ab353447a5d6 73
Chakweza 0:ab353447a5d6 74
Chakweza 0:ab353447a5d6 75 lcd.init(); /// initialise display
Chakweza 0:ab353447a5d6 76 wait(2); /// 2 second delay
Chakweza 0:ab353447a5d6 77 lcd.clear();/// Clears display
Chakweza 0:ab353447a5d6 78 startscreen();
Chakweza 0:ab353447a5d6 79 wait(5); ///5 second delay
Chakweza 0:ab353447a5d6 80 lcd.clear();
Chakweza 0:ab353447a5d6 81
Chakweza 0:ab353447a5d6 82
Chakweza 0:ab353447a5d6 83 /// initiliase barometer
Chakweza 0:ab353447a5d6 84 bmp180.init();
Chakweza 0:ab353447a5d6 85
Chakweza 0:ab353447a5d6 86 int temperature = 27;
Chakweza 0:ab353447a5d6 87 int length = sprintf(buffer,"T = %2d C",temperature); /// print formatted data to buffer
Chakweza 0:ab353447a5d6 88 ///it is important the format specifier ensures the length will fit in the buffer
Chakweza 0:ab353447a5d6 89 if (length <= 14) /// if string will fit on display
Chakweza 0:ab353447a5d6 90
Chakweza 0:ab353447a5d6 91 lcd.printString(buffer,0,1); /// display on screen
Chakweza 0:ab353447a5d6 92
Chakweza 0:ab353447a5d6 93
Chakweza 0:ab353447a5d6 94
Chakweza 0:ab353447a5d6 95 Measurement measurement; /// measurement structure declared in BMP180 class
Chakweza 0:ab353447a5d6 96
Chakweza 0:ab353447a5d6 97 buzzer.period(1.0/50.0); ///50Hz period // higher frequency drains power
Chakweza 0:ab353447a5d6 98
Chakweza 0:ab353447a5d6 99 while(1) {
Chakweza 0:ab353447a5d6 100
Chakweza 0:ab353447a5d6 101 time_t seconds = time(NULL); /// get current time
Chakweza 0:ab353447a5d6 102 /// format time into a string (time)
Chakweza 0:ab353447a5d6 103 strftime(timeBuffer, 14 , "%X", localtime(&seconds));
Chakweza 0:ab353447a5d6 104
Chakweza 0:ab353447a5d6 105
Chakweza 0:ab353447a5d6 106
Chakweza 0:ab353447a5d6 107 lcd.printString("Weather Today",0,0);///print at 0,0)
Chakweza 0:ab353447a5d6 108
Chakweza 0:ab353447a5d6 109 char buffer[14]; /// each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
Chakweza 0:ab353447a5d6 110 /// so can display a string of a maximum 14 characters in length
Chakweza 0:ab353447a5d6 111 /// or create formatted strings - ensure they aren't more than 14 characters long
Chakweza 0:ab353447a5d6 112 int temperature = measurement.temperature;
Chakweza 0:ab353447a5d6 113
Chakweza 0:ab353447a5d6 114 backlight = 1.0 - pot;
Chakweza 0:ab353447a5d6 115
Chakweza 0:ab353447a5d6 116 ///LEDS & BUZZER THRESHOLDS///
Chakweza 0:ab353447a5d6 117
Chakweza 0:ab353447a5d6 118 if (measurement.temperature > 27) { ///if temperature is greater than 28deg
Chakweza 0:ab353447a5d6 119 redled = 1;///led on
Chakweza 0:ab353447a5d6 120 greenled = 0;///led off
Chakweza 0:ab353447a5d6 121 buzzer = 0.5;/// high temp alarm using PWM
Chakweza 0:ab353447a5d6 122 }
Chakweza 0:ab353447a5d6 123
Chakweza 0:ab353447a5d6 124 else if (measurement.temperature < 27) { ///if temperature is less than 28deg
Chakweza 0:ab353447a5d6 125 redled = 0;///led off
Chakweza 0:ab353447a5d6 126 greenled = 1;///led on
Chakweza 0:ab353447a5d6 127 buzzer = 0.0;///buzzer off
Chakweza 0:ab353447a5d6 128 }
Chakweza 0:ab353447a5d6 129
Chakweza 0:ab353447a5d6 130
Chakweza 0:ab353447a5d6 131
Chakweza 0:ab353447a5d6 132
Chakweza 0:ab353447a5d6 133 int length = sprintf(buffer,"T = %2d C",temperature); /// print formatted data to buffer
Chakweza 0:ab353447a5d6 134 /// it is important the format specifier ensures the length will fit in the buffer
Chakweza 0:ab353447a5d6 135 if (length <= 14) /// if string will fit on display
Chakweza 0:ab353447a5d6 136 lcd.printString(buffer,0,1); /// display on screen
Chakweza 0:ab353447a5d6 137
Chakweza 0:ab353447a5d6 138 float pressure = measurement.pressure; /// same idea with floats
Chakweza 0:ab353447a5d6 139 length = sprintf(buffer,"P = %.2f mb",pressure);///print formatted data to buffer
Chakweza 0:ab353447a5d6 140
Chakweza 0:ab353447a5d6 141
Chakweza 0:ab353447a5d6 142 if (length <= 14)
Chakweza 0:ab353447a5d6 143 lcd.printString(buffer,0,2);///print
Chakweza 0:ab353447a5d6 144 lcd.printString(timeBuffer,0,3);///print
Chakweza 0:ab353447a5d6 145
Chakweza 0:ab353447a5d6 146
Chakweza 0:ab353447a5d6 147 /// read values (T in Celsius and P in mb) and print over serial port
Chakweza 0:ab353447a5d6 148 measurement = bmp180.readValues();
Chakweza 0:ab353447a5d6 149
Chakweza 0:ab353447a5d6 150 wait(1.0); /// 1 second until next reading
Chakweza 0:ab353447a5d6 151
Chakweza 0:ab353447a5d6 152 lcd.printString("Press But1",0,4); ///print
Chakweza 0:ab353447a5d6 153 lcd.printString("to sleep/wake",0,5);///print
Chakweza 0:ab353447a5d6 154
Chakweza 0:ab353447a5d6 155 /// BUTTON INTERRUPT///
Chakweza 0:ab353447a5d6 156 if (buttonFlag) { ///if flag is set
Chakweza 0:ab353447a5d6 157 buttonFlag = 0; /// reset flag
Chakweza 0:ab353447a5d6 158 greenled = 0; /// turn off greenled
Chakweza 0:ab353447a5d6 159 redled = 0; /// turn off redled
Chakweza 0:ab353447a5d6 160 buzzer = 0.0; /// turn off buzzer
Chakweza 0:ab353447a5d6 161 lcd.turnOff(); /// turn off lcd
Chakweza 0:ab353447a5d6 162
Chakweza 0:ab353447a5d6 163 while (1) {
Chakweza 0:ab353447a5d6 164 if (buttonFlag) { ///if flag is set
Chakweza 0:ab353447a5d6 165 buttonFlag = 0; /// reset flag
Chakweza 0:ab353447a5d6 166 lcd.init(); ///Initialise display
Chakweza 0:ab353447a5d6 167 break;
Chakweza 0:ab353447a5d6 168 }
Chakweza 0:ab353447a5d6 169 Sleep(); // put to sleep until next interrupt
Chakweza 0:ab353447a5d6 170 }
Chakweza 0:ab353447a5d6 171
Chakweza 0:ab353447a5d6 172 }
Chakweza 0:ab353447a5d6 173
Chakweza 0:ab353447a5d6 174 }
Chakweza 0:ab353447a5d6 175
Chakweza 0:ab353447a5d6 176
Chakweza 0:ab353447a5d6 177 }