Реле просто включаются и выключаются на 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);.

Что же мне делать?

, 👍2

Обсуждение

Проверьте значения pompa1, pompa2 и pompa3, чтобы увидеть, всегда ли они меньше 20000. В любом случае, из-за чего такая задержка? Это вполне может испортить ваше время переключения параметров pump_states, задерживаясь дольше, чем значения в pompa1, pompa2 и pompa3., @ocrdu

я понял, я просто заменяю свою задержку после нечеткой, ее работы, позвольте мне отладить больше для совершенствования моего проекта thx, @daffa faiz

Я превращу комментарий в ответ; пожалуйста, примите его (если вы принимаете его), чтобы вопрос не оставался открытым., @ocrdu


1 ответ


Лучший ответ:

1

Проверьте значения pompa1, pompa2и pompa3, чтобы увидеть, всегда ли они меньше 20000 (я подозреваю, что так оно и есть).

Задержка (20000) (почему она вообще существует?) вполне возможно, что вы испортите время переключения pump_states, всегда задерживаясь дольше, чем значения в pompa1, pompa2и pompa3.

Это заставило бы реле переключаться каждые 20 секунд (на каждом контуре).

,

я получил это спасибо за это, @daffa faiz