Помогите с кодом : Как заменить delay

Самый дубовый и понятный способ вместо delay(); написать свою функцию delay_(); и в скетче своём заменить одни делеи на другие. Преимущество перед встроенной функцией “уелд“ в том, что внутри delay_() можно использовать delay(); :slight_smile:

void delay(int T){
long Y=millis();
while(millis()-Y<T){
// тут проверяем кнопки и т.д.
}
}

Что такое ТС, код видел завтра займусь коррекцией своего скетча естественно отпишусь и выложу что получилось сегодня уже занялся ПИВОм!

Теперь проще вместо форумов мучать ИИ, методично объясняя чего хочется.

1 лайк

Это автор текущей темы. Топик стартёр (в тапках старпёр) :slight_smile:

Лучше быть старпером чем прыщем!!!

Согласен.

Вот на этой мажорной ноте предлагаю и закрыть тему.

4 лайка
```
#define MOT1 11 
//#define MOT2 12 
#define MOT3 10 

const int ledPin = 12;
bool flag = false;
bool ledOn = false;
unsigned long timer = 0;
const unsigned long delayTime = 3000; // 3 секунды
//const unsigned long delayTime2 = 5000; // 4 секунды
//const unsigned long delayTime3 = 500; //  0,5секунд

#define ButtonPin_1 3 
#define ButtonPin_2 2 
#define ButtonPin_3 4 


#include "OneButton.h" 
OneButton button1(ButtonPin_1, true); 
OneButton button2(ButtonPin_2, true);
OneButton button3(ButtonPin_3, true);

void setup() {

  pinMode (MOT1, OUTPUT);
  pinMode (ledPin, OUTPUT);
  pinMode (MOT3, OUTPUT); 

  button1.attachLongPressStart(longPressStart1); 
  button2.attachLongPressStart(longPressStart2);
  button3.attachLongPressStart(longPressStart3);
  
  button1.setPressTicks(500); 
  button2.setPressTicks(50);
  button3.setPressTicks(50);
  
  button1.setClickTicks(500); 
  button2.setClickTicks(50);
  button3.setClickTicks(50);

}


void loop() {
  button1.tick(); 
  button2.tick();
  button3.tick();

}



void longPressStart1() { //вперед
  digitalWrite(MOT1, 1); 
  

}
void longPressStart2() { //назад
  digitalWrite(MOT1, 0); delay(400);
  //digitalWrite(MOT2, 1); delay(5000); digitalWrite(MOT2, 0);
  if (flag) {
    flag = false;          // сбросили, чтобы не повторялось
    ledOn = true;          // включаем
    digitalWrite(ledPin, HIGH);
    timer = millis();      // запоминаем момент включения
  }

  if (ledOn && millis() - timer >= delayTime) {
    digitalWrite(ledPin, LOW);
    ledOn = false;
  }  

}
void longPressStart3() { //если не открылся
  static int m = LOW;
  m = !m;
  digitalWrite(MOT3, m);  digitalWrite(MOT1, 0); delay(400);
  //digitalWrite(ledPin, 1); delay(3000); digitalWrite(ledPin, 0);
  
}
```
видимо что-то не так

Напомните, разве цель была не избавится от делеев в коде?

Я пробовал убирать эту строку всё равно не работает

Если пиво не помогает, зачем его люди пьють…))
Перечитывай пост #21

1 лайк
void longPressStart2() { //назад
  digitalWrite(MOT1, 0);
  timer = millis();      // запоминаем момент включения
  flag=1;
 }

А в лупе!!! проверяй флаг и время

if (flag && millis() - timer >= delayTime) {
  flag = 0;
.....отключить что-то

Это немного проще для понимания, мне кажется.

1 лайк

Зри в корень читай выше алгоритм БЛА-БЛА-БЛА не надо вырывать из контекста нет решения не надо писать!!!

Непонятно, кому адресовано?

#34…..

#34 -это твое сообщение.

О! Клиент созрел. Пакуйте, мальчики. :grinning_face:

Если ты тупой и не понимаешь, что тебе хотели помочь - зачем огрызаться? Ну не твоё это, так занимайся чем больше получается (тоже пиво пей).

3 лайка

А разве нота бывает мажорной? Насколько я знаю, мажорным бывает аккорд.

Это очередное подтверждение выражения (я бы сказал закона духовного): помогая другим, будь готов к искушениям - не скажут спасибо, обос..т, нахамят и т.д. Это всем видно и понятен духовно-нравственный уровень собеседника. Тут и обижаться не начто. Но бывают искушения, которые не всем видны, и этим они опасны.

4 лайка