Реле просто включаются и выключаются на delay(), а не на millis().
Я использую нечеткую логику для времени работы реле, но реле просто включаются и выключаются с интервалом задержки ()
, который я ставлю в конце цикла.
Это мой код:
void loop () {
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(" ");
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
long int pompa1 = pompa01 * 1000;
long int pompa2 = pompa02 * 1000;
long int pompa3 = pompa03 * 1000;
Serial.println("Result= ");
Serial.println("");
Serial.print(" Pompa1 pHDOWN: ");
Serial.println(pompa1);
Serial.print(" pompa2 phUP : ");
Serial.println(pompa2);
Serial.print(" pompa3 ABMIX : ");
Serial.println(pompa3);
Serial.println("");
Serial.println("");
Serial.println("");
pump_periods[0] = pompa1;
pump_periods[1] = pompa2;
pump_periods[2] = pompa3;
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;
}
}
delay (20000);
}
Реле просто включается и выключается на этой задержке задержки (20000);
.
Что же мне делать?
@daffa faiz, 👍2
Обсуждение1 ответ
Лучший ответ:
▲ 1
Проверьте значения pompa1
, pompa2
и pompa3
, чтобы увидеть, всегда ли они меньше 20000 (я подозреваю, что так оно и есть).
Задержка (20000)
(почему она вообще существует?) вполне возможно, что вы испортите время переключения pump_states
, всегда задерживаясь дольше, чем значения в pompa1
, pompa2
и pompa3
.
Это заставило бы реле переключаться каждые 20 секунд (на каждом контуре).
,
@ocrdu
я получил это спасибо за это, @daffa faiz
Смотрите также:
- Использование mills() вместо задержки() на реле, не обеспечивающих надежное переключение
- Использовать timer0, не влияя на millis() и micros().
- Arduino Мигает двумя светодиодами без задержки (количество повторений)
- Как запустить 4 светодиода последовательно на основе кнопочного входа?
- управление 2 датчиками и 3 насосами с помощью millis
- Помогите с millis, чтобы получить точное время
- Использование millis вместо задержки перезагрузки реле
- Проблема с последовательностью воздушных поршней
Проверьте значения pompa1, pompa2 и pompa3, чтобы увидеть, всегда ли они меньше 20000. В любом случае, из-за чего такая задержка? Это вполне может испортить ваше время переключения параметров pump_states, задерживаясь дольше, чем значения в pompa1, pompa2 и pompa3., @ocrdu
я понял, я просто заменяю свою задержку после нечеткой, ее работы, позвольте мне отладить больше для совершенствования моего проекта thx, @daffa faiz
Я превращу комментарий в ответ; пожалуйста, примите его (если вы принимаете его), чтобы вопрос не оставался открытым., @ocrdu