|
1 | 1 | #include <stdio.h> |
2 | 2 | #include <letmecreate/click/air_quality.h> |
3 | | -#include <letmecreate/core/common.h> |
4 | | -#include <letmecreate/core/gpio.h> |
5 | | -#include <letmecreate/core/gpio_monitor.h> |
| 3 | +#include <letmecreate/core/adc.h> |
6 | 4 |
|
7 | 5 |
|
8 | | -int air_quality_click_set_callback(uint8_t mikrobus_index, void(*callback)(uint8_t)) |
| 6 | +int air_quality_click_get_measure(uint8_t mikrobus_index, uint16_t *measure) |
9 | 7 | { |
10 | | - uint8_t output_pin = 0; |
11 | | - int callback_ID; |
| 8 | + float tmp = 0.f; |
12 | 9 |
|
13 | | - if (callback == NULL) { |
14 | | - fprintf(stderr, "air quality: Callback must not be null.\n"); |
| 10 | + if (measure == NULL) { |
| 11 | + fprintf(stderr, "air quality: Cannot store measure using null pointer.\n"); |
15 | 12 | return -1; |
16 | 13 | } |
17 | 14 |
|
18 | | - switch (mikrobus_index) { |
19 | | - case MIKROBUS_1: |
20 | | - output_pin = MIKROBUS_1_AN; |
21 | | - break; |
22 | | - case MIKROBUS_2: |
23 | | - output_pin = MIKROBUS_2_AN; |
24 | | - break; |
25 | | - default: |
26 | | - fprintf(stderr, "air quality: Invalid mikrobus index.\n"); |
27 | | - return -1; |
28 | | - } |
29 | | - |
30 | | - if (gpio_init(output_pin) < 0 |
31 | | - || gpio_set_direction(output_pin, GPIO_INPUT) < 0) { |
32 | | - fprintf(stderr, "air quality: Failed to configure pin as an input.\n"); |
33 | | - return -1; |
34 | | - } |
35 | | - |
36 | | - if (gpio_monitor_init() < 0) |
| 15 | + if (adc_get_value(mikrobus_index, &tmp) < 0) |
37 | 16 | return -1; |
38 | 17 |
|
39 | | - if ((callback_ID = gpio_monitor_add_callback(output_pin, GPIO_FALLING, callback)) < 0) |
40 | | - fprintf(stderr, "air quality: Failed to add callback.\n"); |
| 18 | + *measure = (tmp / 5.f) * 65535; |
41 | 19 |
|
42 | | - return callback_ID; |
| 20 | + return 0; |
43 | 21 | } |
0 commit comments