/** * @file conductivity_measurement_system.ino * @brief Impedance/Conductivity Measurement System with RTD Temperature Sensing * @author MK, Aly Development * @date 09/30/2025, last modified * * @details * This firmware implements a precision impedance/conductivity measurement system * based on the AD5940 Analog Front End (AFE). * * **** Note: Any application of this software should be thoroughly tested and validated **** * * Updates: added in multiple unit switching functionality, eeprom write/read * Updated startup functionality to default wg to off, implemented repeat measurement after long periods of idle. * Fixed switch matrix behavior during init * -> unified ref settings across measurements * -> adds saturation check to verbose output * * * * Serial command interface: * - Configuration commands (cfg,parameter,value) * - Measurement commands * * Hardware Requirements: * - Teensy microcontroller * - AD5940/1 connected via SPI * - External Electrode * - RTD temperature sensor * * Dependencies: * - ad5940 and Impedance Libraries (from Analog Devices) - note impdedance library has been modified to reduce measurement jitter. * - ad5941_library_extension Library (from Aly Development) * * Adapted and expanded from: https://github.com/analogdevicesinc/ad5940-examples */ #include "ad5941_library_extension.h" /** * @brief Arduino setup function - runs once at system startup * * Initializes the serial communication, AD5940 hardware, configuration settings, * and displays system information to the user via activeSerial-> */ void setup() { pinMode(EN_A, OUTPUT); pinMode(EN_B, OUTPUT); pinMode(EN_C, OUTPUT); pinMode(SELECT_A, OUTPUT); pinMode(SELECT_B, OUTPUT); pinMode(SELECT_C, OUTPUT); digitalWrite(EN_A, LOW); digitalWrite(EN_B, LOW); digitalWrite(EN_C, LOW); digitalWrite(SELECT_A, LOW); digitalWrite(SELECT_B, LOW); digitalWrite(SELECT_C, LOW); digitalWrite(EN_B, HIGH); digitalWrite(EN_C, HIGH); detectSerial(); if (activeSerial) { // activeSerial->println("Serial initialized successfully!"); } // // Initialize serial communication at 115200 baud // beginSerial(activeSerial, 115200); // // Wait for serial connection to be established // while (!activeSerial); //initializeAllUnits(); initializeSelectedUnits(); selectFirstWorkingUnit(); // activeSerial->print("*"); } /** * @brief Arduino main loop function - runs continuously after setup */ void loop() { // Check if serial data is available and process commandsd while (activeSerial->available()) { // Process incoming serial command readCommand(); } delay(50); }