fixed entry-exit height difference bug for Multistage Experiment

This commit is contained in:
2026-02-09 12:57:40 -05:00
parent 09886e2e04
commit 1bddb4b58f
9 changed files with 2801 additions and 67 deletions

285
.ccls Normal file
View File

@@ -0,0 +1,285 @@
clang
%c -Wno-frame-address -std=gnu99 -Wno-old-style-declaration -Os -mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD
%cpp -Wno-frame-address -std=gnu++11 -fexceptions -fno-rtti -Os -mlongcalls -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD
-I/Users/hdh20267/Documents/pecan_ws/usda-platformio/include
-I/Users/hdh20267/Documents/pecan_ws/usda-platformio/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src
-I/Users/hdh20267/.platformio/lib/ArduinoJson/src
-I/Users/hdh20267/Documents/pecan_ws/usda-platformio/.pio/libdeps/esp32/PubSubClient/src
-I/Users/hdh20267/Documents/pecan_ws/usda-platformio/.pio/libdeps/esp32/FastAccelStepper/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/newlib/platform_include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions/freertos
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/port/xtensa/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freertos/include/esp_additions
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hw_support/port/esp32/private_include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/heap/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/log/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/include/apps/sntp
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/lwip/src/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/lwip/port/esp32/include/arch
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/soc/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/hal/platform_port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/include/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rom/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_common/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/soc
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_system/port/public_compat
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/xtensa/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/driver/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_pm/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ringbuf/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/efuse/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/vfs/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_wifi/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_event/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_netif/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_eth/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcpip_adapter/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_phy/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_ipc/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_trace/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_timer/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/mbedtls/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mbedtls/esp_crt_bundle/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/app_update/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spi_flash/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bootloader_support/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nvs_flash/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/pthread/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/xtensa
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_gdbstub/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espcoredump/include/port/xtensa
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wpa_supplicant/esp_supplicant/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ieee802154/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/console
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/asio/asio/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/asio/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/osi/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/include/esp32/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/api/include/api
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/blufi/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/common/btc/profile/esp/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/host/bluedroid/api/include/api
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_core/storage
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/btc/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/common/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/client/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/mesh_models/server/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/core/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api/models/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/bt/esp_ble_mesh/api
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cbor/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/unity/unity/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/cmock/CMock/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/coap/libcoap/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/nghttp/nghttp2/lib/includes
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-tls/esp-tls-crypto
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_adc_cal/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_hid/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/tcp_transport/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_client/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_http_server/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_ota/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_https_server/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_lcd/interface
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protobuf-c/protobuf-c
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/common
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/security
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/protocomm/include/transports
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mdns/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_local_ctrl/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/sdmmc/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_serial_slave_link/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_websocket_client/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/expat/expat/lib
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/expat/port/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wear_levelling/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/diskio
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/vfs
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fatfs/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/freemodbus/freemodbus/common/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/idf_test/include/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/jsmn/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json/cJSON
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/libsodium/src/libsodium/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/libsodium/port_include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/mqtt/esp-mqtt/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/openssl/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/perfmon/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/spiffs/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ulp/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/wifi_provisioning/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rmaker_common/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_diagnostics/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/rtc_store/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_insights/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_parser/upstream
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/json_generator/upstream
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_schedule/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp_secure_cert_mgr/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_rainmaker/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/gpio_button/button/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/qrcode/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/ws2812_led
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp_littlefs/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/tool
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/typedef
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/image
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/math
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/nn
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/layer
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/detect
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp-dl/include/model_zoo
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/driver/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/esp32-camera/conversions/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dotprod/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/support/mem/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/hann/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_harris/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/nuttall/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/windows/flat_top/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/iir/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fir/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/add/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sub/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mul/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/addc/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/mulc/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/math/sqrt/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/matrix/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/fft/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/dct/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/conv/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/common/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/include/fb_gfx/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32/dio_qspi/include
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/cores/esp32
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/variants/esp32
-I/Users/hdh20267/.platformio/lib/AsyncMqttClient-esphome/src
-I/Users/hdh20267/.platformio/lib/AsyncTCP-esphome/src
-I/Users/hdh20267/.platformio/lib/Crypto
-I/Users/hdh20267/.platformio/lib/Dsmr/src
-I/Users/hdh20267/.platformio/lib/ESP32-audioI2S/src
-I/Users/hdh20267/.platformio/lib/ESPAsyncWebServer-esphome/src
-I/Users/hdh20267/.platformio/lib/FastLED
-I/Users/hdh20267/.platformio/lib/HaierProtocol/include
-I/Users/hdh20267/.platformio/lib/HaierProtocol/src
-I/Users/hdh20267/.platformio/lib/HeatpumpIR
-I/Users/hdh20267/.platformio/lib/IRremoteESP8266/src
-I/Users/hdh20267/.platformio/lib/Improv/src
-I/Users/hdh20267/.platformio/lib/MideaUART/include
-I/Users/hdh20267/.platformio/lib/MideaUART/src
-I/Users/hdh20267/.platformio/lib/NeoPixelBus/src
-I/Users/hdh20267/.platformio/lib/TM1651
-I/Users/hdh20267/.platformio/lib/TinyGPSPlus/src
-I/Users/hdh20267/.platformio/lib/arduino-MLX90393
-I/Users/hdh20267/.platformio/lib/esp_wireguard/include
-I/Users/hdh20267/.platformio/lib/esp_wireguard/src
-I/Users/hdh20267/.platformio/lib/libsodium/libsodium/src/libsodium/include
-I/Users/hdh20267/.platformio/lib/libsodium/libsodium/src/libsodium
-I/Users/hdh20267/.platformio/lib/libsodium/libsodium/src/libsodium/include/sodium
-I/Users/hdh20267/.platformio/lib/libsodium/port_include
-I/Users/hdh20267/.platformio/lib/noise-c/include
-I/Users/hdh20267/.platformio/lib/noise-c/src
-I/Users/hdh20267/.platformio/lib/noise-c@0.1.1/include
-I/Users/hdh20267/.platformio/lib/noise-c@0.1.1/src
-I/Users/hdh20267/.platformio/lib/qr-code-generator-library/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/FS/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/SD/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/USB/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/Update/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src
-I/Users/hdh20267/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src
-I/Users/hdh20267/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0
-I/Users/hdh20267/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include/c++/8.4.0/xtensa-esp32-elf
-I/Users/hdh20267/.platformio/packages/toolchain-xtensa-esp32/lib/gcc/xtensa-esp32-elf/8.4.0/include
-I/Users/hdh20267/.platformio/packages/toolchain-xtensa-esp32/lib/gcc/xtensa-esp32-elf/8.4.0/include-fixed
-I/Users/hdh20267/.platformio/packages/toolchain-xtensa-esp32/xtensa-esp32-elf/include
-DPLATFORMIO=60116
-DARDUINO_ESP32_DEV
-DHAVE_CONFIG_H
-DMBEDTLS_CONFIG_FILE="mbedtls/esp_config.h"
-DUNITY_INCLUDE_CONFIG_H
-DWITH_POSIX
-D_GNU_SOURCE
-DIDF_VER="v4.4.6-dirty"
-DESP_PLATFORM
-D_POSIX_READER_WRITER_LOCKS
-DARDUINO_ARCH_ESP32
-DESP32
-DF_CPU=240000000L
-DARDUINO=10812
-DARDUINO_VARIANT="esp32"
-DARDUINO_BOARD="Espressif ESP32 Dev Module"
-DARDUINO_PARTITION_default

