| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- /*
- * EchoLotSetup.cpp
- *
- * Created on: 10.01.2026
- * Author: FSmilari
- */
-
- #include "EchoLotSetup.h"
-
- #define ADDR_AIR_TEMP 0 // WORD
- #define ADDR_WATER_TEMP 2 // +2 WORDs
- #define ADDR_SONIC_AIR 4 // +2 WORDs
- #define ADDR_SALTPERMIL 6 // +2 WORDs
-
- // --------------------------------------------------
- // Konstruktor
- // --------------------------------------------------
- EchoLotSetup::EchoLotSetup(Display &display) : display(display) {
- airTemp = 20.0f;
- waterTemp = 20.0f;
- sonicSpeedAir = 343.0f;
- saltPromilleWater = 35;
-
- doInitialization = true;
- configStepIndex = 0;
- }
-
- // --------------------------------------------------
- // Initialisierung
- // --------------------------------------------------
- void EchoLotSetup::initialize() {
- EEPROM.init();
- readFromEEPROM();
- doInitialization = false;
- }
-
- // --------------------------------------------------
- // Rotary Switch (kurz)
- // --------------------------------------------------
- void EchoLotSetup::onRotaryControlerSwitch() {
- configStepIndex++;
- if (configStepIndex >= 5) {
- configStepIndex = 0;
- }
- }
-
- // --------------------------------------------------
- // Rotary Switch (lang)
- // --------------------------------------------------
- void EchoLotSetup::onRotaryControlerLongSwitch() {
-
- }
-
- // --------------------------------------------------
- // Rotary Drehung
- // --------------------------------------------------
- void EchoLotSetup::onRotaryControlerTurn(RotaryEncoder::Direction turn)
- {
- float delta = (turn == RotaryEncoder::Direction::CLOCKWISE) ? 1.0f : -1.0f;
-
- switch (configStepIndex) {
- case 0:
- airTemp += delta;
- break;
- case 1:
- waterTemp += delta;
- break;
- case 2:
- sonicSpeedAir += delta;
- break;
- case 3:
- saltPromilleWater += delta;
- break;
- default:
- break;
- }
-
- }
-
- // --------------------------------------------------
- // Speichern bestätigen
- // --------------------------------------------------
- void EchoLotSetup::save() {
- saveToEEPROM();
- }
-
- // --------------------------------------------------
- // Abbrechen
- // --------------------------------------------------
- void EchoLotSetup::cancel() {
- readFromEEPROM();
- }
-
- // --------------------------------------------------
- // Display leeren
- // --------------------------------------------------
- void EchoLotSetup::clear() {
- display.clearDisplay();
- }
-
- // --------------------------------------------------
- // EEPROM lesen
- // --------------------------------------------------
- void EchoLotSetup::readFromEEPROM() {
- setAirTemp(readFloatFromEEPROM(ADDR_AIR_TEMP));
- setWaterTemp(readFloatFromEEPROM(ADDR_WATER_TEMP));
- setSonicSpeedAir(readFloatFromEEPROM(ADDR_SONIC_AIR));
- setSaltPromilleWater(readIntegerFromEEPROM(ADDR_SALTPERMIL));
-
- printValues();
- }
-
- // --------------------------------------------------
- // EEPROM schreiben
- // --------------------------------------------------
- void EchoLotSetup::saveToEEPROM() {
- writeFloatToEEPROM(ADDR_AIR_TEMP, airTemp);
- writeFloatToEEPROM(ADDR_WATER_TEMP, waterTemp);
- writeFloatToEEPROM(ADDR_SONIC_AIR, sonicSpeedAir);
- writeIntegerToEEPROM(ADDR_SALTPERMIL, saltPromilleWater);
- }
-
- // --------------------------------------------------
- // Werte anzeigen
- // --------------------------------------------------
- void EchoLotSetup::printValues() {
- String value = String(sonicSpeedAir);
- Serial.print(String(AIRTEMP) + ": " + String(getAirTemp(), 1) + ", ");
- Serial.print(String(WATERTEMP) + ": " + String(getWaterTemp(), 1) + ", ");
- Serial.print(String(SONICSPEEDAIR) + ": " + String(getSonicSpeedAir(), 1) + ", ");
- Serial.println(String(SALTPROMILLEWATER) + ": " + String(getSaltPromilleWater()));
- }
-
- // --------------------------------------------------
- // Private Helper
- // --------------------------------------------------
- String EchoLotSetup::getCfgOptForStepIndex(byte index) {
- return ConfigStep[index];
- }
-
- String EchoLotSetup::getCfgOptUnitForStepIndex(byte index) {
- switch (index) {
- case 0:
- case 1:
- return "°C";
- case 2:
- case 3:
- return "m/s";
- default:
- return "";
- }
- }
-
- float EchoLotSetup::getAirTemp() const {
- return airTemp;
- }
-
- void EchoLotSetup::setAirTemp(float airTemp) {
- this->airTemp = airTemp;
- }
-
- float EchoLotSetup::getWaterTemp() const {
- return waterTemp;
- }
-
- void EchoLotSetup::setWaterTemp(float waterTemp) {
- this->waterTemp = waterTemp;
- }
-
- float EchoLotSetup::getSonicSpeedAir() const {
- return sonicSpeedAir;
- }
-
- void EchoLotSetup::setSonicSpeedAir(float sonicSpeedAir) {
- this->sonicSpeedAir = sonicSpeedAir;
- }
-
- int EchoLotSetup::getSaltPromilleWater() const {
- return saltPromilleWater;
- }
-
- void EchoLotSetup::setSaltPromilleWater(int saltPromilleWater) {
- this->saltPromilleWater = saltPromilleWater;
- }
-
- void EchoLotSetup::writeFloatToEEPROM(uint16_t addr, float value) {
- uint16_t *p = (uint16_t*) (void*) &value;
-
- // float = 2 x uint16_t
- EEPROM.update(addr, p[0]);
- EEPROM.update(addr + 1, p[1]);
- }
-
- float EchoLotSetup::readFloatFromEEPROM(uint16_t addr) {
- float value;
- uint16_t *p = (uint16_t*) (void*) &value;
-
- p[0] = EEPROM.read(addr);
- p[1] = EEPROM.read(addr + 1);
-
- return value;
- }
-
-
- void EchoLotSetup::writeIntegerToEEPROM(uint16_t addr, int value) {
- EEPROM.update(addr, (uint16_t) value);
- }
-
- int EchoLotSetup::readIntegerFromEEPROM(uint16_t addr) {
- return (int) EEPROM.read(addr);
- }
|