При использовании скетча 7-07_store и параллельном подключении датчиков к одному входу всё работает, нет лишь индикации на каком из датчиков произошла протечка, поскольку при данном подключении светодиоды DO-LED тревоги загораются сразу у ВСЕХ компараторов, а мне хотелось бы, чтобы имелась индикация, показывающая где именно произошла протечка. Поэтому я попытался это решить и создал скетч 7-08_store.
int Red_LED = 8; // красный светодиод тревоги
int Green_LED = 11; // зелёный светодиод деж. режима
int LED_PIN_2 = 7; // синий светодиод открытия
int Buzzer = 6; // зуммер
int Rain_sensor = A0; // сенсор протечки
int Rain_sensor1 = A1;
int Rain_sensor2 = A2;
int Rain_detected;
int Rain_detected1;
int Rain_detected2;
int IN2 = 9; // Input2 подключен к выводу 9 на мотор
int IN1 = 10;
int BUTTON_PIN = 5; // номер контакта 1 кнопки "Закрыть"
int BUTTON_PIN_2 = 4; // номер контакта 2 кнопки "Открыть"
// переменные таймеров
uint32_t myTimer;
// переменные изменятся:
int buttonState = 0; // переменная для чтения состояния кнопки 1
int buttonState_2 = 0; // переменная для чтения состояния кнопки 2
void setup()
{
Serial.begin(9600);
pinMode(Red_LED, OUTPUT); // выход на красный светодиод тревоги
pinMode(Green_LED, OUTPUT); // выход на зелёный светодиод деж. режима
pinMode(Buzzer, OUTPUT); // выход на зуммер
pinMode(Rain_sensor, INPUT); // выход на датчик дождя
pinMode(Rain_sensor1, INPUT); // выход на датчик дождя 1
pinMode(Rain_sensor2, INPUT); // выход на датчик дождя 2
pinMode (IN1, OUTPUT); // выход на драйвер:
pinMode (IN2, OUTPUT); // выход на драйвер:
pinMode (BUTTON_PIN, INPUT_PULLUP); // выход на кнопку 1
pinMode (BUTTON_PIN_2, INPUT_PULLUP); // выход на кнопку 2
pinMode (LED_PIN_2, OUTPUT); // выход на синий светодиод открытия
}
void loop()
{
buttonState = digitalRead (BUTTON_PIN);
buttonState_2 = digitalRead (BUTTON_PIN_2);
// управляем мотором в ручном режиме в соответствии с состоянием кнопки 1 (открыть)
if(buttonState == LOW) {
digitalWrite (IN1, HIGH); // включить мотор
digitalWrite(Red_LED, HIGH); // включить светодиод
delay(7000); // 7 секунд
digitalWrite(IN1, LOW); // выключить мотор
digitalWrite(Red_LED, LOW); // выключить светодиод
}
// управляем мотором в ручном режиме в соответствии с состоянием кнопки 2 (закрыть)
if(buttonState_2 == LOW) {
digitalWrite (IN2, HIGH); // включить мотор
digitalWrite(LED_PIN_2, HIGH); // включить светодиод
delay(7000); // 7 секунд
digitalWrite(IN2, LOW); // выключить мотор
digitalWrite(LED_PIN_2, LOW); // выключить светодиод
}
// управляем мотором в автоматическом режиме в соответствии с состоянием сенсора
Rain_detected = digitalRead(Rain_sensor);
Rain_detected1 = digitalRead(Rain_sensor1);
Rain_detected2 = digitalRead(Rain_sensor2);
Serial.println(Rain_detected or Rain_detected1 or Rain_detected2);
delay(500);
if (Rain_detected == 0 or Rain_detected1 == 0 or Rain_detected2 == 0)
{
Serial.println("Обнаружена вода! Немедленно примите меры!");
if (millis() - myTimer >= 500) { // таймер на 500 мс (2 раза в сек)
myTimer = millis(); // сброс таймера
// выполнить действие 1
digitalWrite(Red_LED, !digitalRead(Red_LED));
digitalWrite(Buzzer, !digitalRead(Buzzer));
}
digitalWrite(Green_LED, LOW); // выключить светодиод деж. режима
digitalWrite (IN1, HIGH); // включить мотор
}
else
{
Serial.println("Вода не обнаружена.");
digitalWrite(IN1, LOW); // выключить мотор
digitalWrite(Red_LED, LOW); // выключить светодиод
digitalWrite(Green_LED, HIGH); // включить светодиод деж. режима
digitalWrite(Buzzer, HIGH); // выключить зуммер
}
}
Здесь (в скетче я подключил только 3 датчика для пробы) индикация работает как надо , однако , если какие-то прописанные в скетче датчики отключить, вдруг какой-то окажется ненужен, то сразу же срабатывает тревога и закрываются краны.