Помощь в написании скетча

Прошу помощи у знатоков. Хочу сделать сигнализацию на открытие/закрытие двери морозильной камеры(на arduino nano). Есть концевик на двери. Он должен управлять лампочкой, вентилятором, зуммером. При размыкании концевика(открытии двери) вентилятор должен отключиться, лампа включиться и должна быть индикация с зуммера( к примеру два писка). Если дверь не закрыта в течение минуты(концевик разомкнут) зуммер должен включиться пока не закроется дверь(замкнется концевик). При закрытии двери(замыкании концевика) вентилятор должен включиться и лампа погаснуть. Скетч вроде рабочий и даже компилируется, но на столе не работает. Бьюсь над этим уже неделю. Кто нибудь проверьте пожалуйста скетч.

#define kc_pin 5    //концевик двери
#define cool_pin 3  //вентиляторы конденсатора
#define zoo_pin 6   //зуммер
#define lamp_pin 7  //лампочка сигнализации
#define rel_pin 4

void setup() {
  pinMode(kc_pin, INPUT_PULLUP);
  pinMode(cool_pin, OUTPUT);
  pinMode(zoo_pin, OUTPUT);
  pinMode(lamp_pin, OUTPUT);
  pinMode(rel_pin, OUTPUT);
  digitalWrite(rel_pin, HIGH);
}

void loop() {

  if (kc_pin == HIGH) {
    digitalWrite(cool_pin, LOW);
    digitalWrite(lamp_pin, HIGH);
    digitalWrite(zoo_pin, HIGH);
    delay(500);
    digitalWrite(zoo_pin, LOW);
    delay(500);
    digitalWrite(zoo_pin, HIGH);
    delay(500);
    digitalWrite(zoo_pin, LOW);
    delay(60000);
    digitalWrite(zoo_pin, HIGH);
  }
  if (kc_pin == LOW) {
    digitalWrite(zoo_pin, LOW);
    digitalWrite(lamp_pin, LOW);
    digitalWrite(cool_pin, HIGH);
  }
}

Вставьте код по правилам форума.

Уже сделал

Для начала избавься от delay()

Я наверное по уровню ниже нулевого. Как мне убрать паузы когда они мне нужны?

Функция loop() (“петля”) не зря так называется, все что в ней написано (код) выполняется постоянно.
А для отсчета интервалов необходимых используются счетчик времени (millis()).

Почитай что по ссылке выше написано очень внимательно, раз 15-20…

При закрытой двери концевик выдает ХАЙ или ЛОУ?

Для начала, состояние пина концевика не плохо было бы прочитать! :slight_smile:
Автор, не kc_pin надо сравнивать с HIGH или LOW, a digitalRead(kc_pin).
А вот дальше всё будет плохо работать из-за огромного делея.

Большого слона надо есть по частям, сначала отлаживаем участки кода отрабатывающие без задержек:

#define kc_pin 5    //концевик двери
#define cool_pin 3  //вентиляторы конденсатора
#define zoo_pin 6   //зуммер
#define lamp_pin 7  //лампочка сигнализации
#define rel_pin 4

void setup() {
  pinMode(kc_pin, INPUT_PULLUP);
  pinMode(cool_pin, OUTPUT);
  pinMode(zoo_pin, OUTPUT);
  pinMode(lamp_pin, OUTPUT);
  pinMode(rel_pin, OUTPUT);
  digitalWrite(rel_pin, HIGH);
}

void loop() {

  if (digitalRead(kc_pin) == HIGH) {
    digitalWrite(cool_pin, LOW);
    digitalWrite(lamp_pin, HIGH);
   /*
    digitalWrite(zoo_pin, HIGH);
    delay(500);
    digitalWrite(zoo_pin, LOW);
    delay(500);
    digitalWrite(zoo_pin, HIGH);
    delay(500);
    digitalWrite(zoo_pin, LOW);
    delay(60000);
    digitalWrite(zoo_pin, HIGH);
    */
  } else {
    digitalWrite(zoo_pin, LOW);
    digitalWrite(lamp_pin, LOW);
    digitalWrite(cool_pin, HIGH);
   }
}

значение LOW

Ты проверил, лампа и вентилятор правильно работают?

концевик инвертируемый=) не проблема

какая “не проблема” ?
Прочитайте внимательно, что вам ответили в посте 8 - у вас в коде написана откровенная чушь, вместо того чтоб читать и сравнивать сигнал на пине - вы сравниваете с HIGH и LOW номер пина. А номер бесполезно сравнивать, он константа и от сигнала не зависит!

Ну, не совсем же бесполезно. Первый закон Скотта, вроде никто пока не отменял: «Неважно, что что-то идет неправильно. Возможно, это хорошо выглядит…»

2 лайка

Это я уже понял. и исправил

тогда выкладывайте исправленый код

Все работает по приведенному скетчу. теперь надо настроить зуммер с задержками

прочитал раз десять. Понимаю что как то можно использовать millis вместо delay/Но не могу понять как это должно выглядеть в коде.

Далее подключаем зуммер, разбираешь, что там и как и пишешь пояснения:

void loop() {

  if (digitalRead(kc_pin)) {  // концевик разомкнут
 // if (!digitalRead(kc_pin)) { // концевик замкнут
    digitalWrite(cool_pin, LOW);
    digitalWrite(lamp_pin, HIGH);

    if (!beep) {
      beep = true;
      digitalWrite(zoo_pin, HIGH);
      delay(500);
      digitalWrite(zoo_pin, LOW);
      delay(500);
      digitalWrite(zoo_pin, HIGH);
      delay(500);
      digitalWrite(zoo_pin, LOW);
      old_millis = millis();
    }

    if (millis() - old_millis > 60000) {
      digitalWrite(zoo_pin, HIGH);
    }
  } else {
    digitalWrite(zoo_pin, LOW);
    digitalWrite(lamp_pin, LOW);
    digitalWrite(cool_pin, HIGH);
    beep = false;
  }
}


digitalWrite(zoo_pin, LOW);
while (кнопка нажата) { ; }
digitalWrite(zoo_pin, HIGH);