Temperature and Pressure Logger
Dependencies: BMP180 N5110 PowerControl mbed
main.h@0:ab353447a5d6, 2015-05-11 (annotated)
- Committer:
- Chakweza
- Date:
- Mon May 11 20:36:26 2015 +0000
- Revision:
- 0:ab353447a5d6
Rev1
Who changed what in which revision?
User | Revision | Line number | New 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 |