Как установить таймер на сигнализацию

Здравствуйте, я выполняю урок со сигнализацией из набора IArduino и в этом уроке я хотел бы добавить задержку после прерывания условия когда свет на фоторезистор попадает снова. Если свет попадает на фоторезистор, то программа сразу без задержек отключает зуммер и светодиод, а мне бы хотелось добавить задержку в 2 сек. и только после 2 сек. отключать “сигнализацию” Я добавлял переменные и пробовал через if и while но ничего не работает :frowning: программа всё так же резко выключает сигналку. Есть ли решение?

const int pinRes1 =  A4;
const int pinRes2 = A2;
const int pinLed =  9;
const int pinBeep = 12;

long ledTime;
long beepTime;
bool ledState = 0;
bool beepState = 0;

void setup() {
    pinMode(pinLed, OUTPUT);
}

void loop() {

  if(analogRead(pinRes2) >= analogRead(pinRes1)) { //если на фоторезистор не попадает свет, то...

      if(ledTime + 200 < millis()) { 
      ledState = !ledState;
      ledTime = millis();
    }
    digitalWrite(pinLed, ledState); //светодиод мигает

    if(beepTime + 100 < millis()) {
      beepState = !beepState;
      beepTime = millis();
    }

    if(beepState==1) {
      tone(pinBeep, 2000); //зуммер пищит
    } 
    else noTone(pinBeep); //зуммер не пищит

    }

  else { 
              digitalWrite(pinLed, LOW); //выключаем светодиод
              noTone(pinBeep); // отключаем зуммер
  }

}

есть.

1 лайк

Смотрю на код и не вижу где

Или Вы нам какой-то другой код показали?

Не 0,2?

исправить 19 и 25 строку для начала, логику не смотрел

 if( millis() - ledTime  < 200 ) { 

это изначальный код без моих правок

хотелось бы в 37 строке кода после else сделать задержку перед тем как выполниться отключение светодиода и зумера. Ещё пробовал писать delay но он не работает и влияет на весь код целиком, а не только после того как условие ложно

А на кой хрен Вы его выложили?

У меня есть проблема с кодом, но я Вам его не покажу, покажу другой, помогайте”.

Так что ли?

Делайте!

Не вижу как и что пробовал.

const int pinRes1 =  A4;
const int pinRes2 = A2;
const int pinLed =  9;
const int pinBeep = 12;

long ledTime;
long beepTime;
int timer = 2000;
bool ledState = 0;
bool beepState = 0;

void setup() {
    pinMode(pinLed, OUTPUT);
}

void loop() {

  if (analogRead(pinRes2) >= analogRead(pinRes1)) {
    timer == 2000;
    
      if(ledTime + 200 < millis()) { 
      ledState = !ledState;
      ledTime = millis();
    }
    digitalWrite(pinLed, ledState); //светодиод мигает

    if(beepTime + 100 < millis()) {
      beepState = !beepState;
      beepTime = millis();
    }

    if(beepState==1) {
      tone(pinBeep, 2000); //зуммер пищит
    } 
    else noTone(pinBeep); //зуммер не пищит
    

    } else
              if (timer == 2000) {
                timer--;
              }
              if (timer == 0) {
              digitalWrite(pinLed, LOW);
              noTone(pinBeep);
              }

    }
  1. Внимательно посмотрите на строку №19
  2. Если не увидите проблемы, почитайте Вашу книгу по языку и посмотрите на пример программ
  3. Поле этого ещё раз внимательно посмотрите на стр. №19
  4. И так до тех пор, пока не увидите очевидный бред и не исправите.

После этого проверьте всё и опубликуйте новый скетч, я ещё подскажу. Там ещё много глупостей, но слона надо по частям кушать.

думаешь на ТС подействует?