#pragma once #include typedef struct { uint8_t pin; /// The value sensors read when completely dry int calibration_dry; /// The value sensors read when completely wet int calibration_wet; } Sensor; typedef struct { uint8_t valve_pin; uint8_t led_pin; Sensor sensor; // define additional per-pot config here } PotConfig; constexpr unsigned int SECOND = 1000; constexpr unsigned int MINUTE = SECOND * 60; constexpr unsigned int HOUR = MINUTE * 60; constexpr unsigned int MEASUREMENT_COUNT = 3; constexpr int MEASUREMENT_DELAY = 100; /// Pots will always be watered below this humidity constexpr int MIN_HUMIDITY_PERCENT = 30; /// Pots will never be watered above this humidity constexpr int MAX_HUMIDITY_PERCENT = 70; /// the amount of time a valve needs to open/close constexpr int VALVE_DELAY_MS = 1 * SECOND / 4; /// the amount of time the pump needs to start/stop constexpr int PUMP_DELAY_MS = 1 * SECOND / 4; /// the amount of time to water the plot (valve open and pump running) constexpr int WATER_TIME_MS = 1 * SECOND / 4; /// how long to wait between loops constexpr int LOOP_DELAY_MS = 1 * SECOND; /// minimum amount of time to wait between watering each pot, even when minimum wetness has been reached constexpr int MIN_WATERING_INTERVAL_MS = 10 * SECOND; // TODO set higher once it is working /// maximum amount of time to wait between watering each pot, as long as maximum wetness has not been reaached constexpr int MAX_WATERING_INTERVAL_MS = 24 * HOUR; constexpr uint8_t PUMP_PIN = 7; constexpr uint8_t PUMP_LED_PIN = 3; constexpr uint8_t OK_LED_PIN = 2; /// Per-pot configuration constexpr PotConfig POT_CONFIGS[] = { { .valve_pin = 23, .led_pin = 22, .sensor = { .pin = A0, .calibration_dry = 540, .calibration_wet = 250, } }, { .valve_pin = 25, .led_pin = 24, .sensor = { .pin = A1, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 27, .led_pin = 26, .sensor = { .pin = A2, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 29, .led_pin = 28, .sensor = { .pin = A3, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 31, .led_pin = 30, .sensor = { .pin = A4, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 33, .led_pin = 32, .sensor = { .pin = A5, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 35, .led_pin = 34, .sensor = { .pin = A6, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 37, .led_pin = 36, .sensor = { .pin = A7, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 39, .led_pin = 38, .sensor = { .pin = A8, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 41, .led_pin = 40, .sensor = { .pin = A9, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 43, .led_pin = 42, .sensor = { .pin = A10, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 45, .led_pin = 44, .sensor = { .pin = A11, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 47, .led_pin = 46, .sensor = { .pin = A12, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 49, .led_pin = 48, .sensor = { .pin = A13, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 51, .led_pin = 50, .sensor = { .pin = A14, .calibration_dry = 520, .calibration_wet = 100, } }, { .valve_pin = 53, .led_pin = 52, .sensor = { .pin = A15, .calibration_dry = 520, .calibration_wet = 100, } }, }; constexpr unsigned int POT_COUNT = sizeof(POT_CONFIGS) / sizeof(POT_CONFIGS[0]);