#pragma once #include #include "hardware/adc.h" #include namespace { std::array 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 get_samples() { std::array 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(measurement * 127u / 4095u); // TODO add hysteresis } return samples; } }