diff --git a/.vscode/c_cpp_properties (SFConflict ispatel@live.com 2026-06-20-17-21-07).json b/.vscode/c_cpp_properties (SFConflict ispatel@live.com 2026-06-20-17-21-07).json new file mode 100644 index 0000000..461baac --- /dev/null +++ b/.vscode/c_cpp_properties (SFConflict ispatel@live.com 2026-06-20-17-21-07).json @@ -0,0 +1,538 @@ +// +// !!! WARNING !!! AUTO-GENERATED FILE! +// PLEASE DO NOT MODIFY IT AND USE "platformio.ini": +// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags +// +{ + "configurations": [ + { + "name": "PlatformIO", + "includePath": [ + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/include", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/src", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit INA219", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit BusIO", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/hd44780", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/newlib/platform_include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions/freertos", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/port/xtensa/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3/private_include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/heap/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/log/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps/sntp", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/lwip/src/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include/arch", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/platform_port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/soc", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/public_compat", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_pm/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ringbuf/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/vfs/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_wifi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_event/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_netif/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_eth/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcpip_adapter/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ipc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_trace/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_timer/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/mbedtls/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/esp_crt_bundle/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_update/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spi_flash/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bootloader_support/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nvs_flash/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/pthread/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/xtensa", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include/port/xtensa", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/esp_supplicant/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ieee802154/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/console", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/asio/asio/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/osi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/include/esp32c3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/api/include/api", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/blufi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/host/bluedroid/api/include/api", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/storage", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/btc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/client/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/server/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/core/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/models/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cbor/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/unity/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cmock/CMock/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/libcoap/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/nghttp2/lib/includes", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls/esp-tls-crypto", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_adc_cal/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hid/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcp_transport/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_client/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_server/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_ota/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_server/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/interface", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protobuf-c/protobuf-c", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/common", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/security", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/transports", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mdns/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_local_ctrl/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/sdmmc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_serial_slave_link/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_websocket_client/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/expat/expat/lib", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wear_levelling/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/diskio", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/vfs", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freemodbus/freemodbus/common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/jsmn/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json/cJSON", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/libsodium/src/libsodium/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/port_include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mqtt/esp-mqtt/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/openssl/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/perfmon/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spiffs/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/usb/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ulp/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wifi_provisioning/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rmaker_common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_diagnostics/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rtc_store/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_insights/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_generator/upstream", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_schedule/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp_secure_cert_mgr/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rainmaker/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/gpio_button/button/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/qrcode/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ws2812_led", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/freertos", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/tinyusb/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_littlefs/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/tool", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/typedef", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/image", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/math", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/nn", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/layer", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/detect", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/model_zoo", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/driver/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/conversions/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dotprod/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/mem/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/hann/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_harris/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/nuttall/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/flat_top/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/iir/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fir/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/add/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sub/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mul/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/addc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mulc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sqrt/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/add/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/addc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mulc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/sub/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fft/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dct/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/conv/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/test/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fb_gfx/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/qio_opi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/cores/esp32", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/variants/esp32s3", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit GFX Library", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit NeoPixel", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit SSD1306", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/FS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SD/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/USB/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Update/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src", + "" + ], + "browse": { + "limitSymbolsToIncludedHeaders": true, + "path": [ + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/include", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/src", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit INA219", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit BusIO", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/hd44780", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/newlib/platform_include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions/freertos", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/port/xtensa/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/esp_additions", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/include/soc/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hw_support/port/esp32s3/private_include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/heap/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/log/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/include/apps/sntp", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/lwip/src/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/lwip/port/esp32/include/arch", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/soc/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/hal/platform_port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/include/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rom/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/soc", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_system/port/public_compat", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/xtensa/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/driver/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_pm/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ringbuf/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/efuse/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/vfs/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_wifi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_event/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_netif/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_eth/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcpip_adapter/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_phy/esp32s3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_ipc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_trace/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_timer/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/mbedtls/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mbedtls/esp_crt_bundle/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/app_update/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spi_flash/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bootloader_support/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nvs_flash/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/pthread/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/xtensa", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_gdbstub/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espcoredump/include/port/xtensa", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wpa_supplicant/esp_supplicant/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ieee802154/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/console", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/asio/asio/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/asio/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/osi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/include/esp32c3/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/api/include/api", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/blufi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/common/btc/profile/esp/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/host/bluedroid/api/include/api", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_core/storage", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/btc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/client/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/mesh_models/server/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/core/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api/models/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/bt/esp_ble_mesh/api", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cbor/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/unity/unity/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/cmock/CMock/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/coap/libcoap/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/nghttp/nghttp2/lib/includes", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-tls/esp-tls-crypto", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_adc_cal/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_hid/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/tcp_transport/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_client/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_http_server/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_ota/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_https_server/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_lcd/interface", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protobuf-c/protobuf-c", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/common", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/security", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/protocomm/include/transports", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mdns/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_local_ctrl/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/sdmmc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_serial_slave_link/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_websocket_client/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/expat/expat/lib", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/expat/port/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wear_levelling/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/diskio", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/vfs", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fatfs/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freemodbus/freemodbus/common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/idf_test/include/esp32s3", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/jsmn/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json/cJSON", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/libsodium/src/libsodium/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/libsodium/port_include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/mqtt/esp-mqtt/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/openssl/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/perfmon/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/spiffs/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/usb/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ulp/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/wifi_provisioning/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rmaker_common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_diagnostics/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/rtc_store/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_insights/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_parser/upstream", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/json_generator/upstream", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_schedule/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp_secure_cert_mgr/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_rainmaker/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/gpio_button/button/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/qrcode/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/ws2812_led", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/freertos/include/freertos", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/tinyusb/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/arduino_tinyusb/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp_littlefs/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/tool", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/typedef", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/image", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/math", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/nn", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/layer", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/detect", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp-dl/include/model_zoo", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/driver/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/esp32-camera/conversions/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dotprod/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/support/mem/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/hann/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_harris/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/blackman_nuttall/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/nuttall/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/windows/flat_top/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/iir/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fir/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/add/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sub/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mul/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/addc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/mulc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/math/sqrt/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/add/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/addc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mulc/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/sub/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/fft/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/dct/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/conv/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/common/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/matrix/mul/test/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/espressif__esp-dsp/modules/kalman/ekf_imu13states/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/include/fb_gfx/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32s3/qio_opi/include", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/cores/esp32", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/variants/esp32s3", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit GFX Library", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit NeoPixel", + "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/libdeps/freenove_esp32_s3_wroom/Adafruit SSD1306", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/FS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Insights/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SD/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/USB/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/Update/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src", + "/home/thebears/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src", + "" + ] + }, + "defines": [ + "PLATFORMIO=60119", + "ARDUINO_ESP32S3_DEV", + "ARDUINO_RUNNING_CORE=1", + "ARDUINO_EVENT_RUNNING_CORE=1", + "BOARD_HAS_PSRAM", + "ARDUINO_USB_MODE=0", + "ARDUINO_USB_CDC_ON_BOOT=0", + "BOARD_HAS_PSRAM", + "CORE_DEBUG_LEVEL=5", + "ARDUINO_USB_MODE=1", + "ARDUINO_USB_CDC_ON_BOOT=1", + "HAVE_CONFIG_H", + "MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"", + "UNITY_INCLUDE_CONFIG_H", + "WITH_POSIX", + "_GNU_SOURCE", + "IDF_VER=\"v4.4.7-dirty\"", + "ESP_PLATFORM", + "_POSIX_READER_WRITER_LOCKS", + "ARDUINO_ARCH_ESP32", + "ESP32", + "F_CPU=240000000L", + "ARDUINO=10812", + "ARDUINO_VARIANT=\"esp32s3\"", + "ARDUINO_BOARD=\"Freenove ESP32-S3 WROOM N8R8 (8MB Flash / 8MB PSRAM)\"", + "ARDUINO_PARTITION_default_16MB", + "" + ], + "cStandard": "gnu99", + "cppStandard": "gnu++11", + "compilerPath": "/home/thebears/.platformio/packages/toolchain-xtensa-esp32s3/bin/xtensa-esp32s3-elf-gcc", + "compilerArgs": [ + "-mlongcalls", + "" + ] + } + ], + "version": 4 +} diff --git a/.vscode/extensions (SFConflict ispatel@live.com 2026-06-20-17-21-07).json b/.vscode/extensions (SFConflict ispatel@live.com 2026-06-20-17-21-07).json new file mode 100644 index 0000000..080e70d --- /dev/null +++ b/.vscode/extensions (SFConflict ispatel@live.com 2026-06-20-17-21-07).json @@ -0,0 +1,10 @@ +{ + // See http://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" + ] +} diff --git a/.vscode/launch (SFConflict ispatel@live.com 2026-06-20-17-21-07).json b/.vscode/launch (SFConflict ispatel@live.com 2026-06-20-17-21-07).json new file mode 100644 index 0000000..b084096 --- /dev/null +++ b/.vscode/launch (SFConflict ispatel@live.com 2026-06-20-17-21-07).json @@ -0,0 +1,44 @@ +// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY +// +// PlatformIO Debugging Solution +// +// Documentation: https://docs.platformio.org/en/latest/plus/debugging.html +// Configuration: https://docs.platformio.org/en/latest/projectconf/sections/env/options/debug/index.html + +{ + "version": "0.2.0", + "configurations": [ + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug", + "executable": "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/build/freenove_esp32_s3_wroom/firmware.elf", + "projectEnvName": "freenove_esp32_s3_wroom", + "toolchainBinDir": "/home/thebears/.platformio/packages/toolchain-xtensa-esp32s3/bin", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": { + "type": "PlatformIO", + "task": "Pre-Debug" + } + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (skip Pre-Debug)", + "executable": "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/build/freenove_esp32_s3_wroom/firmware.elf", + "projectEnvName": "freenove_esp32_s3_wroom", + "toolchainBinDir": "/home/thebears/.platformio/packages/toolchain-xtensa-esp32s3/bin", + "internalConsoleOptions": "openOnSessionStart" + }, + { + "type": "platformio-debug", + "request": "launch", + "name": "PIO Debug (without uploading)", + "executable": "/home/thebears/Seafile/Designs/ESP/rain_barrel/code/.pio/build/freenove_esp32_s3_wroom/firmware.elf", + "projectEnvName": "freenove_esp32_s3_wroom", + "toolchainBinDir": "/home/thebears/.platformio/packages/toolchain-xtensa-esp32s3/bin", + "internalConsoleOptions": "openOnSessionStart", + "loadMode": "manual" + } + ] +} diff --git a/src/main.cpp b/src/main.cpp index 640b39d..a2a6bf1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,15 +1,17 @@ -#define RXD_PIN 5 -#define TXD_PIN 6 -#define CONTROL_PIN 4 -#define RELAY_LEVEL_CONVERTER_PIN 17 -#define INTERRUPT_PIN 16 -#define I2C_SCL_PIN 7 -#define I2C_SDA_PIN 15 +#define RXD_PIN 4 // 4, black, RXD +#define TXD_PIN 5 // 5, white, TXD +#define INTERRUPT_PIN 46 +#define I2C_SCL_PIN 17 +#define I2C_SDA_PIN 18 #define SERIAL_BAUD 115200 #define MODBUS_BAUD 9600 +#define RELAY_CONTROL_ADDRESS 0x26 +#define BUTTONS_CONTROL_ADDRESS 0x20 +#define BUTTON_LED_CONTROL_ADDRESS 0x21 #include #include +#include #include #include #include @@ -22,8 +24,6 @@ constexpr uint8_t WATER_ROW = LCD_ROWS - 1; hd44780_I2Cexp lcd(LCD_I2C_ADDRESS, LCD_COLS, LCD_ROWS); -constexpr uint8_t RELAY_CONTROL_ADDRESS = 0x21; -constexpr uint8_t BUTTONS_CONTROL_ADDRESS = 0x20; constexpr unsigned long COMMAND_INTERVAL_MS = 1000; constexpr uint16_t MODBUS_RESPONSE_TIMEOUT_MS = 200; @@ -32,6 +32,8 @@ uint8_t modbusReadCmd[] = {0x01, 0x03, 0x00, 0x04, 0x00, 0x01}; volatile bool g_buttonInterruptFired = false; int g_waterLevelCm = -1; +float g_busVoltageV = NAN; +float g_currentA = NAN; struct Action { @@ -47,21 +49,47 @@ enum class ActionId : size_t BarrelToHose, BackLeftToBarrel, BarrelToBackLeft, - NotAssigned, Count }; inline Action g_actions[] = { {"City -> Hose", 0b00001100, 0b00001100, false}, {"Barrel -> Hose", 0b01000000, 0b01101100, false}, - {"Back Left -> Barrel", 0b00010000, 0b00110000, false}, - {"Barrel -> Back Left", 0b01101000, 0b01111000, false}, - {"NotAssigned", 0b00000000, 0b00000000, false}, + {"Back Left -> Barrel", 0b00010000, 0b00010001, false}, + {"Barrel -> Back Left", 0b01001001, 0b01011001, false}, }; uint8_t current_stat = 0b00000000; uint8_t current_mask = 0b00000000; +// I2C device found at 0x20 - control buttons +// I2C device found at 0x21 - control leds +// I2C device found at 0x26 - controls relays +// I2C device found at 0x27 - measures current +// I2C device found at 0x40 - lcd + +// INA226 +constexpr uint8_t INA226_I2C_ADDRESS = 0x40; +constexpr float INA226_SHUNT_OHMS = 0.005f; // R005 +constexpr float INA226_CURRENT_LSB_A = 0.001f; // 1 mA/bit +constexpr uint16_t INA226_CALIBRATION = 1024; // 0.00512 / (0.001 * 0.005) +constexpr unsigned long INA226_POLL_INTERVAL_MS = 1000; + +enum : uint8_t +{ + INA226_REG_CONFIG = 0x00, + INA226_REG_SHUNT_VOLT = 0x01, + INA226_REG_BUS_VOLT = 0x02, + INA226_REG_POWER = 0x03, + INA226_REG_CURRENT = 0x04, + INA226_REG_CALIBRATION = 0x05, + INA226_REG_MASK_ENABLE = 0x06, + INA226_REG_ALERT_LIMIT = 0x07, + INA226_REG_MANUFACTURER = 0xFE, + INA226_REG_DIE_ID = 0xFF +}; + + // Forward declarations void updateLCDDisplay(); void addWaterLevel(); @@ -75,7 +103,13 @@ void sendCommand(const uint8_t *cmd, size_t len); void sendModbusCommand(); void scanI2CDevices(); void buildTrimmedWaterLevelText(char *outBuffer, size_t outBufferSize); +void buildElectricalText(char *outBuffer, size_t outBufferSize); void buildRightJustifiedWaterRow(char *rowBuffer, size_t rowBufferSize); +// INA226 forward declarations +bool ina226WriteReg16(uint8_t reg, uint16_t value); +bool ina226ReadReg16(uint8_t reg, uint16_t &value); +void initINA226(); +void pollINA226(); inline Action &getAction(ActionId id) { @@ -146,10 +180,64 @@ void buildRightJustifiedWaterRow(char *rowBuffer, size_t rowBufferSize) memcpy(rowBuffer + startCol, text, len); } +void buildElectricalText(char *outBuffer, size_t outBufferSize) +{ + if (outBuffer == nullptr || outBufferSize == 0) + { + return; + } + + if (std::isnan(g_busVoltageV) || std::isnan(g_currentA)) + { + snprintf(outBuffer, outBufferSize, "--.-V --mA"); + return; + } + + const float roundedV = std::round(g_busVoltageV * 10.0f) / 10.0f; + char currentText[12]; + + if (std::fabs(g_currentA) >= 1.0f) + { + // Example: "1.23A" + snprintf(currentText, sizeof(currentText), "%.2fA", g_currentA); + } + else + { + // Example: "123.4mA" + snprintf(currentText, sizeof(currentText), "%.1fmA", g_currentA * 1000.0f); + } + + snprintf(outBuffer, outBufferSize, "%.1fV %s", roundedV, currentText); +} + void addWaterLevel() { char row[LCD_COLS + 1]; - buildRightJustifiedWaterRow(row, sizeof(row)); + + memset(row, ' ', LCD_COLS); + row[LCD_COLS] = '\0'; + + char waterText[24]; + buildTrimmedWaterLevelText(waterText, sizeof(waterText)); + + size_t waterLen = strlen(waterText); + if (waterLen > LCD_COLS) + { + waterLen = LCD_COLS; + } + const size_t waterStartCol = LCD_COLS - waterLen; + memcpy(row + waterStartCol, waterText, waterLen); + + char electricalText[24]; + buildElectricalText(electricalText, sizeof(electricalText)); + + size_t electricalLen = strlen(electricalText); + if (electricalLen > waterStartCol) + { + electricalLen = waterStartCol; + } + memcpy(row, electricalText, electricalLen); + lcd.setCursor(0, WATER_ROW); lcd.print(row); } @@ -192,6 +280,35 @@ void generateMasksByActive() } } +void updateLEDButtons() +{ + + uint8_t mask_send = 0x00; + for (size_t i = 0; i < static_cast(ActionId::Count); ++i) + { + if (g_actions[i].active) + { + mask_send |= (1 << i); + } + } + Wire.beginTransmission(static_cast(BUTTON_LED_CONTROL_ADDRESS)); + Wire.write(static_cast(0x00)); + uint8_t error = Wire.endTransmission(); + Wire.beginTransmission(static_cast(BUTTON_LED_CONTROL_ADDRESS)); + Wire.write(static_cast(mask_send)); + error = Wire.endTransmission(); + + Serial.print("LED Mask: "); + printBin(mask_send); +} + +void doFullRefresh() +{ + applyRelayStateIfChanged(); + updateLCDDisplay(); + updateLEDButtons(); +} + void updateStateByLastAction(ActionId lastAction) { Action &c_action = getAction(lastAction); @@ -200,8 +317,7 @@ void updateStateByLastAction(ActionId lastAction) { c_action.active = false; generateMasksByActive(); - applyRelayStateIfChanged(); - updateLCDDisplay(); + doFullRefresh(); return; } @@ -242,9 +358,7 @@ void updateStateByLastAction(ActionId lastAction) printBin(current_stat); Serial.print("Mask: "); printBin(current_mask); - - applyRelayStateIfChanged(); - updateLCDDisplay(); + doFullRefresh(); } void applyRelayStateIfChanged() @@ -257,8 +371,8 @@ void applyRelayStateIfChanged() return; } - Wire.beginTransmission(RELAY_CONTROL_ADDRESS); - Wire.write(relayValue); + Wire.beginTransmission(static_cast(RELAY_CONTROL_ADDRESS)); + Wire.write(static_cast(relayValue)); uint8_t error = Wire.endTransmission(); if (error == 0) @@ -332,49 +446,44 @@ void scanI2CDevices() void readAndPrintButtons() { - Wire.beginTransmission(BUTTONS_CONTROL_ADDRESS); - Wire.write(0b11111110); // P0 LOW, others HIGH + Wire.beginTransmission(static_cast(BUTTONS_CONTROL_ADDRESS)); + Wire.write(static_cast(0b11111111)); // P0 LOW, others HIGH Wire.endTransmission(); - Wire.requestFrom(BUTTONS_CONTROL_ADDRESS, static_cast(1)); + Wire.requestFrom(static_cast(BUTTONS_CONTROL_ADDRESS), static_cast(1), static_cast(true)); if (!Wire.available()) { return; } uint8_t portValue = Wire.read(); + bool buttonP0Pressed = (portValue & (1 << 0)) == 0; + bool buttonP1Pressed = (portValue & (1 << 1)) == 0; + bool buttonP2Pressed = (portValue & (1 << 2)) == 0; bool buttonP3Pressed = (portValue & (1 << 3)) == 0; - bool buttonP4Pressed = (portValue & (1 << 4)) == 0; - bool buttonP5Pressed = (portValue & (1 << 5)) == 0; - bool buttonP6Pressed = (portValue & (1 << 6)) == 0; - bool buttonP7Pressed = (portValue & (1 << 7)) == 0; ActionId lastAction = ActionId::Count; - if (buttonP3Pressed) + if (buttonP0Pressed) { lastAction = ActionId::CityWaterToHose; } - else if (buttonP4Pressed) + else if (buttonP1Pressed) { lastAction = ActionId::BarrelToHose; } - else if (buttonP5Pressed) + else if (buttonP2Pressed) { lastAction = ActionId::BackLeftToBarrel; } - else if (buttonP6Pressed) + else if (buttonP3Pressed) { lastAction = ActionId::BarrelToBackLeft; } - else if (buttonP7Pressed) - { - // reserved - } Serial.printf( - "INT Buttons P3=%d P4=%d P5=%d P6=%d P7=%d (raw=0x%02X)\n", - buttonP3Pressed, buttonP4Pressed, buttonP5Pressed, buttonP6Pressed, buttonP7Pressed, portValue); + "INT Buttons P0=%d P1=%d P2=%d P3=%d (raw=0x%02X)\n", + buttonP0Pressed, buttonP1Pressed, buttonP2Pressed, buttonP3Pressed, portValue); if (lastAction != ActionId::Count) { @@ -382,6 +491,20 @@ void readAndPrintButtons() } } +void handleSerialCommands() +{ + while (Serial.available() > 0) + { + char c = static_cast(Serial.read()); + if (c == 'r' || c == 'R') + { + Serial.println("Reset command received. Restarting..."); + delay(50); + ESP.restart(); + } + } +} + void pollSerial2WaterLevel() { static uint8_t responseBuffer[7]; @@ -452,6 +575,110 @@ void pollSerial2WaterLevel() } } +bool ina226WriteReg16(uint8_t reg, uint16_t value) +{ + Wire.beginTransmission(static_cast(INA226_I2C_ADDRESS)); + Wire.write(static_cast(reg)); + Wire.write(static_cast((value >> 8) & 0xFF)); + Wire.write(static_cast(value & 0xFF)); + return Wire.endTransmission() == 0; +} + +bool ina226ReadReg16(uint8_t reg, uint16_t &value) +{ + Wire.beginTransmission(static_cast(INA226_I2C_ADDRESS)); + Wire.write(static_cast(reg)); + if (Wire.endTransmission(false) != 0) // repeated start + { + return false; + } + + if (Wire.requestFrom(static_cast(INA226_I2C_ADDRESS), static_cast(2), static_cast(true)) != 2) + { + return false; + } + + uint16_t msb = Wire.read(); + uint16_t lsb = Wire.read(); + value = static_cast((msb << 8) | lsb); + return true; +} + +void initINA226() +{ + // Keep default config; just set calibration for R005 and selected Current_LSB + if (!ina226WriteReg16(INA226_REG_CALIBRATION, INA226_CALIBRATION)) + { + Serial.println("INA226: failed to write calibration."); + return; + } + + uint16_t cfg = 0, cal = 0, man = 0, die = 0; + ina226ReadReg16(INA226_REG_CONFIG, cfg); + ina226ReadReg16(INA226_REG_CALIBRATION, cal); + ina226ReadReg16(INA226_REG_MANUFACTURER, man); + ina226ReadReg16(INA226_REG_DIE_ID, die); + + Serial.printf( + "INA226 init ok addr=0x%02X Rshunt=%.4f ohm cal=0x%04X cfg=0x%04X man=0x%04X die=0x%04X\n", + INA226_I2C_ADDRESS, INA226_SHUNT_OHMS, cal, cfg, man, die); +} + +void pollINA226() +{ + static unsigned long lastPollMs = 0; + const unsigned long now = millis(); + if ((now - lastPollMs) < INA226_POLL_INTERVAL_MS) + { + return; + } + lastPollMs = now; + + uint16_t regConfig = 0, regShunt = 0, regBus = 0, regPower = 0, regCurrent = 0; + uint16_t regCal = 0, regMask = 0, regAlert = 0, regMan = 0, regDie = 0; + + bool ok = + ina226ReadReg16(INA226_REG_CONFIG, regConfig) && + ina226ReadReg16(INA226_REG_SHUNT_VOLT, regShunt) && + ina226ReadReg16(INA226_REG_BUS_VOLT, regBus) && + ina226ReadReg16(INA226_REG_POWER, regPower) && + ina226ReadReg16(INA226_REG_CURRENT, regCurrent) && + ina226ReadReg16(INA226_REG_CALIBRATION, regCal) && + ina226ReadReg16(INA226_REG_MASK_ENABLE, regMask) && + ina226ReadReg16(INA226_REG_ALERT_LIMIT, regAlert) && + ina226ReadReg16(INA226_REG_MANUFACTURER, regMan) && + ina226ReadReg16(INA226_REG_DIE_ID, regDie); + + if (!ok) + { + Serial.println("INA226 read failed."); + return; + } + + const int16_t shuntRaw = static_cast(regShunt); + const int16_t currentRaw = static_cast(regCurrent); + + const float shuntVoltage_mV = static_cast(shuntRaw) * 0.0025f; // 2.5uV/bit + const float busVoltage_V = static_cast(regBus) * 0.00125f; // 1.25mV/bit + const float current_A = static_cast(currentRaw) * INA226_CURRENT_LSB_A; // A + const float power_W = static_cast(regPower) * (25.0f * INA226_CURRENT_LSB_A); // W + const float shuntCurrent_A = (shuntVoltage_mV / 1000.0f) / INA226_SHUNT_OHMS; // Ohm's law + + Serial.printf( + "INA226 raw cfg=0x%04X shunt=0x%04X bus=0x%04X pwr=0x%04X cur=0x%04X cal=0x%04X mask=0x%04X alert=0x%04X man=0x%04X die=0x%04X\n", + regConfig, regShunt, regBus, regPower, regCurrent, regCal, regMask, regAlert, regMan, regDie); + + Serial.printf( + "INA226 conv Vbus=%.4f V Vshunt=%.4f mV I=%.4f A Ishunt=%.4f A P=%.4f W\n", + busVoltage_V, shuntVoltage_mV, current_A, shuntCurrent_A, power_W); + + g_busVoltageV = busVoltage_V; + g_currentA = current_A; + addWaterLevel(); +} + + + void setup() { Serial.begin(SERIAL_BAUD); @@ -467,30 +694,39 @@ void setup() attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), onButtonInterrupt, FALLING); Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN); - + delay(125); scanI2CDevices(); - + initINA226(); lcd.begin(LCD_COLS, LCD_ROWS); updateLCDDisplay(); - + updateLEDButtons(); Serial2.begin(MODBUS_BAUD, SERIAL_8N1, RXD_PIN, TXD_PIN); start = millis(); while (!Serial2 && (millis() - start < 3000)) { delay(10); } + applyRelayStateIfChanged(); + Serial.print("moving onto loop"); + Wire.beginTransmission(static_cast(BUTTON_LED_CONTROL_ADDRESS)); + Wire.write(static_cast(0x00)); + uint8_t error = Wire.endTransmission(); } void loop() { + handleSerialCommands(); if (g_buttonInterruptFired) { g_buttonInterruptFired = false; readAndPrintButtons(); } + + pollSerial2WaterLevel(); + pollINA226(); delay(10); } \ No newline at end of file