Не учите его плохому, не нужны там делеи
То есть никак.
с точки зрения …да…но не надо плодить сущности…по истечении некоторого времени, когда выяснится чего именно хочет ТС будет понятно в какую сторону смотреть…но на данном этапе, всё что сложнее 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() - ненужная сущность.
Цикл в Ардуино предусмотрен изначально - это функция loop().
А “не повторяется” он у Вас потому, что Вы его искусственно блокируете while(1).
вот именно. Но почему-то все новички повторяют одну и ту же ошибку - ничему не научившись, сразу бегут строить космические корабли или управление насосными станциями с заумными процедурами.
Знаете, зачем новичков посылают “мигать диодиком”? - да чтобы они научились пользоваться процедурами setup() и loop() и не вставляли, как вы, pinMode() через строчку и не запихивали процедуры в бессмысленные циклы while(1)
Давайте, не ленитесь, исправляйте код как я вам сказал. Пока не выложите исправленную версию - не вижу смысла что-либо обсуждать.
В какое место его поставить?
void loop () {
digitalWrite(5, HIGH);
delay (50000);
digitalWrite(5, LOW);
delay (50000);
}
не флуди
Как делал я когда начинал.
- нужен генератор, таймер с тиками. Проще собрать на миллисах. Кратный минимальному времени события.
- к генератору прикручивал счетчик (i). Определял когда у меня должен закончится период. Допустим 1250 тиков.
- потом тупо писал кучу условий
If(i==43)(что-то делаем)
If(i==44)(не забываем вернуть если событие окончено)
If(i==1249)(i=0) // обнуляем цикл
Потом, когда надоест страдать фигнёй и будет уже немного практики, научились сворачивать эту фигню в массивы
Переделал немного код по советам бывалых, к милис пока не пришел, экспериментирую и от цикла тоже не смог отказаться, без цикла функция выполняется 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 или это ошибка?
Дык не сливайся не ответив )))