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