Как остановить реле после его включения и дать датчику получить результат
Я хочу обеспечить задержку в чтении следующей итерации, чтобы датчик мог считывать состояние после запуска насоса.
void loop() {
//-------------Fungsi Read sensor-----------
// sensorAll();
hasilec = (ppmcensor - inputec);
ph = (phcensor - inputph);
// hasilec = random(-200, 0) / 100.0;
// ph = random(-200, 200) / 100.0;
// ph = -180/100.0;
// hasilec = -1.2;
unsigned long now = millis();
Serial.print("pH ");
Serial.print(ph);
Serial.print(" ");
Serial.print("EC ");
Serial.print(hasilec);
Serial.println("");
Serial.print(ph); Serial.print(" ");
Serial.print(hasilec); Serial.print(" ");
Serial.println(" ");
// delay (500000);
fuzzy->setInput(2, hasilec);
fuzzy->setInput(1, ph);
fuzzy->fuzzify();
float pompa01 = fuzzy->defuzzify(1);//pHDOWN
float pompa02 = fuzzy->defuzzify(2);//pHUP
float pompa03 = fuzzy->defuzzify(3);//ABMIX
Serial.println("Result= ");
Serial.println("");
Serial.print(" Pompa1 pHDOWN: ");
Serial.println(pompa01);
Serial.print(" pompa2 phUP : ");
Serial.println(pompa02);
Serial.print(" pompa3 ABMIX : ");
Serial.println(pompa03);
Serial.println("");
Serial.println("");
Serial.println("");
delay (2000);
long int pompa1 = pompa01 * 1000;
long int pompa2 = pompa02 * 1000;
long int pompa3 = pompa03 * 1000;
pump_periods[0] = pompa1; //PHdown
pump_periods[1] = pompa2; //PHup
pump_periods[2] = pompa3; //ABMIX
for (int i = 0; i < jml_pump; i++) {
if (now - pump_last_actuations[i] >= pump_periods[i]) {
pump_states[i] = (pump_states[i] == LOW) ? HIGH : LOW;
digitalWrite(pump_pins[i], pump_states[i]);
pump_last_actuations[i] = now;
}
}
}
Если я ставлю задержку после миллисекундной итерации, это приводит к тому, что насос включается только на основе задержки, а не на миллисекундах таймера. Что же мне делать?
@daffa faiz, 👍0
Обсуждение1 ответ
Лучший ответ:
▲ 0
Если все насосы должны работать в течение времени pump_periods[i]
в каждом цикле, и у вас все равно будет длинная задержка ()
, вы можете заменить цикл for
на:
for (int i = 0; i < jml_pump; i++) { // Для каждого насоса:
digitalWrite(pump_pins[i], 1); // Задержка запуска насоса i
delay(pump_periods[i]); // Ожидание pump_periods[i] ms
digitalWrite(pump_pins[i], 0); // Остановка насоса i
}
delay(120000); // Подождите 2 минуты до смешивания
Это заблокирует цикл, но в любом случае у вас будет длительная задержка. Насосы будут работать последовательно, а не одновременно.
Это то, чего ты хочешь?
,
@ocrdu
Смотрите также:
- Как инициализировать цифровой выходной контакт как LOW
- Несколько кнопок для управления реле
- Выходное напряжение цифрового вывода падает при управлении реле
- Ищу ссылку на двухполюсное однопозиционное реле (DPST) для Arduino.
- Вопрос новичка - Biltong Box Project
- Mega 2560 не воспроизводит аудиофайл, когда я хочу. Он играет, когда выполняется первое условие, но не другое
- Регулятор напряжения перегревается
- управление 2 датчиками и 3 насосами с помощью millis
Извините, я не понимаю вашего вопроса. Что именно продолжает зацикливаться? Функция
loop()
всегда выполняет цикл, для чего и предназначена. Или что вы имеете в виду? И что означает "не создавать пространство для стабилизации моего окружения"?, @chrislпочему вы используете нечеткую логику?, @jsotola
Я имею в виду, пусть волновой насос смешает всю смесь Ph и AB, а fet стабилизируется на заданном значении, потому что я пытаюсь использовать для этого fuzzy, @daffa faiz
извините, я понятия не имею, что вы сказали, @jsotola
Пожалуйста, [отредактируйте] ваш вопрос и предоставьте некоторый контекст. If поможет, если вы тоже переведете свои переменные и тексты., @the busybee
Вы не можете поместить большую задержку () в любом месте цикла, не испортив синхронизацию millis(), которую вы используете в цикле for, когда pump_periods[i] меньше, чем ваша задержка. Пожалуйста, объясните, чего нужно ждать; какой датчик считывает какое состояние; что заставляет насос запускаться и где в коде это происходит., @ocrdu
я хочу подождать пару минут, пока жидкость смешается после того, как я добавлю немного pH вверх или вниз и AB-mix, датчик считывает промилле и pH, и я получаю их значение, запуск насоса основан на моих нечетких правилах., @daffa faiz