Проблемы интеграции геркона и соленоидного замка в код Arduino

Я пытаюсь интегрировать соленоидный замок и геркон в свой код Arduino. Поток, которого я пытаюсь достичь, таков: сначала блокировка соленоида устанавливается на НИЗКИЙ, а затем программа проверяет, находится ли геркон на высоком или низком уровне. Только если это High, я хочу продолжить. Однако, даже когда геркон находится в положении ВЫСОКОЕ, программа не выполняется дальше. Вот мой код ниже:

    #include<HX711_ADC.h>
    #include<math.h>

    //пины для блокировки
    int solenoidPin = 7;

    //контакты для геркона
    int reedSwitch = 2;
    bool reedSwitchStatus;

    //пин для светодиода
    int led_pin= 9;

    void setup() 
    {
      Serial.begin(38400); 
      pinMode(solenoidPin, OUTPUT);          
      pinMode(reedSwitch, INPUT);

      doorUnlock();
    }

    void loop() 
      {}

    void doorUnlock()
    {
      digitalWrite(solenoidPin, LOW);
      delay(5000); 
      checkReedSwitchStatus();
    }

    void checkReedSwitchStatus()
    {
      reedSwitchStatus = digitalRead(reedSwitch);

      if(reedSwitchStatus == 1)
      {
        Serial.println("Beginning Transaction");
        beginTransaction();
        }
      if (reedSwitchStatus == 0)
        {
          Serial.println("Ending trasaction");
          endTransaction();
          }
      }
      void beginTransaction()
      {
      digitalWrite(led_pin, HIGH);
      delay(500);
      digitalWrite(led_pin, LOW);
      delay(500);
      }

Моя проблема заключается в том, что функция beginTransaction никогда не выполняется. Последовательный монитор постоянно печатает «Начало транзакции». Прикрепил скриншот последовательного монитора. Пожалуйста, предложите мне, что является ошибкой в моем коде. Заранее спасибо!

, 👍0

Обсуждение

Откуда вы знаете, что функция beginTransaction() не выполняется. Пожалуйста, включите полный код. Также: у вас есть внешний подтягивающий или подтягивающий резистор для геркона?, @chrisl

Привет, Крисл, я использовал внешний подтягивающий резистор для геркона. Я также отредактировал свой вопрос, добавив в код функцию beginTransaction(). Функция не выполняется, потому что светодиод не мигает., @Prashant


1 ответ


Лучший ответ:

0

Проблема в том, что вы не инициируете вывод светодиода на выход. При сбросе контакт настраивается как вход. Выполнение digitalWrite(led_pin, HIGH) в этом состоянии просто включает внутренний подтягивающий резистор. Если вы измерите напряжение без подключенного светодиода, оно будет 5 В, но, поскольку контакт обеспечивает очень небольшой ток через подтягивающий резистор, светодиод не может загореться при подключении.

Вы должны настроить контакт светодиода как выход через

pinMode(led_pin, OUTPUT);

в вашей функции setup().

На самом деле функция beginTransaction() была выполнена корректно. Вы просто не могли этого увидеть.

,

Спасибо!! Это исправило проблему., @Prashant