Seeeduino Arch + Grove - OLED 128x64 + Grove - Temperature & Humidity Sensor Pro to sense the environment

Dependencies:   DHT SSD1308_128x64_I2C USBDevice mbed

Committer:
yihui
Date:
Wed Jul 24 07:03:48 2013 +0000
Revision:
0:4a9b07ff844f
Sense the environment

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 0:4a9b07ff844f 1 #include "mbed.h"
yihui 0:4a9b07ff844f 2 #include "USBSerial.h"
yihui 0:4a9b07ff844f 3 #include "DHT.h"
yihui 0:4a9b07ff844f 4 #include "SSD1308.h"
yihui 0:4a9b07ff844f 5
yihui 0:4a9b07ff844f 6 #define LOG(...) serial.printf(__VA_ARGS__)
yihui 0:4a9b07ff844f 7
yihui 0:4a9b07ff844f 8 BusOut leds(LED1, LED2, LED3, LED4);
yihui 0:4a9b07ff844f 9 USBSerial serial; // USB serial to output debug message
yihui 0:4a9b07ff844f 10
yihui 0:4a9b07ff844f 11 // Grove - Temperature & Humidity Pro is connected with UART Grove of Seeeduino Arch, uses P1_14
yihui 0:4a9b07ff844f 12 DHT sensor(P1_14, DHT22);
yihui 0:4a9b07ff844f 13
yihui 0:4a9b07ff844f 14 // Grove - OLED 128x64 is connected with I2C Grove
yihui 0:4a9b07ff844f 15 I2C i2c(P0_5, P0_4); // SDA, SCL
yihui 0:4a9b07ff844f 16 SSD1308 oled = SSD1308(i2c, SSD1308_SA0);
yihui 0:4a9b07ff844f 17
yihui 0:4a9b07ff844f 18 int main() {
yihui 0:4a9b07ff844f 19 uint8_t count = 0;
yihui 0:4a9b07ff844f 20 char display_buf[8];
yihui 0:4a9b07ff844f 21 int err;
yihui 0:4a9b07ff844f 22 float humidity;
yihui 0:4a9b07ff844f 23 float last_humidity = 0;
yihui 0:4a9b07ff844f 24 float temperature;
yihui 0:4a9b07ff844f 25 float last_temperature = 0;
yihui 0:4a9b07ff844f 26
yihui 0:4a9b07ff844f 27
yihui 0:4a9b07ff844f 28 LOG("------- Sense -------\n");
yihui 0:4a9b07ff844f 29 oled.writeString(0, 0, "---- Sense ----");
yihui 0:4a9b07ff844f 30 oled.writeString(2, 0, "Temperature:");
yihui 0:4a9b07ff844f 31 oled.writeString(5, 0, "Humidity:");
yihui 0:4a9b07ff844f 32 while(1) {
yihui 0:4a9b07ff844f 33 count++;
yihui 0:4a9b07ff844f 34 leds = count;
yihui 0:4a9b07ff844f 35
yihui 0:4a9b07ff844f 36 err = sensor.readData();
yihui 0:4a9b07ff844f 37 if (err == 0) {
yihui 0:4a9b07ff844f 38 temperature = sensor.ReadTemperature(CELCIUS);
yihui 0:4a9b07ff844f 39 if (temperature != last_temperature) { // update temperature if changed
yihui 0:4a9b07ff844f 40 snprintf(display_buf, sizeof(display_buf), "%4.2f C", temperature);
yihui 0:4a9b07ff844f 41 oled.writeString(3, 0, display_buf);
yihui 0:4a9b07ff844f 42 last_temperature = temperature;
yihui 0:4a9b07ff844f 43 }
yihui 0:4a9b07ff844f 44
yihui 0:4a9b07ff844f 45 humidity = sensor.ReadHumidity();
yihui 0:4a9b07ff844f 46 if (humidity != last_humidity) {
yihui 0:4a9b07ff844f 47 snprintf(display_buf, sizeof(display_buf), "%4.2f %%", humidity);
yihui 0:4a9b07ff844f 48 oled.writeString(6, 0, display_buf);
yihui 0:4a9b07ff844f 49 last_humidity = humidity;
yihui 0:4a9b07ff844f 50 }
yihui 0:4a9b07ff844f 51
yihui 0:4a9b07ff844f 52 LOG("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
yihui 0:4a9b07ff844f 53 LOG("Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
yihui 0:4a9b07ff844f 54 LOG("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
yihui 0:4a9b07ff844f 55 LOG("Humidity is %4.2f \r\n",sensor.ReadHumidity());
yihui 0:4a9b07ff844f 56 LOG("Dew point is %4.2f \r\n",sensor.CalcdewPoint(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
yihui 0:4a9b07ff844f 57 LOG("Dew point (fast) is %4.2f \r\n",sensor.CalcdewPointFast(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
yihui 0:4a9b07ff844f 58 } else
yihui 0:4a9b07ff844f 59 LOG("\r\nErr %i \n",err);
yihui 0:4a9b07ff844f 60
yihui 0:4a9b07ff844f 61 wait(2);
yihui 0:4a9b07ff844f 62 }
yihui 0:4a9b07ff844f 63 }