19
.clangd Normal file
View File

@@ -0,0 +1,19 @@
CompileFlags:
Add:
[
-mlong-calls,
-DSSIZE_MAX,
-DLWIP_NO_UNISTD_H=1,
-Dssize_t=long,
-D_SSIZE_T_DECLARED,
]
Remove:
[
-fno-tree-switch-conversion,
-f*,
-mtext-section-literals,
-mlongcalls,
-fstrict-volatile-bitfields,
-free,
-fipa-pta,
]

4
.gitignore vendored
View File

@@ -1,5 +1,7 @@
.pio
.pio/
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
build/
.cache/

3
CMakeLists.txt Normal file
View File

@@ -0,0 +1,3 @@
cmake_minimum_required(VERSION 3.16.0)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(usda-platformio)

440
compile_commands.json Normal file

File diff suppressed because one or more lines are too long

View File

@@ -17,4 +17,6 @@ lib_deps =
PubSubClient
ArduinoJson
RotaryEncoder
ArduinoOTA
ESPmDNS

1866
sdkconfig.esp32 Normal file

File diff suppressed because it is too large Load Diff

6
src/CMakeLists.txt Normal file
View File

@@ -0,0 +1,6 @@
# This file was automatically generated for projects
# without default 'CMakeLists.txt' file.
FILE(GLOB_RECURSE app_sources ${CMAKE_SOURCE_DIR}/src/*.*)
idf_component_register(SRCS ${app_sources})

View File

@@ -5,40 +5,46 @@
#include <RotaryEncoder.h>
#include <EEPROM.h>
const uint8_t bottom_dir_pin = 5, top_dir_pin = 18;
const uint8_t bottom_dir_pin = 5, top_dir_pin = 18;
const uint8_t bottom_step_pin = 4, top_step_pin = 17;
const uint8_t bottom_en_pin = 12, top_en_pin = 16;
const uint8_t bottom_en_pin = 12, top_en_pin = 16;
const uint8_t encoder_a = 19, encoder_b = 21;
#define EEPROM_SIZE 18
#define EEPROM_BOTTOM_POS_ADDR 0
#define EEPROM_TOP_POS_ADDR 4
#define EEPROM_FLAG_ADDR 8
#define EEPROM_BOTTOM_POS_ADDR 0 // 0..3
#define EEPROM_TOP_POS_ADDR 4 // 4..7
#define EEPROM_FLAG_ADDR 8
#define EEPROM_BOTTOM_MOVING_FLAG_ADDR 9
#define EEPROM_TOP_MOVING_FLAG_ADDR 10
#define EEPROM_TOP_BOTTOM_DIFF_ADDR 11
#define EEPROM_TOP_MOVING_FLAG_ADDR 10
#define EEPROM_TOP_BOTTOM_DIFF_ADDR 11 // 11..14 (4 bytes)
#define HOMING_FLAG 0x01
#define NORMAL_FLAG 0x00
#define MOVING_FLAG_SET 0xAA
#define MOVING_FLAG_SET 0xAA
#define MOVING_FLAG_CLEAR 0x00
const char *ssid = "IOT-pecan";
const char *password = "aaaaaaaa";
const char *mqttServer = "192.168.1.110";
const int mqttPort = 1883;
const char *mqttHeightTopic = "/jc/height";
const char *mqttAngleTopic = "/jc/angle";
const char *mqttStopTopic = "/jc/stop";
const char *mqttHomingFlagTopic = "/jc/homing_mode";
const char *mqttDebugTopic = "/jc/debug";
const char *mqttStatusTopic = "/jc/status";
const char *mqttHeightLogTopic = "/jc/height/log";
const char *mqttAngleLogTopic = "/jc/angle/log";
const char *mqttRPMLogTopic = "/jc/rpm/log";
const char *mqttHeightTopic = "/jc/height";
const char *mqttAngleTopic = "/jc/angle";
const char *mqttStopTopic = "/jc/stop";
const char *mqttHomingFlagTopic = "/jc/homing_mode";
const char *mqttDebugTopic = "/jc/debug";
const char *mqttStatusTopic = "/jc/status";
const char *mqttHeightLogTopic = "/jc/height/log";
const char *mqttAngleLogTopic = "/jc/angle/log";
const char *mqttRPMLogTopic = "/jc/rpm/log";
const int steps_per_thou = 22;
// Mechanical limits in steps (negative = more closed)
static const long POS_MAX_STEPS = 0;
static const long POS_MIN_STEPS = -1665L * steps_per_thou;
FastAccelStepperEngine engine = FastAccelStepperEngine();
FastAccelStepper *bottom_stepper = nullptr;
FastAccelStepper *top_stepper = nullptr;
@@ -48,58 +54,116 @@ RotaryEncoder encoder(encoder_a, encoder_b);
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);
// Commanded goals
volatile long bottom_step_goal = 0, top_step_goal = 0;
// Commanded "crush" meaning: MIN(bottom, top) == crush_min_steps
volatile long crush_min_steps = 0;
// Angle difference (top - bottom) in steps
volatile long top_angle_difference_steps = 0;
volatile bool bottom_step_done = true, top_step_done = true;
volatile bool bottom_step_sent = false, top_step_sent = false;
volatile bool stop = false;
bool system_locked = false;
void writePositionToEEPROM(int addr, long pos)
{
EEPROM.write(addr, (pos >> 24) & 0xFF);
EEPROM.write(addr + 1, (pos >> 16) & 0xFF);
EEPROM.write(addr + 2, (pos >> 8) & 0xFF);
EEPROM.write(addr + 3, pos & 0xFF);
static void mqttDebugf(const char *fmt, long v) {
char buf[128];
snprintf(buf, sizeof(buf), fmt, v);
mqttClient.publish(mqttDebugTopic, buf);
}
long readPositionFromEEPROM(int addr)
static void writePositionToEEPROM(int addr, long pos)
{
long pos = ((long)EEPROM.read(addr) << 24) |
EEPROM.write(addr, (pos >> 24) & 0xFF);
EEPROM.write(addr + 1, (pos >> 16) & 0xFF);
EEPROM.write(addr + 2, (pos >> 8) & 0xFF);
EEPROM.write(addr + 3, (pos ) & 0xFF);
}
static long readPositionFromEEPROM(int addr)
{
long pos = ((long)EEPROM.read(addr) << 24) |
((long)EEPROM.read(addr + 1) << 16) |
((long)EEPROM.read(addr + 2) << 8) |
(long)EEPROM.read(addr + 3);
((long)EEPROM.read(addr + 2) << 8) |
((long)EEPROM.read(addr + 3));
return pos;
}
volatile long top_angle_difference_steps = readPositionFromEEPROM(EEPROM_TOP_BOTTOM_DIFF_ADDR);
static inline long clampLong(long v, long lo, long hi) {
if (v < lo) return lo;
if (v > hi) return hi;
return v;
}
// Recompute bottom_step_goal and top_step_goal so that:
// min(bottom, top) == crush_min_steps
// top - bottom == top_angle_difference_steps (as much as limits allow)
//
// After clamping, we update crush_min_steps to the achieved min so later angle
// changes don't "resurrect" an impossible crush target.
static void recomputeGoalsFromCrushAndDiff()
{
long diff = top_angle_difference_steps;
long bottomGoal, topGoal;
// Ensure crush_min_steps is within physical limits first.
crush_min_steps = clampLong(crush_min_steps, POS_MIN_STEPS, POS_MAX_STEPS);
if (diff >= 0) {
// bottom is the min (more crushed)
bottomGoal = crush_min_steps;
topGoal = crush_min_steps + diff;
} else {
// top is the min (more crushed)
topGoal = crush_min_steps;
bottomGoal = crush_min_steps - diff; // subtract negative => add magnitude
}
// Clamp both to physical limits (this can distort diff near bounds).
bottomGoal = clampLong(bottomGoal, POS_MIN_STEPS, POS_MAX_STEPS);
topGoal = clampLong(topGoal, POS_MIN_STEPS, POS_MAX_STEPS);
bottom_step_goal = bottomGoal;
top_step_goal = topGoal;
// Update crush_min_steps to what we can actually achieve.
crush_min_steps = (bottomGoal < topGoal) ? bottomGoal : topGoal;
bottom_step_done = false; bottom_step_sent = false;
top_step_done = false; top_step_sent = false;
}
void callback(char *topic, byte *payload, unsigned int length)
{
String topic_str = String(topic);
String payload_str = "";
for (unsigned int i = 0; i < length; i++)
payload_str += (char)payload[i];
int value = payload_str.toInt();
String topic_str(topic);
String payload_str;
payload_str.reserve(length);
for (unsigned int i = 0; i < length; i++) payload_str += (char)payload[i];
long value = payload_str.toInt();
if (topic_str == mqttHeightTopic && !system_locked)
{
value -= 1875 - 210;
// Convert incoming "height" into steps. Keeping your original offset logic.
// (If this is wrong, it's wrong consistently, at least.)
value -= (1875 - 210);
value *= steps_per_thou;
stop = false;
bottom_step_goal = value;
bottom_step_done = false;
bottom_step_sent = false;
top_step_goal = value + top_angle_difference_steps;
top_step_done = false;
top_step_sent = false;
crush_min_steps = value;
recomputeGoalsFromCrushAndDiff();
}
else if (topic_str == mqttAngleTopic && !system_locked)
{
stop = false;
// value is in thou, convert to steps
top_angle_difference_steps = value * steps_per_thou;
top_step_goal = bottom_step_goal + top_angle_difference_steps;
top_step_done = false;
top_step_sent = false;
recomputeGoalsFromCrushAndDiff();
}
else if (topic_str == mqttStopTopic && !system_locked)
{
@@ -119,23 +183,14 @@ void callback(char *topic, byte *payload, unsigned int length)
}
EEPROM.commit();
}
if (top_step_goal < -1665 * steps_per_thou)
top_step_goal = -1665 * steps_per_thou;
if (bottom_step_goal < -1665 * steps_per_thou)
bottom_step_goal = -1665 * steps_per_thou;
if (top_step_goal > 0)
top_step_goal = 0;
if (bottom_step_goal > 0)
bottom_step_goal = 0;
}
void reconnect()
{
while (!mqttClient.connected())
{
if (WiFi.status() != WL_CONNECTED)
WiFi.reconnect();
if (WiFi.status() != WL_CONNECTED) WiFi.reconnect();
Serial.println("Attempting MQTT connection...");
if (mqttClient.connect("ESP32Client"))
{
@@ -160,9 +215,13 @@ long last_publish_time = 0;
void setup()
{
Serial.begin(9600);
EEPROM.begin(EEPROM_SIZE);
engine.init();
// Now it's legal to read EEPROM-backed values.
top_angle_difference_steps = readPositionFromEEPROM(EEPROM_TOP_BOTTOM_DIFF_ADDR);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
@@ -174,13 +233,24 @@ void setup()
mqttClient.setServer(mqttServer, mqttPort);
mqttClient.setCallback(callback);
// Establish MQTT connection before any publish attempts.
reconnect();
uint8_t startupFlag = EEPROM.read(EEPROM_FLAG_ADDR);
Serial.print("Startup flag: ");
Serial.println(startupFlag);
if (startupFlag == HOMING_FLAG) {
top_angle_difference_steps = 0;
writePositionToEEPROM(EEPROM_TOP_BOTTOM_DIFF_ADDR, 0);
EEPROM.commit();
mqttClient.publish(mqttDebugTopic, "HOMING: angle diff reset to 0");
}
uint8_t bottomMovingFlag = EEPROM.read(EEPROM_BOTTOM_MOVING_FLAG_ADDR);
uint8_t topMovingFlag = EEPROM.read(EEPROM_TOP_MOVING_FLAG_ADDR);
if (startupFlag != HOMING_FLAG && (bottomMovingFlag != MOVING_FLAG_CLEAR || topMovingFlag != MOVING_FLAG_CLEAR))
uint8_t topMovingFlag = EEPROM.read(EEPROM_TOP_MOVING_FLAG_ADDR);
if (startupFlag != HOMING_FLAG &&
(bottomMovingFlag != MOVING_FLAG_CLEAR || topMovingFlag != MOVING_FLAG_CLEAR))
{
system_locked = true;
mqttClient.publish(mqttDebugTopic, "FAULT: NEEDS HOMING RESET");
@@ -196,6 +266,7 @@ void setup()
bottom_stepper->setEnablePin(bottom_en_pin, false);
bottom_stepper->setSpeedInHz(1000);
bottom_stepper->setAcceleration(250);
if (startupFlag == HOMING_FLAG)
{
Serial.println("Starting in homing mode (bottom)");
@@ -210,9 +281,13 @@ void setup()
{
bottom_stepper->setCurrentPosition(readPositionFromEEPROM(EEPROM_BOTTOM_POS_ADDR));
mqttClient.publish(mqttDebugTopic, "Started in NORMAL mode");
mqttClient.publish(mqttDebugTopic, "Bottom stepper loaded %d position from EEPROM", bottom_stepper->getCurrentPosition());
mqttDebugf("Bottom stepper loaded %ld position from EEPROM", bottom_stepper->getCurrentPosition());
}
}
else
{
mqttClient.publish(mqttDebugTopic, "ERROR: bottom_stepper init failed");
}
top_stepper = engine.stepperConnectToPin(top_step_pin);
if (top_stepper)
@@ -221,6 +296,7 @@ void setup()
top_stepper->setEnablePin(top_en_pin, false);
top_stepper->setSpeedInHz(1000);
top_stepper->setAcceleration(250);
if (startupFlag == HOMING_FLAG)
{
Serial.println("Starting in homing mode (top)");
@@ -232,15 +308,30 @@ void setup()
else
{
top_stepper->setCurrentPosition(readPositionFromEEPROM(EEPROM_TOP_POS_ADDR));
mqttClient.publish(mqttDebugTopic, "Top stepper loaded %d position from EEPROM", top_stepper->getCurrentPosition());
mqttDebugf("Top stepper loaded %ld position from EEPROM", top_stepper->getCurrentPosition());
}
}
else
{
mqttClient.publish(mqttDebugTopic, "ERROR: top_stepper init failed");
}
// Initialize crush_min_steps to current achieved minimum so angle changes don't jump.
if (bottom_stepper && top_stepper) {
long b = bottom_stepper->getCurrentPosition();
long t = top_stepper->getCurrentPosition();
crush_min_steps = (b < t) ? b : t;
} else {
crush_min_steps = 0;
}
// Ensure goals are consistent with stored diff at startup.
recomputeGoalsFromCrushAndDiff();
}
void loop()
{
if (!mqttClient.connected())
reconnect();
if (!mqttClient.connected()) reconnect();
mqttClient.loop();
encoder.tick();
@@ -248,11 +339,23 @@ void loop()
if (millis() - last_publish_time > 1000)
{
last_publish_time = millis();
mqttClient.publish(mqttHeightLogTopic, String(1665 + bottom_stepper->getCurrentPosition() / steps_per_thou).c_str());
mqttClient.publish(mqttAngleLogTopic, String((top_stepper->getCurrentPosition() - bottom_stepper->getCurrentPosition()) / steps_per_thou).c_str());
if (bottom_stepper && top_stepper) {
mqttClient.publish(mqttHeightLogTopic,
String(1665 + bottom_stepper->getCurrentPosition() / steps_per_thou).c_str());
mqttClient.publish(mqttAngleLogTopic,
String((top_stepper->getCurrentPosition() - bottom_stepper->getCurrentPosition()) / steps_per_thou).c_str());
}
mqttClient.publish(mqttRPMLogTopic, String(encoder.getRPM()).c_str());
}
if (!bottom_stepper || !top_stepper) {
// If steppers didn't init, don't crash the MCU trying anyway.
return;
}
if (system_locked)
{
bottom_stepper->disableOutputs();
@@ -271,7 +374,8 @@ void loop()
top_stepper->enableOutputs();
}
if (bottom_stepper->getCurrentPosition() != bottom_step_goal && !bottom_step_done && !bottom_step_sent)
if (bottom_stepper->getCurrentPosition() != bottom_step_goal &&
!bottom_step_done && !bottom_step_sent)
{
bottom_stepper->moveTo(bottom_step_goal);
bottom_step_sent = true;
@@ -280,7 +384,8 @@ void loop()
Serial.println("Moving bottom stepper");
}
if (top_stepper->getCurrentPosition() != top_step_goal && !top_step_done && !top_step_sent)
if (top_stepper->getCurrentPosition() != top_step_goal &&
!top_step_done && !top_step_sent)
{
top_stepper->moveTo(top_step_goal);
top_step_sent = true;
@@ -289,25 +394,31 @@ void loop()
Serial.println("Moving top stepper");
}
if (bottom_stepper->getCurrentPosition() == bottom_step_goal && !bottom_step_done && bottom_step_sent)
if (bottom_stepper->getCurrentPosition() == bottom_step_goal &&
!bottom_step_done && bottom_step_sent)
{
bottom_step_done = true;
bottom_step_sent = false;
writePositionToEEPROM(EEPROM_BOTTOM_POS_ADDR, bottom_stepper->getCurrentPosition());
writePositionToEEPROM(EEPROM_TOP_BOTTOM_DIFF_ADDR, top_angle_difference_steps);
EEPROM.write(EEPROM_BOTTOM_MOVING_FLAG_ADDR, MOVING_FLAG_CLEAR);
EEPROM.commit();
Serial.println("Bottom stepper done");
}
if (top_stepper->getCurrentPosition() == top_step_goal && !top_step_done && top_step_sent)
if (top_stepper->getCurrentPosition() == top_step_goal &&
!top_step_done && top_step_sent)
{
top_step_done = true;
top_step_sent = false;
writePositionToEEPROM(EEPROM_TOP_POS_ADDR, top_stepper->getCurrentPosition());
writePositionToEEPROM(EEPROM_TOP_BOTTOM_DIFF_ADDR, top_angle_difference_steps);
EEPROM.write(EEPROM_TOP_MOVING_FLAG_ADDR, MOVING_FLAG_CLEAR);
EEPROM.commit();
Serial.println("Top stepper done");
}
}