diff --git a/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino b/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino index 3b3b834..395ad8f 100644 --- a/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino +++ b/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino @@ -8,19 +8,13 @@ This project uses other libraries. It is necessary to install them in the arduino IDE. - Library - License - Version - Link - - ESPAsyncWebServer - LGPL 3.0 - 2.10.1 - https://github.com/mathieucarbou/ESPAsyncWebServer + - ESPAsyncWebServer - LGPL 3.0 - 2.10.8 - https://github.com/mathieucarbou/ESPAsyncWebServer - AsyncTCP - LGPL 3.0 - 1.1.4 - https://github.com/dvarrel/ESPAsyncTCP - ArduinoJson - MIT - 7.0.4 - https://github.com/bblanchon/ArduinoJson - ArduinoUniqueID - MIT - 1.3.0 - https://github.com/ricaun/ArduinoUniqueID - ESP32 - LGPL 2.1 - 2.0.16 - https://github.com/espressif/arduino-esp32 - Board configuration in the arduino IDE 2.3.2 - Tools -> Board -> ESP32 Arduino -> AI Thinker ESP32 - Tools -> CPU Frequency -> 240MHz (WiFi/BT) - Tools -> Core debug level -> None - Tools -> Flash frequency -> 80MHz - Tools -> Flash Mode -> DIO - Tools -> Partition scheme -> Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) + Arduino IDE configuration for the MCU are stored in the module_XXX.h file. When flashing the firmware to a new, empty ESP32-CAM device for the first time, it is necessary to use the 'Erase' function. This can be found under 'Tools' -> 'Erase all Flash Before Sketch Upload' -> 'Enable'. @@ -118,7 +112,9 @@ void setup() { xTaskCreatePinnedToCore(System_TaskMain, "SystemNtpOtaUpdate", 6200, NULL, 1, &Task_SystemMain, 0); /*function, description, stack size, parameters, priority, task handle, core*/ xTaskCreatePinnedToCore(System_TaskCaptureAndSendPhoto, "CaptureAndSendPhoto", 4400, NULL, 2, &Task_CapturePhotoAndSend, 0); /*function, description, stack size, parameters, priority, task handle, core*/ xTaskCreatePinnedToCore(System_TaskWifiManagement, "WiFiManagement", 2800, NULL, 3, &Task_WiFiManagement, 0); /*function, description, stack size, parameters, priority, task handle, core*/ +#if (true == ENABLE_SD_CARD) xTaskCreatePinnedToCore(System_TaskSdCardCheck, "CheckMicroSdCard", 3000, NULL, 4, &Task_SdCardCheck, 0); /*function, description, stack size, parameters, priority, task handle, core*/ +#endif xTaskCreatePinnedToCore(System_TaskSerialCfg, "CheckSerialConfiguration", 2600, NULL, 5, &Task_SerialCfg, 0); /*function, description, stack size, parameters, priority, task handle, core*/ xTaskCreatePinnedToCore(System_TaskStreamTelemetry, "PrintStreamTelemetry", 2200, NULL, 6, &Task_StreamTelemetry, 0); /*function, description, stack size, parameters, priority, task handle, core*/ xTaskCreatePinnedToCore(System_TaskSysLed, "SystemLed", 2100, NULL, 7, &Task_SysLed, 0); /*function, description, stack size, parameters, priority, task handle, core*/ @@ -132,7 +128,9 @@ void setup() { esp_task_wdt_add(Task_CapturePhotoAndSend); esp_task_wdt_add(Task_WiFiManagement); esp_task_wdt_add(Task_SystemMain); +#if (true == ENABLE_SD_CARD) esp_task_wdt_add(Task_SdCardCheck); +#endif esp_task_wdt_add(Task_SerialCfg); esp_task_wdt_add(Task_StreamTelemetry); esp_task_wdt_add(Task_SysLed); diff --git a/ESP32_PrusaConnectCam/camera.h b/ESP32_PrusaConnectCam/camera.h index ed65126..244b009 100644 --- a/ESP32_PrusaConnectCam/camera.h +++ b/ESP32_PrusaConnectCam/camera.h @@ -20,7 +20,7 @@ #include "cfg.h" #include "exif.h" -#include "Camera_cfg.h" +#include "module_templates.h" #include "Arduino.h" #include "mcu_cfg.h" #include "var.h" diff --git a/ESP32_PrusaConnectCam/cfg.h b/ESP32_PrusaConnectCam/cfg.h index a3bae82..e1cb051 100644 --- a/ESP32_PrusaConnectCam/cfg.h +++ b/ESP32_PrusaConnectCam/cfg.h @@ -19,7 +19,7 @@ #include #include "mcu_cfg.h" -#include "Camera_cfg.h" +#include "module_templates.h" #include "var.h" #include "log.h" diff --git a/ESP32_PrusaConnectCam/connect.cpp b/ESP32_PrusaConnectCam/connect.cpp index 670564c..2eb25a4 100644 --- a/ESP32_PrusaConnectCam/connect.cpp +++ b/ESP32_PrusaConnectCam/connect.cpp @@ -482,6 +482,7 @@ void PrusaConnect::SetTimeLapsPhotoSaveStatus(bool i_data) { @return none */ void PrusaConnect::SavePhotoToSdCard() { +#if (ENABLE_SD_CARD == true) /* check if time laps photo save is enabled */ if (EnableTimelapsPhotoSave == true) { log->AddEvent(LogLevel_Info, F("Save TimeLaps photo to SD card")); @@ -520,6 +521,7 @@ void PrusaConnect::SavePhotoToSdCard() { } } } +#endif } /** diff --git a/ESP32_PrusaConnectCam/log.cpp b/ESP32_PrusaConnectCam/log.cpp index 563032f..2bbca88 100644 --- a/ESP32_PrusaConnectCam/log.cpp +++ b/ESP32_PrusaConnectCam/log.cpp @@ -107,6 +107,7 @@ void Logs::Init() { Serial.println(F("Init Logs library")); /* init micro SD card */ +#if (true == ENABLE_SD_CARD) InitSdCard(); LogFileOpened = OpenFile(&LogFile, FilePath + FileName); @@ -132,6 +133,10 @@ void Logs::Init() { } else { Serial.println(F("Micro-SD card not found! Disable logs")); } +#else + Serial.println(F("Micro-SD card not enabled! Disable logs to card")); + LogFileOpened = false; +#endif } /** @@ -139,7 +144,9 @@ void Logs::Init() { * */ void Logs::LogOpenFile() { +#if (true == ENABLE_SD_CARD) LogFileOpened = OpenFile(&LogFile, FilePath + FileName); +#endif } /** @@ -147,7 +154,9 @@ void Logs::LogOpenFile() { * */ void Logs::LogCloseFile() { +#if (true == ENABLE_SD_CARD) CloseFile(&LogFile); +#endif } /** @@ -155,7 +164,9 @@ void Logs::LogCloseFile() { * */ void Logs::LogCheckOpenedFile() { +#if (true == ENABLE_SD_CARD) LogFileOpened = CheckOpenFile(&LogFile); +#endif } /** @@ -194,7 +205,7 @@ void Logs::AddEvent(LogLevel_enum level, String msg, bool newLine, bool date) { /* print log message to console */ Serial.print(LogMsg); - +#if (true == ENABLE_SD_CARD) /* append log message to log file */ if (true == LogFileOpened) { LogFileOpened = AppendFile(&LogFile, &LogMsg); @@ -206,6 +217,7 @@ void Logs::AddEvent(LogLevel_enum level, String msg, bool newLine, bool date) { } } } +#endif } #if (true == CONSOLE_VERBOSE_DEBUG) else { @@ -246,6 +258,7 @@ void Logs::AddEvent(LogLevel_enum level, const __FlashStringHelper *msg, String /* print log message to console */ Serial.print(LogMsg); +#if (true == ENABLE_SD_CARD) /* append log message to log file */ if (true == LogFileOpened) { LogFileOpened = AppendFile(&LogFile, &LogMsg); @@ -257,6 +270,7 @@ void Logs::AddEvent(LogLevel_enum level, const __FlashStringHelper *msg, String } } } +#endif } #if (true == CONSOLE_VERBOSE_DEBUG) else { @@ -347,6 +361,7 @@ bool Logs::GetNtpTimeSynced() { @return none */ void Logs::CheckMaxLogFileSize() { +#if (true == ENABLE_SD_CARD) uint32_t FileSize = GetFileSize(SD_MMC, FilePath + FileName); AddEvent(LogLevel_Verbose, F("Log file size: "), String(FileSize) + "/" + String(LOGS_FILE_MAX_SIZE) + " B"); @@ -357,11 +372,14 @@ void Logs::CheckMaxLogFileSize() { RenameFile(SD_MMC, FilePath + FileName, FilePath + FileName + String(file_count)); LogOpenFile(); } +#endif } void Logs::CheckCardSpace() { +#if (true == ENABLE_SD_CARD) CheckCardUsedStatus(); AddEvent(LogLevel_Verbose, "Card size: " + String(GetCardSizeMB()), + " MB, Used: " + String(GetCardUsedMB()) + " MB, Free: " + String(GetCardUsedMB()) + " MB"); +#endif } /** diff --git a/ESP32_PrusaConnectCam/log.h b/ESP32_PrusaConnectCam/log.h index 159e98a..ad1ed15 100644 --- a/ESP32_PrusaConnectCam/log.h +++ b/ESP32_PrusaConnectCam/log.h @@ -17,6 +17,7 @@ #include "mcu_cfg.h" #include "var.h" #include "micro_sd.h" +#include "module_templates.h" enum LogLevel_enum { LogLevel_Error = 0, ///< Error diff --git a/ESP32_PrusaConnectCam/mcu_cfg.h b/ESP32_PrusaConnectCam/mcu_cfg.h index 8b45f29..f81da76 100644 --- a/ESP32_PrusaConnectCam/mcu_cfg.h +++ b/ESP32_PrusaConnectCam/mcu_cfg.h @@ -13,6 +13,10 @@ #ifndef _MCU_CFG_H_ #define _MCU_CFG_H_ +/* ----------------- CAMERA TYPE ---------------*/ +#define AI_THINKER_ESP32_CAM +//#define ESP32_WROVER_DEV + /* ---------------- BASIC MCU CFG --------------*/ #define SW_VERSION "1.0.3" ///< SW version #define SW_BUILD __DATE__ " " __TIME__ ///< build number @@ -26,17 +30,7 @@ #define REFRESH_INTERVAL_MIN 10 ///< minimum refresh interval for sending photo to prusa connect [s] #define REFRESH_INTERVAL_MAX 240 ///< maximum refresh interval for sending photo to prusa connect [s] -/* --------------- FLASH LED CFG ---------------*/ -#define FLASH_GPIO_NUM 4 ///< GPIO pin for light -#define FLASH_OFF_STATUS 0 ///< PWM intensity LED for OFF. 0-2^FLASH_PWM_RESOLUTION = 0-255 -#define FLASH_ON_STATUS 205 ///< PWM intensity LED for ON. limitation to 80%. 2^FLASH_PWM_RESOLUTION * 0.8% = 204 -#define FLASH_PWM_FREQ 2000 ///< frequency of pwm [240MHz / (100 prescale * pwm cycles)] = frequency -#define FLASH_PWM_CHANNEL 0 ///< channel 0 -#define FLASH_PWM_RESOLUTION 8 ///< range 1-20bit. 8bit = 0-255 range - /* -------------- STATUS LED CFG ----------------*/ -#define STATUS_LED_GPIO_NUM 33 ///< GPIO pin for status LED -#define STATUS_LED_ENABLE true ///< enable/disable status LED #define STATUS_LED_ON_DURATION 100 ///< time for blink status LED when is module in the ON state [ms] #define STATUS_LED_WIFI_AP 400 ///< time for blink status LED when is module in the AP mode [ms] #define STATUS_LED_STA_CONNECTING 800 ///< time for blink status LED when is module connecting to the WiFi network [ms] @@ -65,10 +59,8 @@ /* --------------- OTA UPDATE CFG --------------*/ #define OTA_UPDATE_API_SERVER "api.github.com" ///< OTA update server URL #define OTA_UPDATE_API_URL F("/repos/prusa3d/Prusa-Firmware-ESP32-Cam/releases/latest") ///< path to file with OTA update -#define OTA_UPDATE_FW_FILE PSTR("ESP32_PrusaConnectCam.ino.bin") ///< OTA update firmware file name /* ---------- RESET CFG CONFIGURATION ----------*/ -#define CFG_RESET_PIN 12 ///< GPIO 16 is for reset CFG to default #define CFG_RESET_TIME_WAIT 10000 ///< wait to 10 000 ms = 10s for reset cfg during grounded CFG_RESET_PIN #define CFG_RESET_LOOP_DELAY 100 ///< delay in the loop for reset cfg diff --git a/ESP32_PrusaConnectCam/micro_sd.h b/ESP32_PrusaConnectCam/micro_sd.h index d39940d..5c65490 100644 --- a/ESP32_PrusaConnectCam/micro_sd.h +++ b/ESP32_PrusaConnectCam/micro_sd.h @@ -29,6 +29,7 @@ #include "SD_MMC.h" #include "mcu_cfg.h" +#include "module_templates.h" #include "var.h" class MicroSd { diff --git a/ESP32_PrusaConnectCam/module_AI_Thinker_ESP32-CAM.h b/ESP32_PrusaConnectCam/module_AI_Thinker_ESP32-CAM.h new file mode 100644 index 0000000..404b9d9 --- /dev/null +++ b/ESP32_PrusaConnectCam/module_AI_Thinker_ESP32-CAM.h @@ -0,0 +1,74 @@ +/** + @file module_AI_Thinker_ESP32-CAM.h + + @brief Definition of the AI Thinker ESP32-CAM module + + @author Miroslav Pivovarsky + Contact: miroslav.pivovarsky@gmail.com + + https://docs.ai-thinker.com/en/esp32-cam + + + Board configuration in the arduino IDE 2.3.2 + Tools -> Board -> ESP32 Arduino -> AI Thinker ESP32 + Tools -> CPU Frequency -> 240MHz (WiFi/BT) + Tools -> Core debug level -> None + Tools -> Flash frequency -> 80MHz + Tools -> Flash Mode -> DIO + Tools -> Partition scheme -> Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) + + @bug: no know bug + +*/ + +#ifndef __MODULE_AI_THINKER_ESP32_CAM_H__ +#define __MODULE_AI_THINKER_ESP32_CAM_H__ + +#include "mcu_cfg.h" + +#ifdef AI_THINKER_ESP32_CAM + +/* --------------- CAMERA CFG -------------------*/ +#define PWDN_GPIO_NUM 32 ///< Power down control pin +#define RESET_GPIO_NUM -1 ///< Reset control pin +#define XCLK_GPIO_NUM 0 ///< External clock pin +#define SIOD_GPIO_NUM 26 ///< SCCB: SI/O data pin +#define SIOC_GPIO_NUM 27 ///< SCCB: SI/O control pin +#define Y9_GPIO_NUM 35 ///< SCCB: Y9 pin +#define Y8_GPIO_NUM 34 ///< SCCB: Y8 pin +#define Y7_GPIO_NUM 39 ///< SCCB: Y7 pin +#define Y6_GPIO_NUM 36 ///< SCCB: Y6 pin +#define Y5_GPIO_NUM 21 ///< SCCB: Y5 pin +#define Y4_GPIO_NUM 19 ///< SCCB: Y4 pin +#define Y3_GPIO_NUM 18 ///< SCCB: Y3 pin +#define Y2_GPIO_NUM 5 ///< SCCB: Y2 pin +#define VSYNC_GPIO_NUM 25 ///< Vertical sync pin +#define HREF_GPIO_NUM 23 ///< Line sync pin +#define PCLK_GPIO_NUM 22 ///< Pixel clock pin + +/* --------------- OTA UPDATE CFG --------------*/ +#define OTA_UPDATE_FW_FILE PSTR("ESP32_PrusaConnectCam.ino.bin") ///< OTA update firmware file name + +/* --------------- FLASH LED CFG ---------------*/ +#define ENABLE_CAMERA_FLASH true ///< Enable camera flash function +#define FLASH_GPIO_NUM 4 ///< Flash control pin +#define FLASH_OFF_STATUS 0 ///< PWM intensity LED for OFF. 0-2^FLASH_PWM_RESOLUTION = 0-255 +#define FLASH_ON_STATUS 205 ///< PWM intensity LED for ON. limitation to 80%. 2^FLASH_PWM_RESOLUTION * 0.8% = 204 +#define FLASH_PWM_FREQ 2000 ///< frequency of pwm [240MHz / (100 prescale * pwm cycles)] = frequency +#define FLASH_PWM_CHANNEL 0 ///< channel 0 +#define FLASH_PWM_RESOLUTION 8 ///< range 1-20bit. 8bit = 0-255 range + +/* --------------- SD CARD CFG ---------------*/ +#define ENABLE_SD_CARD true ///< Enable SD card function + +/* ---------- RESET CFG CONFIGURATION ----------*/ +#define CFG_RESET_PIN 12 ///< GPIO 16 is for reset CFG to default + +/* -------------- STATUS LED CFG ----------------*/ +#define STATUS_LED_ENABLE true ///< enable/disable status LED +#define STATUS_LED_GPIO_NUM 33 ///< GPIO pin for status LED +#define STATUS_LED_OFF_PIN_LEVEL LOW ///< GPIO pin level for status LED ON + +#endif // AI_THINKER_ESP32_CAM +#endif // MODULE_AI_THINKER_ESP32_CAM_H +/* EOF */ \ No newline at end of file diff --git a/ESP32_PrusaConnectCam/module_ESP32-WROVER-DEV.h b/ESP32_PrusaConnectCam/module_ESP32-WROVER-DEV.h new file mode 100644 index 0000000..210ac09 --- /dev/null +++ b/ESP32_PrusaConnectCam/module_ESP32-WROVER-DEV.h @@ -0,0 +1,74 @@ +/** + @file module_ESP32-WROVER-DEV.h + + @brief Definition of the ESP32-WROVER-DEV + + @author Miroslav Pivovarsky + Contact: miroslav.pivovarsky@gmail.com + + https://github.com/Freenove/Freenove_ESP32_WROVER_Board + + + Board configuration in the arduino IDE 2.3.2 + Tools -> Board -> ESP32 Arduino -> ESP32 Wrover Module + Tools -> CPU Frequency -> 240MHz (WiFi/BT) + Tools -> Core debug level -> None + Tools -> Flash frequency -> 80MHz + Tools -> Flash Mode -> DIO + Tools -> Partition scheme -> Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS) + + @bug: no know bug + +*/ + +#ifndef __MODULE_ESP32_WROVER_DEV_H__ +#define __MODULE_ESP32_WROVER_DEV_H__ + +#include "mcu_cfg.h" + +#ifdef ESP32_WROVER_DEV + +/* --------------- CAMERA CFG -------------------*/ +#define PWDN_GPIO_NUM -1 ///< Power down control pin +#define RESET_GPIO_NUM -1 ///< Reset control pin +#define XCLK_GPIO_NUM 21 ///< External clock pin +#define SIOD_GPIO_NUM 26 ///< SCCB: SI/O data pin +#define SIOC_GPIO_NUM 27 ///< SCCB: SI/O control pin +#define Y9_GPIO_NUM 35 ///< SCCB: Y9 pin +#define Y8_GPIO_NUM 34 ///< SCCB: Y8 pin +#define Y7_GPIO_NUM 39 ///< SCCB: Y7 pin +#define Y6_GPIO_NUM 36 ///< SCCB: Y6 pin +#define Y5_GPIO_NUM 19 ///< SCCB: Y5 pin +#define Y4_GPIO_NUM 18 ///< SCCB: Y4 pin +#define Y3_GPIO_NUM 5 ///< SCCB: Y3 pin +#define Y2_GPIO_NUM 4 ///< SCCB: Y2 pin +#define VSYNC_GPIO_NUM 25 ///< Vertical sync pin +#define HREF_GPIO_NUM 23 ///< Line sync pin +#define PCLK_GPIO_NUM 22 ///< Pixel clock pin + +/* --------------- OTA UPDATE CFG --------------*/ +#define OTA_UPDATE_FW_FILE PSTR("ESP32_WROVER_DEV_PrusaConnectCam.ino.bin") ///< OTA update firmware file name + +/* --------------- FLASH LED CFG ---------------*/ +#define ENABLE_CAMERA_FLASH false ///< Enable camera flash function +#define FLASH_GPIO_NUM 4 ///< Flash control pin +#define FLASH_OFF_STATUS 0 ///< PWM intensity LED for OFF. 0-2^FLASH_PWM_RESOLUTION = 0-255 +#define FLASH_ON_STATUS 205 ///< PWM intensity LED for ON. limitation to 80%. 2^FLASH_PWM_RESOLUTION * 0.8% = 204 +#define FLASH_PWM_FREQ 2000 ///< frequency of pwm [240MHz / (100 prescale * pwm cycles)] = frequency +#define FLASH_PWM_CHANNEL 0 ///< channel 0 +#define FLASH_PWM_RESOLUTION 8 ///< range 1-20bit. 8bit = 0-255 range + +/* --------------- SD CARD CFG ---------------*/ +#define ENABLE_SD_CARD false ///< Enable SD card function + +/* ---------- RESET CFG CONFIGURATION ----------*/ +#define CFG_RESET_PIN 12 ///< GPIO 16 is for reset CFG to default + +/* -------------- STATUS LED CFG ----------------*/ +#define STATUS_LED_ENABLE true ///< enable/disable status LED +#define STATUS_LED_GPIO_NUM 2 ///< GPIO pin for status LED +#define STATUS_LED_OFF_PIN_LEVEL HIGH ///< GPIO pin level for status LED ON + +#endif // ESP32_WROVER_DEV +#endif // MODULE_ESP32_WROVER_DEV_H +/* EOF */ \ No newline at end of file diff --git a/ESP32_PrusaConnectCam/module_templates.h b/ESP32_PrusaConnectCam/module_templates.h new file mode 100644 index 0000000..d341375 --- /dev/null +++ b/ESP32_PrusaConnectCam/module_templates.h @@ -0,0 +1,27 @@ +/** + @file module_templates.h + + @brief Definition of the module templates + + @author Miroslav Pivovarsky + Contact: miroslav.pivovarsky@gmail.com + + @bug: no know bug + +*/ + +#ifndef __MODULE_TEMPLATES_H__ +#define __MODULE_TEMPLATES_H__ + +#include "mcu_cfg.h" + +#ifdef AI_THINKER_ESP32_CAM +#include "module_AI_Thinker_ESP32-CAM.h" +#endif + +#ifdef ESP32_WROVER_DEV +#include "module_ESP32-WROVER-DEV.h" +#endif + +#endif // MODULE_TEMPLATES_H +/* EOF */ \ No newline at end of file diff --git a/ESP32_PrusaConnectCam/server.cpp b/ESP32_PrusaConnectCam/server.cpp index ff97153..53f0dbf 100644 --- a/ESP32_PrusaConnectCam/server.cpp +++ b/ESP32_PrusaConnectCam/server.cpp @@ -696,13 +696,16 @@ void Server_InitWebServer_Sets() { if (request->hasParam("timelaps_enable")) { SystemLog.AddEvent(LogLevel_Verbose, F("Set timelaps enable")); +#if (ENABLE_SD_CARD == true) bool val = Server_TransfeStringToBool(request->getParam("timelaps_enable")->value()); if ((true == val ) && (SystemLog.GetCardDetectedStatus() == true)) { Connect.SetTimeLapsPhotoSaveStatus(val); } else { Connect.SetTimeLapsPhotoSaveStatus(false); } - +#else + Connect.SetTimeLapsPhotoSaveStatus(false); +#endif response = true; } diff --git a/ESP32_PrusaConnectCam/sys_led.cpp b/ESP32_PrusaConnectCam/sys_led.cpp index 998f987..208f6a3 100644 --- a/ESP32_PrusaConnectCam/sys_led.cpp +++ b/ESP32_PrusaConnectCam/sys_led.cpp @@ -45,7 +45,7 @@ sys_led::sys_led(uint8_t i_pin, uint32_t i_on_duration, Logs *i_log) { */ void sys_led::init() { pinMode(pin, OUTPUT); - digitalWrite(pin, LOW); + digitalWrite(pin, STATUS_LED_OFF_PIN_LEVEL); } /** @@ -91,7 +91,7 @@ void sys_led::setTimer(uint32_t i_time) { uint32_t sys_led::getTimer() { uint32_t tmp = 0; - if (digitalRead(pin) == LOW) { + if (digitalRead(pin) == STATUS_LED_OFF_PIN_LEVEL) { tmp = ledOnDuration; } else { tmp = time;