Индуктивный датчик приближения металла вызывает дребезг

Всем доброго времени суток!
Индуктивный датчик приближения металла


срабатывает в рандомном порядке.
Также срабатывает, если воткнуть в сеть например паяльник.
Пробовал использовать pullup и задержку до 1 секунды!!! Не помогло. Использую ардуино уно. Питание датчика от отдельного блока питания. Нулевые провода ссоеденены с землей на плате.
Вот код:

#include <SPI.h>
#include <EEPROM.h>
#include <SoftwareSerial.h>



boolean fakel_flag = true;

void setup() {
  pinMode(2, INPUT); //датчик металла факел
  pinMode(4, OUTPUT); // замок
  pinMode(7, OUTPUT); // реле свет/уф
  //pinMode(2, INPUT_PULLUP); // кнопка старт
}

void loop()
{
  int fakel = digitalRead(2);
  
  // ФАКЕЛ
  if (fakel == 0 and fakel_flag == true)
  {
    delay (1000);
    if (fakel == 0 and fakel_flag == true)
    {
      fakel_flag = false;
      //моргает белый/уф 2 секунды
      digitalWrite(3, 1); delay (250);  digitalWrite(3, 0); delay (250); digitalWrite(3, 1); delay (250);  digitalWrite(3, 0); delay (250);
      digitalWrite(3, 1); delay (250);  digitalWrite(3, 0); delay (250); digitalWrite(3, 1); delay (250);  digitalWrite(3, 0); delay (250); digitalWrite(3, 1);


      digitalWrite(4, 1); // открыл замок
      delay (3000);
      digitalWrite(4, 0);  // закрыл замок


      //delay (3000);
      //// digitalWrite(10, 0);  // закрыл замок
    }
  }
}

Помогите пожалуйста)))

А где у Вас повторный опрос датчика?
По идее должен быть после 23 строки.

Точно!!!
Он же его второй раз не опрашивает. Он же внутри цикла. Спасибо, добрый человек))

и еще, не вижу где fakel_flag опрокидывается обратно в true .

1 лайк

А он должен только 1 раз сработать

вполне можно заменить на
if (!digitalRead(2) and fakel_flag == true)и заодно
if (!digitalRead(2) and fakel_flag)

Да, я так и планировал