1 /*
2  * Copyright (c) 2025 Thiyagarajan Pandiyan <psvthiyagarajan@gmail.com>
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <stdio.h>
8 #include <zephyr/kernel.h>
9 #include <zephyr/device.h>
10 #include <zephyr/drivers/sensor.h>
11 
12 #define DISTANCE_ALIAS(i) DT_ALIAS(_CONCAT(distance, i))
13 #define DISTANCE_SENSOR(i, _)                                                                      \
14 	IF_ENABLED(DT_NODE_EXISTS(DISTANCE_ALIAS(i)), (DEVICE_DT_GET(DISTANCE_ALIAS(i)),))
15 
16 /* support up to 5 distance sensors */
17 static const struct device *const sensors[] = {LISTIFY(5, DISTANCE_SENSOR, ())};
18 
fetch_and_display(const struct device * sensor)19 static void fetch_and_display(const struct device *sensor)
20 {
21 	struct sensor_value distance;
22 	int rc = sensor_sample_fetch(sensor);
23 
24 	if (rc < 0) {
25 		printf("ERROR: Fetch failed: %d\n", rc);
26 		return;
27 	}
28 
29 	rc = sensor_channel_get(sensor, SENSOR_CHAN_DISTANCE, &distance);
30 	if (rc < 0) {
31 		printf("ERROR: get failed: %d\n", rc);
32 	} else {
33 		printf("%s: %d.%03dm\n", sensor->name, distance.val1, distance.val2);
34 	}
35 }
36 
main(void)37 int main(void)
38 {
39 	size_t i = 0;
40 
41 	for (i = 0; i < ARRAY_SIZE(sensors); i++) {
42 		if (!device_is_ready(sensors[i])) {
43 			printf("Error: Device \"%s\" is not ready\n", sensors[i]->name);
44 			return 0;
45 		}
46 	}
47 
48 	while (true) {
49 		for (i = 0; i < ARRAY_SIZE(sensors); i++) {
50 			fetch_and_display(sensors[i]);
51 			k_sleep(K_MSEC(500));
52 		}
53 	}
54 
55 	return 0;
56 }
57