ESPMegaPRO-v3-SDK/ESPMegaPRO-OS-SDK/lib/ESPMegaPRO/AnalogCard.hpp

55 lines
1.8 KiB
C++
Raw Permalink Normal View History

2023-12-27 16:15:11 +00:00
#pragma once
2023-12-27 18:25:35 +00:00
#include <ExpansionCard.hpp>
2023-12-27 16:15:11 +00:00
#include <Adafruit_ADS1X15.h>
#include <MCP4725.h>
2023-12-29 17:49:09 +00:00
#include <vector>
#include <map>
2023-12-27 16:15:11 +00:00
2023-12-31 18:38:25 +00:00
// Analog Card
2023-12-28 04:41:20 +00:00
#define CARD_TYPE_ANALOG 0x02
2023-12-31 18:38:25 +00:00
// Analog Card FRAM Address
2023-12-27 16:15:11 +00:00
#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
2023-12-31 18:56:49 +00:00
/**
* @brief This class represents the Analog Card.
*
* The analog card has 8 analog inputs accross two banks, and 4 DAC outputs.
*
* @note You do not need to specify the ESPMega I/O Address when creating an instance of this class as there can only be one Analog Card installed in the ESPMegaPRO board.
* @warning There can only be one Analog Card installed in the ESPMegaPRO board.
*
*/
2023-12-27 18:25:35 +00:00
class AnalogCard : public ExpansionCard {
2023-12-27 16:15:11 +00:00
public:
AnalogCard();
void dacWrite(uint8_t pin, uint16_t value);
2023-12-28 17:39:11 +00:00
void sendDataToDAC(uint8_t pin, uint16_t value);
2023-12-27 16:15:11 +00:00
uint16_t analogRead(uint8_t pin);
2023-12-27 19:18:21 +00:00
bool begin();
void loop();
2023-12-28 17:39:11 +00:00
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<void(uint8_t, bool, uint16_t)> callback);
2023-12-31 06:41:48 +00:00
void unregisterDACChangeCallback(uint8_t handler);
2023-12-28 04:41:20 +00:00
uint8_t getType();
2023-12-27 16:15:11 +00:00
private:
uint8_t handler_count;
2023-12-31 18:38:25 +00:00
// Map of handler IDs to callback functions
std::map<uint8_t, std::function<void(uint8_t, bool, uint16_t)>> dac_change_callbacks;
2023-12-28 17:39:11 +00:00
bool dac_state[4];
uint16_t dac_value[4];
2023-12-27 16:15:11 +00:00
MCP4725 dac0;
MCP4725 dac1;
MCP4725 dac2;
MCP4725 dac3;
Adafruit_ADS1115 analogInputBankA;
Adafruit_ADS1115 analogInputBankB;
};