#pragma once // Library defines #define ADS1256_SPI_ALREADY_STARTED // System Includes #include // Device Libraries #include #include #include // ADC Channel mapping #define ADC_CH_PEAK_12P_IN SING_0 #define ADC_CH_PEAK_12N_IN SING_1 #define ADC_CH_PEAK_34P_IN SING_2 #define ADC_CH_PEAK_34N_IN SING_3 #define ADC_CH_PEAK_12P_OUT SING_4 #define ADC_CH_PEAK_12N_OUT SING_5 #define ADC_CH_PEAK_34P_OUT SING_6 #define ADC_CH_PEAK_34N_OUT SING_7 // Device Pointer structs for tasks struct Devices { std::unique_ptr m_spi_a = nullptr; std::unique_ptr m_spi_b = nullptr; std::unique_ptr m_pot_a = nullptr; std::unique_ptr m_pot_b = nullptr; std::unique_ptr m_adc_a = nullptr; std::unique_ptr m_adc_b = nullptr; std::unique_ptr m_expander_a = nullptr; std::unique_ptr m_expander_b = nullptr; std::unique_ptr m_expander_inputs_ab = nullptr; std::mutex m_spi_a_mutex; std::mutex m_spi_b_mutex; std::mutex m_i2c_mutex; }; // Adc read channel wrapper to selet mux before reading inline float adcReadChannel(ADS1256 *adc, const uint8_t ch) { adc->setMUX(ch); // scarta 3 conversioni for (int i = 0; i < 3; i++) { adc->readSingle(); } // ora lettura valida a 30kSPS → ~100 µs di settling return adc->convertToVoltage(adc->readSingle()); }