Работа реле на определенное время

согласен, залез на wokwi чтобы глянуть, а сериал не выводит для набора, что-то изменили? раньше он был ниже картинки
Что не так я сделал, где монитор порта? -

Выдыхаешь. Забываешь о том, что ранее писал и просто говоришь что-то вроде этого:
«Хотел бы что бы реле срабатывало через 50 секунд после того как я отправил команду в виде 50 сек». Или же «Реле должно срабатывать каждые N секунд, которые я задаю в в сериал».

Пиши свой вариант «хотелки».

Я хочу чтобы реле работало только определенное время которое я сам задаю
Написал первый раз 20, значит реле открыто следующие 20 сек
Написал 50, значит реле работает последующие 50 секунд и цикл завершается, до тех пор пока я опять не напишу что-то.

Ну так включай реле сразу как что то пришло из монитор порта… И флаг там же поднимай.

не совсем понял бро

у него не работает мой код, кто может проверить?

uint32_t seconds = 0, prev;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    seconds = Serial.parseInt();
    prev = millis();
  }
  if(millis() - prev > (seconds * 1000)) {
      seconds = millis(); 
      Serial.println("Zabor");
    }
  }
  delay(10);
}

Как Вы думаете, что получится в результате, если складывать миллисекунды с секундами?

Самое простое:

digitalWrite(<нужный пин>, HIGH);
delay(seconds*1000);
digitalWrite(<нужный пин>, LOW);

Попробуй этот код.

Или это:

uint32_t seconds = 0, prev;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    seconds = Serial.parseInt();
    prev = millis();
    Serial.println("Zabor Nachalo ");
  }
  if(millis() - prev > (seconds * 1000)) {
      seconds = millis(); 
      Serial.println("Zabor konecc”);
    }
  }
  delay(10);
}

Проверил - светодиод включается и выключается, но временные интервалы не держит.

А мой последний?

Проверил, скобка лишняя, но суть та же интервалы не работают.

uint32_t seconds = 0, prev;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    seconds = Serial.parseInt();
    prev = millis();
    Serial.println("Zabor Nachalo ");
      Serial.print(“time start: “):
      Serial.println(prev):
  }
  if(millis() - prev > (seconds * 1000)) {
      Serial.println("Zabor konecc”);
      Serial.print(“time stop: “):
      Serial.println(millis):
      Serial.println(“vremya: “);
      Serial.print((millis() - prev));
    }
  }
  delay(10);
}

А этот?

delay(10) замаркировать
может глянишь на wokwi чего монитор не открывается?

10 миллисекунд «погоды не делает»…

Попробовал, ошибки исправил - не работает как надо. Пойду спать, завтра под настроение попробую без этих Serial.parseInt();
:slight_smile:

Да я тоже пожалуй пойду…

кстати вполне возможно что ошибка была связана с этим.

установил при включении отработать 20 секунд, в эмуляторе всё пучком