blob: d7842aa15f639a8f61a91d7919bc22d73e093a25 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#pragma once
#include <array>
#include "hardware/adc.h"
#include <cstdint>
namespace
{
std::array<std::uint32_t, 2> previous_samples { 0xffff'ffffu, 0xffff'ffffu };
}
namespace adc
{
struct Sample
{
std::uint8_t value {0};
bool changed {false};
};
void
init()
{
adc_init();
adc_gpio_init(26);
adc_gpio_init(27);
}
std::array<Sample, 2>
get_samples()
{
std::array<Sample, 2> samples {};
for (std::size_t i = 0; i < samples.size(); i++)
{
adc_select_input(i);
std::uint16_t const measurement = adc_read();
samples[i].changed = measurement != previous_samples[i];
previous_samples[i] = measurement;
samples[i].value = static_cast<uint8_t>(measurement * 127u / 4095u); // TODO add hysteresis
}
return samples;
}
}
|