A simple example temperature/humidy sensor with LCD display using: DHT11 & Robot LCD 1602
Dependencies: DHT TextLCD mbed
Fork of DHT11-HelloWorld by
main.cpp@1:f31d081b628c, 2016-01-25 (annotated)
- Committer:
- MrBedfordVan
- Date:
- Mon Jan 25 15:36:49 2016 +0000
- Revision:
- 1:f31d081b628c
- Parent:
- 0:3b6dd029d50c
Example code to use LCD with a temperature sensor
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kaizen | 0:3b6dd029d50c | 1 | #include "mbed.h" |
kaizen | 0:3b6dd029d50c | 2 | #include "DHT.h" |
MrBedfordVan | 1:f31d081b628c | 3 | #include "TextLCD.h" // LCD1602 |
kaizen | 0:3b6dd029d50c | 4 | |
MrBedfordVan | 1:f31d081b628c | 5 | DHT sensor(PA_11, DHT11); |
MrBedfordVan | 1:f31d081b628c | 6 | Serial pc(SERIAL_TX, SERIAL_RX); |
kaizen | 0:3b6dd029d50c | 7 | |
MrBedfordVan | 1:f31d081b628c | 8 | // LCD pins |
MrBedfordVan | 1:f31d081b628c | 9 | TextLCD lcd(D8, D9, D4, D5, D6, D7); |
MrBedfordVan | 1:f31d081b628c | 10 | AnalogIn keys(A0); |
MrBedfordVan | 1:f31d081b628c | 11 | |
MrBedfordVan | 1:f31d081b628c | 12 | // diplay text on LCD |
MrBedfordVan | 1:f31d081b628c | 13 | void textLCD(char *text, int line) { |
MrBedfordVan | 1:f31d081b628c | 14 | char tmpBuf[16]; |
MrBedfordVan | 1:f31d081b628c | 15 | for (int i = 0; i < 16; i++) tmpBuf[i] = 0x20; |
MrBedfordVan | 1:f31d081b628c | 16 | for (int i = 0; i < strlen(text); i++) { |
MrBedfordVan | 1:f31d081b628c | 17 | if (i < 16) tmpBuf[i] = text[i]; |
MrBedfordVan | 1:f31d081b628c | 18 | } |
MrBedfordVan | 1:f31d081b628c | 19 | |
MrBedfordVan | 1:f31d081b628c | 20 | lcd.locate(0, line); |
MrBedfordVan | 1:f31d081b628c | 21 | lcd.printf(tmpBuf); |
MrBedfordVan | 1:f31d081b628c | 22 | } |
MrBedfordVan | 1:f31d081b628c | 23 | |
MrBedfordVan | 1:f31d081b628c | 24 | |
kaizen | 0:3b6dd029d50c | 25 | int main() |
kaizen | 0:3b6dd029d50c | 26 | { |
kaizen | 0:3b6dd029d50c | 27 | int error = 0; |
kaizen | 0:3b6dd029d50c | 28 | float h = 0.0f, c = 0.0f, f = 0.0f, k = 0.0f, dp = 0.0f, dpf = 0.0f; |
MrBedfordVan | 1:f31d081b628c | 29 | pc.baud(9600); |
MrBedfordVan | 1:f31d081b628c | 30 | lcd.cls(); |
MrBedfordVan | 1:f31d081b628c | 31 | char tmpString[16]; |
MrBedfordVan | 1:f31d081b628c | 32 | char tmpString2[16]; |
MrBedfordVan | 1:f31d081b628c | 33 | int iKey = 0; |
MrBedfordVan | 1:f31d081b628c | 34 | int oldiKey = 0; |
MrBedfordVan | 1:f31d081b628c | 35 | int temp_format = 0; |
MrBedfordVan | 1:f31d081b628c | 36 | int humid_format = 0; |
MrBedfordVan | 1:f31d081b628c | 37 | |
kaizen | 0:3b6dd029d50c | 38 | while(1) { |
MrBedfordVan | 1:f31d081b628c | 39 | iKey = keys.read_u16(); |
MrBedfordVan | 1:f31d081b628c | 40 | if (iKey != oldiKey) { // button press |
MrBedfordVan | 1:f31d081b628c | 41 | oldiKey = iKey; |
MrBedfordVan | 1:f31d081b628c | 42 | if ((iKey >= 0) &&(iKey < 0x1800)) { // right |
MrBedfordVan | 1:f31d081b628c | 43 | temp_format++; |
MrBedfordVan | 1:f31d081b628c | 44 | if (temp_format == 3) temp_format = 0; |
MrBedfordVan | 1:f31d081b628c | 45 | } else if ((iKey >= 0x8000) && (iKey < 0xc000)) { // left |
MrBedfordVan | 1:f31d081b628c | 46 | humid_format++; |
MrBedfordVan | 1:f31d081b628c | 47 | if (humid_format == 3) humid_format = 0; |
MrBedfordVan | 1:f31d081b628c | 48 | } |
MrBedfordVan | 1:f31d081b628c | 49 | //} else if ((iKey >= 0x1800) && (iKey < 0x5000)) { // up |
MrBedfordVan | 1:f31d081b628c | 50 | //} else if ((iKey >= 0x5000) && (iKey < 0x8000)) { // down |
MrBedfordVan | 1:f31d081b628c | 51 | //} else if ((iKey >= 0xc000) && (iKey < 0xfa00)) { // sel |
MrBedfordVan | 1:f31d081b628c | 52 | //} else { // nowt |
MrBedfordVan | 1:f31d081b628c | 53 | //} |
MrBedfordVan | 1:f31d081b628c | 54 | } |
MrBedfordVan | 1:f31d081b628c | 55 | |
kaizen | 0:3b6dd029d50c | 56 | wait(2.0f); |
kaizen | 0:3b6dd029d50c | 57 | error = sensor.readData(); |
kaizen | 0:3b6dd029d50c | 58 | if (0 == error) { |
kaizen | 0:3b6dd029d50c | 59 | c = sensor.ReadTemperature(CELCIUS); |
kaizen | 0:3b6dd029d50c | 60 | f = sensor.ReadTemperature(FARENHEIT); |
kaizen | 0:3b6dd029d50c | 61 | k = sensor.ReadTemperature(KELVIN); |
kaizen | 0:3b6dd029d50c | 62 | h = sensor.ReadHumidity(); |
kaizen | 0:3b6dd029d50c | 63 | dp = sensor.CalcdewPoint(c, h); |
kaizen | 0:3b6dd029d50c | 64 | dpf = sensor.CalcdewPointFast(c, h); |
MrBedfordVan | 1:f31d081b628c | 65 | pc.printf("Temperature in Kelvin: %4.2f, Celcius: %4.2f, Farenheit %4.2f\n", k, c, f); |
MrBedfordVan | 1:f31d081b628c | 66 | pc.printf("Humidity is %4.2f, Dewpoint: %4.2f, Dewpoint fast: %4.2f\n", h, dp, dpf); |
MrBedfordVan | 1:f31d081b628c | 67 | pc.printf("Tempformat: %d HumidFormat: %d\n", temp_format, humid_format); |
MrBedfordVan | 1:f31d081b628c | 68 | switch(temp_format) { |
MrBedfordVan | 1:f31d081b628c | 69 | case 0 : sprintf(tmpString, " Temp: %4.2fC", c); break; |
MrBedfordVan | 1:f31d081b628c | 70 | case 1 : sprintf(tmpString, " Temp: %4.2fF", f); break; |
MrBedfordVan | 1:f31d081b628c | 71 | case 2 : sprintf(tmpString, " Temp: %4.2fK", k); break; |
MrBedfordVan | 1:f31d081b628c | 72 | } |
MrBedfordVan | 1:f31d081b628c | 73 | textLCD(tmpString, 0); |
MrBedfordVan | 1:f31d081b628c | 74 | switch(humid_format) { |
MrBedfordVan | 1:f31d081b628c | 75 | case 0 : sprintf(tmpString2, "Humid: %4.2f", h); break; |
MrBedfordVan | 1:f31d081b628c | 76 | case 1 : sprintf(tmpString2, "Dewpoint: %4.2f", dp); break; |
MrBedfordVan | 1:f31d081b628c | 77 | case 2 : sprintf(tmpString2, "DewpFast: %4.2f", dpf); break; |
MrBedfordVan | 1:f31d081b628c | 78 | } |
MrBedfordVan | 1:f31d081b628c | 79 | textLCD(tmpString2, 1); |
kaizen | 0:3b6dd029d50c | 80 | } else { |
MrBedfordVan | 1:f31d081b628c | 81 | pc.printf("Error: %d\n", error); |
MrBedfordVan | 1:f31d081b628c | 82 | textLCD("Error", 0); |
kaizen | 0:3b6dd029d50c | 83 | } |
kaizen | 0:3b6dd029d50c | 84 | } |
kaizen | 0:3b6dd029d50c | 85 | } |