#include #include // Define software serial pins (use any digital pins if not using hardware serial) #define RX_PIN 13 #define TX_PIN 12 #define DE_PIN 3 #define RE_PIN 4 SoftwareSerial s1(RX_PIN, TX_PIN); ModbusMaster node; uint16_t holdingRegisters[20]; void setup() { // Start the software serial port s1.begin(9600 ); //pinMode(RX_PIN, INPUT); //pinMode(TX_PIN, OUTPUT); pinMode(DE_PIN, OUTPUT); pinMode(RE_PIN, OUTPUT); digitalWrite(DE_PIN, LOW); digitalWrite(RE_PIN, LOW); //node.setTimeout(2000); // Optionally, start the Serial monitor for debugging Serial.begin(9600); while (!s1) { } node.begin(101, s1); node.preTransmission(preTransmission); node.postTransmission(postTransmission); } void preTransmission() { digitalWrite(DE_PIN, HIGH); // Enable RS485 transmit digitalWrite(RE_PIN, HIGH); } void postTransmission() { digitalWrite(DE_PIN, LOW); // Disable RS485 transmit digitalWrite(RE_PIN, LOW); } static unsigned long lastRefreshTime = 0; #define ReadSize 4 void loop() { static uint16_t count = 0; uint8_t result; int16_t data[ReadSize]; //delay(100); // Wait a second before the next loop // digitalWrite(RE_PIN, HIGH); // s1.print("Hello"); // digitalWrite(RE_PIN, LOW); if(millis() - lastRefreshTime >= 1000) { lastRefreshTime += 1000; Serial.print("Cycle\n\n"); result = node.readHoldingRegisters(2705 , 2); // Check if the read was successful if (result == node.ku8MBSuccess) { Serial.print("Read successful: "); uint16_t highWord = node.getResponseBuffer(0); uint16_t lowWord = node.getResponseBuffer(1); uint32_t floatRaw = ((uint32_t)highWord << 16) | lowWord; // Combine registers float floatValue; // Convert raw 32-bit value to float memcpy(&floatValue, &floatRaw, sizeof(float)); Serial.print("Float value: "); Serial.println(floatValue); // for (uint8_t j = 0; j < ReadSize; j++) // { // int recv = node.getResponseBuffer(j); // data[j] = recv; // Serial.print(recv ); // } // Serial.print("\nHEX:"); // for (uint8_t j = 0; j < ReadSize; j++) // { // Serial.print(data[j],"HEX"); // } // Serial.println(); } else { Serial.print("Read error: "); Serial.println(result, HEX); } } }