diff --git a/ModbusApp.cpp b/ModbusApp.cpp index 72e4b74..e0b6bec 100644 --- a/ModbusApp.cpp +++ b/ModbusApp.cpp @@ -29,10 +29,7 @@ uint16_t voltage; uint16_t cosphi; uint16_t current; uint16_t power; -union { - uint16_t in[2]; - uint32_t v; -} energy; +uint16_t energy[2]; float startEnergy = 0; @@ -40,14 +37,19 @@ float startEnergy = 0; float getVoltage() { return (float)voltage; } float getCurrent() { return (float)current * 0.1; } float getCosPhi() { return (float)cosphi * 0.01; } -float getPower() { return (float)power * 0.01; } -float getEnergy() { return (float)energy.v; } -float getNewEnergy() { return ((float)energy.v) - startEnergy; } +float getPower() { return (float)power * 10; } + +float getEnergy() { + uint32_t v = ((uint32_t)energy[1]) + (((uint32_t)energy[0]) << 16); + float vv = ((float)v) * 0.01; + return vv; +} + +float getNewEnergy() { return getEnergy() - startEnergy; } // void modbusAppBegin(Mudbus *mb) { void modbusAppBegin() { - pinMode(ZEROING_PIN, INPUT_PULLUP); // modbusSlave = mb; @@ -57,7 +59,7 @@ void modbusAppBegin() { modbus_construct(&packets[COSPHI], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 39, 1, &cosphi); modbus_construct(&packets[CURRENT], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 36, 1, ¤t); modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 37, 1, &power); - modbus_construct(&packets[ENERGY], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 27, 2, energy.in); + modbus_construct(&packets[ENERGY], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 27, 2, energy); // modbus_construct(&packets[POWER], MODBUS_ADDRESS, READ_HOLDING_REGISTERS, 1, 1, &power); @@ -69,7 +71,7 @@ void modbusAppExec() { modbus_update(); float nEnergy = getEnergy(); - if (((0 == startEnergy) && (0 != nEnergy)) || (digitalRead(ZEROING_PIN) == 0)) { + if ((0 == startEnergy) && (0 != nEnergy)) { startEnergy = nEnergy; } diff --git a/ModbusApp.h b/ModbusApp.h index 4878ac6..a7ea623 100644 --- a/ModbusApp.h +++ b/ModbusApp.h @@ -14,12 +14,11 @@ -const uint32_t MODBUS_BAUD = 9600; +const uint32_t MODBUS_BAUD = 19200; const uint16_t MODBUS_TIMEOUT = 10000; const uint16_t MODBUS_SCANRATE = 1000; const uint8_t MODBUS_RETRY_COUNT = 25; const uint8_t MODBUS_TX_ENABLE_PIN = 2; -const uint8_t ZEROING_PIN = 3; const uint8_t MODBUS_ADDRESS = 1; // void modbusAppBegin(Mudbus *mb); diff --git a/WiModbusGateway.cpp b/WiModbusGateway.cpp index f0dfc65..2696439 100644 --- a/WiModbusGateway.cpp +++ b/WiModbusGateway.cpp @@ -14,7 +14,7 @@ #include -const uint8_t WIFI_ENABLE_PIN = 4; +const uint8_t WIFI_ENABLE_PIN = 3; LiquidCrystal lcd = LiquidCrystal(A0, A1, A2, A3, A4, A5); @@ -69,8 +69,8 @@ void printWifiStatus() { void setup() { pinMode(WIFI_ENABLE_PIN, INPUT_PULLUP); - delay(100); - wifiEnabled = true; // (digitalRead(WIFI_ENABLE_PIN) != 0); + delay(500); + wifiEnabled = (digitalRead(WIFI_ENABLE_PIN) != 0); Serial.begin(57600);