#include #include #define BAUDRATE 115200 #define I2C_SDA 15 #define I2C_SCL 16 #define I2C_FREQ 400000 #define DAC_MAX 4095 #define DAC_MIN 0 #define VREF_mV 2048 #define VREF_CONF_IN_USE MCP4728_VREF_INTERNAL #define PIN_BTN 40 Adafruit_MCP4728 mcp; static uint16_t value_mV = VREF_mV; bool button_state_old = false; bool button_state_now = false; uint16_t voltage(uint16_t mV) { return map(mV, 0, VREF_mV, DAC_MIN, DAC_MAX); } void setup() { Serial.begin(BAUDRATE); delay(1000); Serial.print("\n\rMCP4728 DAC Test"); Wire.begin(I2C_SDA, I2C_SCL); Wire.setClock(I2C_FREQ); pinMode(PIN_BTN, INPUT); Serial.print("\n\rInitialisiere MCP4728..."); uint8_t attempts = 0; while (!mcp.begin()) { if(attempts > 20) { Serial.print("\n\rError: Es konnte nach 20 Versuchen kein IC gefunden werden. Überprüfe die Verkabelung und starte den ESP neu!"); for(;;); } Serial.print("."); delay(100); attempts++; } Serial.print("\n\rErfolgreich verbunden!"); mcp.setChannelValue(MCP4728_CHANNEL_A, 4095, VREF_CONF_IN_USE); Serial.print("\n\rDAC-Kanal A auf 0 gesetzt"); delay(1000); } void loop() { button_state_now = digitalRead(PIN_BTN); if (button_state_now != button_state_old) { delay(10); // debounce delay button_state_now = digitalRead(PIN_BTN); if (button_state_now != button_state_old) { button_state_old = button_state_now; if (button_state_now == HIGH) { if(value_mV < 2000) value_mV += (1000/12); if(value_mV >= 2000) value_mV = 0; if (mcp.setChannelValue(MCP4728_CHANNEL_A, voltage(value_mV), VREF_CONF_IN_USE)) Serial.printf("DAC A = %u -> mV: %u\r\n", voltage(value_mV), value_mV); else Serial.println("Error: Neuer MCP4728 Wert konnte nicht gesetzt werden!"); } } } }