diff --git a/Auto_Seat.ino b/Auto_Seat.ino index 051b99d..929ba81 100644 --- a/Auto_Seat.ino +++ b/Auto_Seat.ino @@ -515,7 +515,7 @@ void updateDebugOutput(unsigned long currentTime) { if (lastDebugPrintTime == 0 || currentTime - lastDebugPrintTime >= DEBUG_INTERVAL_MS) { lastDebugPrintTime = currentTime; - printStatus(F("DEBUG")); + printDebugLine(); } } @@ -625,50 +625,65 @@ void printStatus(const __FlashStringHelper *tag) { printAutoCalibrationDelayStatus(); } -void printUptime() { - unsigned long totalMs = millis(); - unsigned long hours = totalMs / 3600000UL; - totalMs %= 3600000UL; - unsigned long minutes = totalMs / 60000UL; - totalMs %= 60000UL; - unsigned long seconds = totalMs / 1000UL; - unsigned long milliseconds = totalMs % 1000UL; - - Serial.print(F("uptime=")); - Serial.print(hours); - Serial.print(F("h ")); - Serial.print(minutes); - Serial.print(F("m ")); - Serial.print(seconds); - Serial.print(F("s ")); - Serial.print(milliseconds); - Serial.println(F("ms")); +void printDebugLine() { + Serial.println(); + Serial.println(F("[DEBUG]")); + printUptime(); + printNamedInt(F("raw"), parkingRawValue); + printNamedBool(F("ig"), ignitionState == HIGH); + printNamedBool(F("p"), parkingState == HIGH); + printNamedBool(F("rawDrive"), getRawDriveMode() == HIGH); + printNamedBool(F("confirmedDrive"), confirmedDriveMode == HIGH); + printNamedLong(F("currentMs"), currentPosMs); + printNamedLong(F("targetMs"), targetPosMs); + printNamedInt(F("savedMs"), storedSeatPositionMs); + printNamedInt(F("hardLimitMs"), SEAT_HARD_LIMIT_UP_MS); + printNamedInt(F("requestedRelay"), requestedSeatAction); + printNamedInt(F("actualRelay"), currentSeatAction); + printNamedBool(F("manual"), manualMode); + printNamedBool(F("stabilizing"), isStabilizing); + Serial.print(F("useCount=")); + Serial.print(useCount); + Serial.print(F("/")); + Serial.println(USES_BEFORE_AUTO_CALIBRATION); + printNamedBool(F("autoPending"), autoCalibrationPending); + printNamedBool(F("forceCal"), forceCalibration); + printNamedInt(F("autoCalState"), autoCalibrationState); + printAutoCalibrationDelayStatus(); } -void printAutoCalibrationDelayStatus() { - if (useCount < USES_BEFORE_AUTO_CALIBRATION) { - return; - } - - Serial.print(F("autoCalOffTimer=")); - if (ignitionState == HIGH) { - Serial.println(F("waiting_for_ig_off")); - return; - } - - unsigned long elapsedMs = millis() - ignitionOffStartTime; - unsigned long remainingMs = 0; - if (elapsedMs < AUTO_CALIBRATION_DELAY_MS) { - remainingMs = AUTO_CALIBRATION_DELAY_MS - elapsedMs; - } - - Serial.print(F("elapsed ")); - printDuration(elapsedMs); - Serial.print(F(" remaining ")); - printDuration(remainingMs); +void printUptime() { + Serial.print(F("uptime=")); + printDuration(millis()); Serial.println(); } +void printUptimeInline() { + Serial.print(F("uptime=")); + printDuration(millis()); +} + +void printBool(bool value) { + Serial.print(value ? F("true") : F("false")); +} + +void printNamedBool(const __FlashStringHelper *name, bool value) { + Serial.print(name); + Serial.print(F("=")); + printBool(value); + Serial.println(); +} + +void printNamedInt(const __FlashStringHelper *name, long value) { + Serial.print(name); + Serial.print(F("=")); + Serial.println(value); +} + +void printNamedLong(const __FlashStringHelper *name, long value) { + printNamedInt(name, value); +} + void printDuration(unsigned long totalMs) { unsigned long hours = totalMs / 3600000UL; totalMs %= 3600000UL; @@ -687,6 +702,38 @@ void printDuration(unsigned long totalMs) { Serial.print(F("ms")); } +void printAutoCalibrationDelayStatusInline() { + if (useCount < USES_BEFORE_AUTO_CALIBRATION) { + return; + } + + Serial.print(F(" autoCalOffTimer=")); + if (ignitionState == HIGH) { + Serial.print(F("waiting_for_ig_off")); + return; + } + + unsigned long elapsedMs = millis() - ignitionOffStartTime; + unsigned long remainingMs = 0; + if (elapsedMs < AUTO_CALIBRATION_DELAY_MS) { + remainingMs = AUTO_CALIBRATION_DELAY_MS - elapsedMs; + } + + Serial.print(F("elapsed ")); + printDuration(elapsedMs); + Serial.print(F(" remaining ")); + printDuration(remainingMs); +} + +void printAutoCalibrationDelayStatus() { + if (useCount < USES_BEFORE_AUTO_CALIBRATION) { + return; + } + + printAutoCalibrationDelayStatusInline(); + Serial.println(); +} + void setRelay(int relayPin, boolean state) { digitalWrite(relayPin, state ? LOW : HIGH); } diff --git a/README.md b/README.md index ae17a38..ede3007 100644 --- a/README.md +++ b/README.md @@ -98,6 +98,29 @@ If IG1 is still ON: autoCalOffTimer=waiting_for_ig_off ``` +Debug mode prints a readable block every second, one item per line. Boolean values are printed as `true` or `false`: + +```text +[DEBUG] +uptime=0h 0m 5s 123ms +raw=1023 +ig=true +p=true +rawDrive=false +confirmedDrive=false +currentMs=0 +targetMs=0 +savedMs=6000 +requestedRelay=0 +actualRelay=0 +manual=false +stabilizing=false +useCount=0/10 +autoPending=false +forceCal=false +autoCalState=0 +``` + ## Automatic Calibration - Each `IG1 HIGH -> LOW` transition increments the EEPROM use counter. diff --git a/report.html b/report.html index 9ded4c0..d977968 100644 --- a/report.html +++ b/report.html @@ -226,6 +226,7 @@ when currentPosMs <= 0:

주의: 명령은 한 글자만 받습니다. debug, down, position 2000처럼 긴 문자열은 실행하지 않습니다.

모든 상태 출력에는 부팅 후 경과 시간이 uptime=0h 2m 13s 457ms 형식으로 포함됩니다. debug 출력에서도 1초마다 같은 형식으로 확인할 수 있습니다.

사용 횟수가 10회에 도달한 경우에만 보정 대기 타이머가 autoCalOffTimer=elapsed 0h 1m 20s 123ms remaining 0h 3m 39s 877ms 형식으로 추가 출력됩니다. IG1 ON 상태에서는 autoCalOffTimer=waiting_for_ig_off로 표시됩니다.

+

debug 출력은 1초마다 항목별 한 줄 형식으로 표시되며, ig=true, p=false, autoPending=false처럼 bool 값은 true/false로 출력됩니다.

5. 수동 위치 세팅 시뮬레이션