Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с Ардуино кодом

Kaif Pro Ученик (90), открыт 6 часов назад
Захотел я сделать автоматический капельный полив у себя в теплице и купил датчик влажности почвы
Подкинул реле и Ардуино сделал нейросетью код
Вот он
const int sensorPin = A5; // Пин для датчика влажности
const int relayPin = 5; // Пин для реле
const int startButtonPin = 6; // Пин для кнопки запуска
const int stopButtonPin = 7; // Пин для кнопки остановки
const int threshold = 600; // Пороговое значение влажности (настройте его!)
unsigned long lastWateringTime = 0; // Время последнего полива
bool manualWatering = false; // Флаг ручного полива

void setup() {
Serial.begin(9600); // Для отладки
pinMode(relayPin, OUTPUT);
pinMode(startButtonPin, INPUT_PULLUP); // Внутренний подтягивающий резистор
pinMode(stopButtonPin, INPUT_PULLUP); // Внутренний подтягивающий резистор
}

void loop() {
int sensorValue = analogRead(sensorPin); // Считываем значение с датчика
Serial.print("Sensor value: ");
Serial.println(sensorValue); // Для отладки

// Проверка состояния кнопок
if (digitalRead(startButtonPin) == LOW) { // Если кнопка запуска нажата
manualWatering = true;
digitalWrite(relayPin, HIGH); // Включаем реле
Serial.println("Manual watering started");
lastWateringTime = millis(); // Обновляем время последнего полива
delay(1000); // Задержка для предотвращения дребезга кнопки
}

if (digitalRead(stopButtonPin) == LOW) { // Если кнопка остановки нажата
manualWatering = false;
digitalWrite(relayPin, LOW); // Выключаем реле
Serial.println("Manual watering stopped");
delay(1000); // Задержка для предотвращения дребезга кнопки
}

// Автоматический полив
if (!manualWatering) {
if (sensorValue < threshold) { // Если почва сухая
digitalWrite(relayPin, HIGH); // Включаем реле
lastWateringTime = millis(); // Обновляем время последнего полива
Serial.println("Automatic watering started");
} else { // Если почва влажная
if (digitalRead(relayPin) == HIGH) {
digitalWrite(relayPin, LOW); // Выключаем реле
Serial.println("Automatic watering stopped");
}
}

// Отключение реле через 4 минуты после начала полива
if (digitalRead(relayPin) == HIGH && (millis() - lastWateringTime >= 240000)) {
digitalWrite(relayPin, LOW); // Выключаем реле через 4 минуты
Serial.println("Watering stopped (Max time reached)");
}
}

delay(1000); // Задержка 1 секунда между считываниями
}
Но реле не отключается при влажной почве и порог влажности устанавливал ничего не помогло
Помогите пожалуйста решить проблему
1 ответ
Сергей Кузнецов Оракул (56359) 6 часов назад
(digitalRead(startButtonPin) == LOW) { // Если кнопка запуска нажата
LOW- означает что кнопка не начата.
if (digitalRead(stopButtonPin) == LOW) { // Если кнопка остановки нажата
Тут тоже самое
Сергей КузнецовОракул (56359) 6 часов назад
Тут ошибка
Похожие вопросы