1 /*
2 * Copyright (c) 2019 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 #include <zephyr.h>
8 #include <device.h>
9 #include <drivers/sensor.h>
10 #include <stdio.h>
11
now_str(void)12 static const char *now_str(void)
13 {
14 static char buf[16]; /* ...HH:MM:SS.MMM */
15 uint32_t now = k_uptime_get_32();
16 unsigned int ms = now % MSEC_PER_SEC;
17 unsigned int s;
18 unsigned int min;
19 unsigned int h;
20
21 now /= MSEC_PER_SEC;
22 s = now % 60U;
23 now /= 60U;
24 min = now % 60U;
25 now /= 60U;
26 h = now;
27
28 snprintf(buf, sizeof(buf), "%u:%02u:%02u.%03u",
29 h, min, s, ms);
30 return buf;
31 }
32
main(void)33 void main(void)
34 {
35 const char *const label = DT_LABEL(DT_INST(0, aosong_dht));
36 const struct device *dht22 = device_get_binding(label);
37
38 if (!dht22) {
39 printf("Failed to find sensor %s\n", label);
40 return;
41 }
42
43 while (true) {
44 int rc = sensor_sample_fetch(dht22);
45
46 if (rc != 0) {
47 printf("Sensor fetch failed: %d\n", rc);
48 break;
49 }
50
51 struct sensor_value temperature;
52 struct sensor_value humidity;
53
54 rc = sensor_channel_get(dht22, SENSOR_CHAN_AMBIENT_TEMP,
55 &temperature);
56 if (rc == 0) {
57 rc = sensor_channel_get(dht22, SENSOR_CHAN_HUMIDITY,
58 &humidity);
59 }
60 if (rc != 0) {
61 printf("get failed: %d\n", rc);
62 break;
63 }
64
65 printf("[%s]: %.1f Cel ; %.1f %%RH\n",
66 now_str(),
67 sensor_value_to_double(&temperature),
68 sensor_value_to_double(&humidity));
69 k_sleep(K_SECONDS(2));
70 }
71 }
72