Нужна помощь с задержкой или паузой

Не учите его плохому, не нужны там делеи

2 лайка

То есть никак.

с точки зрения …да…но не надо плодить сущности…по истечении некоторого времени, когда выяснится чего именно хочет ТС будет понятно в какую сторону смотреть…но на данном этапе, всё что сложнее delay() не нужные сущности

return не катит?

См первое сообщение - ему нужно будет еще что-то запускать кроме реле

кнопкой на прерывании не?
Всё таки может надо сесть и написать ТЗ?
А то получается здесь играть здесь не играть здесь я рыбу заворачивал

Не нужны там делеи, на миллисе все делается легко и просто

@Nikolay_XMAO
Давайте начнем исправлять код.
Первое - его надо почистить.
Зачем вы перед каждой командой digitalWrite() заново даете pinMode() ? Команду pinMode() достаточно дать один раз для каждого пина и делать это надо в setup()

И еще - я уже писал раньше, что циклы while(1) делают вашу программу неуправляемой. Зачем вы их туда навставляли? - убирайте

Давайте вы все это исправите и выложите исправленный код снова, в новом сообщении. Тогда продолжим.

Опешу процесс который должен выполняться: первое реле сбрасывает аварию далее происходит запуск насоса (реле номер 2), через 0:30(0:45/1:30/2) минуты происходит остановка насоса (реле номер 3), далее через 15-20минут процесс повторяется, через дней 5-10 нужно увеличить время работы насоса, может и раньше, к тому-же мне нужно видеть количество запусков насоса для этого я подключил дисплей, с кодом через miles () счётчик матает безбожно, а лампочка моргает как положено, я пока ещё разбираюсь, трудно за пару дней стать программистом, даже начального уровня, я бы сказал что это невозможно.
Почему-то без циклов процесс не повторяется в функции,

В большинстве задач именно delay() - ненужная сущность.

1 лайк

Цикл в Ардуино предусмотрен изначально - это функция loop().
А “не повторяется” он у Вас потому, что Вы его искусственно блокируете while(1).

вот именно. Но почему-то все новички повторяют одну и ту же ошибку - ничему не научившись, сразу бегут строить космические корабли или управление насосными станциями с заумными процедурами.

Знаете, зачем новичков посылают “мигать диодиком”? - да чтобы они научились пользоваться процедурами setup() и loop() и не вставляли, как вы, pinMode() через строчку и не запихивали процедуры в бессмысленные циклы while(1)

Давайте, не ленитесь, исправляйте код как я вам сказал. Пока не выложите исправленную версию - не вижу смысла что-либо обсуждать.

В какое место его поставить?

void loop () {
  digitalWrite(5, HIGH);
  delay (50000);
  digitalWrite(5, LOW);
  delay (50000);
}
1 лайк

не флуди

Как делал я когда начинал.

  1. нужен генератор, таймер с тиками. Проще собрать на миллисах. Кратный минимальному времени события.
  2. к генератору прикручивал счетчик (i). Определял когда у меня должен закончится период. Допустим 1250 тиков.
  3. потом тупо писал кучу условий
    If(i==43)(что-то делаем)
    If(i==44)(не забываем вернуть если событие окончено)
    If(i==1249)(i=0) // обнуляем цикл
    Потом, когда надоест страдать фигнёй и будет уже немного практики, научились сворачивать эту фигню в массивы
1 лайк

Переделал немного код по советам бывалых, к милис пока не пришел, экспериментирую и от цикла тоже не смог отказаться, без цикла функция выполняется 1раз, я пока это не победил. по прежнему выбор функции идет через рестарт МК.

long x = 0;

#include <Wire.h>
#include "ASOLED.h"


void Start() {
  if (digitalRead(A0) == 0) {
    while (1){
      LD.printString_12x16("Старт 1", 0, 2);
      LD.printString_12x16("Цикл", 0, 6);
      LD.printString_12x16("", 50, 6);
       LD.printNumber((long)x);
      x = x + 1;
       digitalWrite(10, HIGH);
      delay(2000);
       digitalWrite(5, LOW);
      delay(5000);
       digitalWrite(11, HIGH);
      delay(2000);
       digitalWrite(11, LOW);
      delay(1000);
       digitalWrite(12, LOW);
      delay(2000);
       digitalWrite(12, HIGH);
      delay(1000);
       digitalWrite(13, HIGH);
      delay(2000);
       digitalWrite(13, LOW);
    }
  }
}

void Start2() {
  if (digitalRead(A1) == 0) {
    while (1){
      LD.printString_12x16("Старт 2", 0, 2);
      LD.printString_12x16("Цикл", 0, 6);
      LD.printString_12x16("", 50, 6);
       LD.printNumber((long)x);
      x = x + 1;
      digitalWrite(10, HIGH);
      delay(2000);
       digitalWrite(5, LOW);
      delay(5000);
       digitalWrite(11, HIGH);
      delay(2000);
       digitalWrite(11, LOW);
      delay(45000);
       digitalWrite(12, LOW);
      delay(2000);
       digitalWrite(12, HIGH);
      delay(1200000);
       digitalWrite(13, HIGH);
      delay(2000);
       digitalWrite(13, LOW);
    }
  }
}

void Start3() {
  if (digitalRead(A2) == 0) {
    while (1){
      LD.printString_12x16("Старт 3", 0, 2);
      LD.printString_12x16("Цикл", 0, 6);
      LD.printString_12x16("", 50, 6);
       LD.printNumber((long)x);
      x = x + 1;
     digitalWrite(10, HIGH);
      delay(2000);
       digitalWrite(5, LOW);
      delay(5000);
       digitalWrite(11, HIGH);
      delay(2000);
       digitalWrite(11, LOW);
      delay(90000);
       digitalWrite(12, LOW);
      delay(2000);
       digitalWrite(12, HIGH);
      delay(1200000);
       digitalWrite(13, HIGH);
      delay(2000);
       digitalWrite(13, LOW);
    }
  }
}

void Start4() {
  if (digitalRead(A2) == 0) {
    while (1){
      LD.printString_12x16("Старт 4", 0, 2);
      LD.printString_12x16("Цикл", 0, 6);
      LD.printString_12x16("", 50, 6);
       LD.printNumber((long)x);
      x = x + 1;
      digitalWrite(10, HIGH);
      delay(2000);
       digitalWrite(5, LOW);
      delay(5000);
       digitalWrite(11, HIGH);
      delay(2000);
       digitalWrite(11, LOW);
      delay(120000);
       digitalWrite(12, LOW);
      delay(2000);
       digitalWrite(12, HIGH);
      delay(1200000);
       digitalWrite(13, HIGH);
      delay(2000);
       digitalWrite(13, LOW);
    }
  }
}


void setup() {
  LD.init();
 LD.clearDisplay();

    LD.printString_12x16("РАБОТА ", 35, 0);
  pinMode(10, OUTPUT);
   digitalWrite(10, LOW);
   digitalWrite(11, LOW);
   digitalWrite(12, HIGH);
   digitalWrite(13, LOW);

  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);
  pinMode(A2, INPUT_PULLUP);
  pinMode(A3, INPUT_PULLUP);
}

void loop() {
    Start();
    Start2();
    Start3();
    Start4();

}

Что-то переделок особо не заметил…

это точно:(

у вас процедуры Старт3 и Старт4 запускаются от одной и той же кнопки на пине А2 или это ошибка?

1 лайк

Дык не сливайся не ответив )))