struct Sprinkler
{
const uint8_t sensor_pin;
const uint8_t solenoid_pin;
const uint16_t threshold;
bool previous_state;
};
Sprinkler sprinklers[] =
{
{ .sensor_pin = A2, .solenoid_pin = 7, .threshold = 400 },
{ .sensor_pin = A1, .solenoid_pin = 6, .threshold = 400 },
{ .sensor_pin = A0, .solenoid_pin = 5, .threshold = 400 },
};
const uint8_t sprinklers_count = sizeof( sprinklers ) / sizeof( sprinklers[0] );
const uint8_t pump_pin = 8;
void setup()
{
Serial.begin( 115200 );
for ( uint8_t i = 0; i < sprinklers_count; ++i )
{
pinMode( sprinklers[i].solenoid_pin, OUTPUT );
}
pinMode( pump_pin, OUTPUT );
}
void loop()
{
bool pump_state = false;
static bool pump_previous_state = pump_state;
for ( uint8_t i = 0; i < sprinklers_count; ++i )
{
bool sprinkler_state = false;
if ( analogRead( sprinklers[i].sensor_pin ) < sprinklers[i].threshold )
{
sprinkler_state = true;
pump_state = true;
}
if ( sprinklers[i].previous_state != sprinkler_state )
{
sprinklers[i].previous_state = sprinkler_state;
digitalWrite( sprinklers[i].solenoid_pin, sprinkler_state == true ? HIGH : LOW );
Serial.print( "Sprinkler ");
Serial.print( i );
Serial.print( " is " );
Serial.println( sprinkler_state == true ? "ON" : "OFF" );
}
}
if ( pump_previous_state != pump_state )
{
pump_previous_state = pump_state;
digitalWrite( pump_pin, pump_state == true ? HIGH : LOW );
Serial.print( "Pump is " );
Serial.println( pump_state == true ? "ON" : "OFF" );
}
}