diff --git a/function-diagram.drawio b/function-diagram.drawio index 4a09147..d73ef85 100644 --- a/function-diagram.drawio +++ b/function-diagram.drawio @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/function-diagram.drawio.pdf b/function-diagram.drawio.pdf index 648b948..21e29cc 100644 Binary files a/function-diagram.drawio.pdf and b/function-diagram.drawio.pdf differ diff --git a/main/control.cpp b/main/control.cpp index 8c83fef..62cb483 100644 --- a/main/control.cpp +++ b/main/control.cpp @@ -137,6 +137,32 @@ bool handleStopCondition(){ } } + +//===== set dynamic speed level ===== +//function that sets the vfd speed level dynamicly depending on the remaining distance +//closer to target -> slower +void setDynSpeedLvl(uint8_t lvlMax = 3){ + uint8_t lvl; + //define speed level according to difference + if (lengthRemaining < 50) { + lvl = 0; + } else if (lengthRemaining < 200) { + lvl = 1; + } else if (lengthRemaining < 600) { + lvl = 2; + } else { //more than last step remaining + lvl = 3; + } + //limit to max lvl + if (lvl > lvlMax){ + lvl = lvlMax; + } + //update vfd speed level + vfd_setSpeedLevel(lvl); +} + + + //======================== //===== control task ===== @@ -151,7 +177,7 @@ void task_control(void *pvParameter) //----------------------------------- //------- display welcome msg ------- //----------------------------------- - //display welcome message on 2 7 segment displays + //display welcome message on two 7 segment displays //show name and date ESP_LOGI(TAG, "showing startup message..."); max7219_clear(&display); @@ -166,6 +192,7 @@ void task_control(void *pvParameter) vTaskDelay(pdMS_TO_TICKS(50)); } + //================ //===== loop ===== //================ @@ -184,6 +211,7 @@ void task_control(void *pvParameter) SW_PRESET3.handle(); + //---------------------------- //------ rotary encoder ------ //---------------------------- @@ -194,7 +222,6 @@ void task_control(void *pvParameter) - //--------------------------- //--------- buttons --------- //--------------------------- @@ -281,26 +308,20 @@ void task_control(void *pvParameter) break; case WINDING_START: //wind slow for certain time - //TODO: cancel when there is no cable movement anymore e.g. empty + //set vfd speed depending on remaining distance + setDynSpeedLvl(1); //limit to speed lvl 1 (force slow start) if (esp_log_timestamp() - timestamp_motorStarted > 2000) { changeState(WINDING); } handleStopCondition(); //stops if button released or target reached + //TODO: cancel when there was no cable movement during start time? break; - case WINDING: //wind at dynamic speed - //adjust speed according to difference - if (lengthRemaining < 50) { - vfd_setSpeedLevel(0); - } else if (lengthRemaining < 200) { - vfd_setSpeedLevel(1); - } else if (lengthRemaining < 600) { - vfd_setSpeedLevel(2); - } else { //more than last step remaining - vfd_setSpeedLevel(3); - } - //TODO add timeout + case WINDING: //wind fast, slow down when close + //set vfd speed depending on remaining distance + setDynSpeedLvl(); //slow down when close to target handleStopCondition(); //stops if button released or target reached + //TODO: cancel when there is no cable movement anymore e.g. empty / timeout? break; case TARGET_REACHED: