diff --git a/lib/ModbusSlaveConfigToEEPROM.h b/lib/ModbusSlaveConfigToEEPROM.h index 3f1b317..8f52603 100644 --- a/lib/ModbusSlaveConfigToEEPROM.h +++ b/lib/ModbusSlaveConfigToEEPROM.h @@ -5,43 +5,62 @@ */ #ifndef ModbusSlaveConfigToEEPROM_H #define ModbusSlaveConfigToEEPROM_H + #include #include -class ModBusConfig{ - public: - ModBusConfig(int ID, int BAUDRATE); - void SetModbusID(int ID); - void SetBaudRate(int BAUDRATE); - int GetModbusID(); - int GetBaudRate(); - private: - int ModBusID; - int ModBusBaudrate; +class ModBusConfig { +public: + ModBusConfig(); // Konstruktor ohne Parameter + void SetModbusID(int ID); + void SetBaudRate(int BAUDRATE); + int GetModbusID(); + int GetBaudRate(); + +private: + static const int MODBUS_ID_ADDRESS = 0; // Speicheradresse für Modbus-ID + static const int BAUD_RATE_ADDRESS = 1; // Speicheradresse für Baudrate + static const int MAX_BAUD_RATE = 115200; // Maximal unterstützte Baudrate }; -void ModBusConfig::SetModbusID(int BAUDRATE){ - EEPROM.write(0,BAUDRATE); -} - -void ModBusConfig::SetBaudRate(int BAUDRATE){ - // divide Baudrate / 100 - to save it in Eeprom (8Bit 0 - 255) - int dividedBaudrate = BAUDRATE/100; - - if ( dividedBaudrate != EEPROM.read(1)){ - EEPROM.write(1,dividedBaudrate); +ModBusConfig::ModBusConfig() { + // Optional: Initialisieren Sie die EEPROM-Werte, falls erforderlich + if (EEPROM.read(MODBUS_ID_ADDRESS) == 0xFF) { + SetModbusID(1); // Setze Standard ID + } + if (EEPROM.read(BAUD_RATE_ADDRESS) == 0xFF) { + SetBaudRate(9600); // Setze Standard Baudrate } - } -int ModBusConfig::GetModbusID(){ - return EEPROM.read(0); - +void ModBusConfig::SetModbusID(int ID) { + if (ID >= 0 && ID <= 255) { // Überprüfung, dass ID im gültigen Bereich liegt + EEPROM.write(MODBUS_ID_ADDRESS, ID); + } else { + Serial.println("Ungültige Modbus-ID. ID muss zwischen 0 und 255 liegen."); + } } -int ModBusConfig::GetBaudRate(){ - int Baudrate = EEPROM.read(1)*100; +void ModBusConfig::SetBaudRate(int BAUDRATE) { + int dividedBaudrate = BAUDRATE / 100; + + // Überprüfung, dass Baudrate im gültigen Bereich liegt + if (BAUDRATE > 0 && BAUDRATE <= MAX_BAUD_RATE) { + if (dividedBaudrate != EEPROM.read(BAUD_RATE_ADDRESS)) { + EEPROM.write(BAUD_RATE_ADDRESS, dividedBaudrate); + } + } else { + Serial.println("Ungültige Baudrate. Baudrate muss zwischen 0 und 115200 liegen."); + } +} + +int ModBusConfig::GetModbusID() { + return EEPROM.read(MODBUS_ID_ADDRESS); +} + +int ModBusConfig::GetBaudRate() { + int Baudrate = EEPROM.read(BAUD_RATE_ADDRESS) * 100; return Baudrate; } -#endif \ No newline at end of file +#endif