#pragma once #include #include #include #include #include #define CARD_TYPE_ANALOG 0x02 #define ANALOG_INPUT_BANK_A_ADDRESS 0x48 #define ANALOG_INPUT_BANK_B_ADDRESS 0x49 #define DAC0_ADDRESS 0x60 #define DAC1_ADDRESS 0x61 #define DAC2_ADDRESS 0x62 #define DAC3_ADDRESS 0x63 class AnalogCard : public ExpansionCard { public: AnalogCard(); void dacWrite(uint8_t pin, uint16_t value); void sendDataToDAC(uint8_t pin, uint16_t value); uint16_t analogRead(uint8_t pin); bool begin(); void loop(); bool getDACState(uint8_t pin); uint16_t getDACValue(uint8_t pin); void setDACState(uint8_t pin, bool state); void setDACValue(uint8_t pin, uint16_t value); uint8_t registerDACChangeCallback(std::function callback); void unregisterDACChangeCallback(uint8_t handler); uint8_t getType(); private: uint8_t handler_count; std::map> dac_change_callbacks; bool dac_state[4]; uint16_t dac_value[4]; MCP4725 dac0; MCP4725 dac1; MCP4725 dac2; MCP4725 dac3; Adafruit_ADS1115 analogInputBankA; Adafruit_ADS1115 analogInputBankB; };