Проблемы интеграции геркона и соленоидного замка в код 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 никогда не выполняется. Последовательный монитор постоянно печатает «Начало транзакции». Прикрепил скриншот последовательного монитора. Пожалуйста, предложите мне, что является ошибкой в моем коде. Заранее спасибо!
@Prashant, 👍0
Обсуждение1 ответ
Лучший ответ:
Проблема в том, что вы не инициируете вывод светодиода на выход. При сбросе контакт настраивается как вход. Выполнение digitalWrite(led_pin, HIGH)
в этом состоянии просто включает внутренний подтягивающий резистор. Если вы измерите напряжение без подключенного светодиода, оно будет 5 В, но, поскольку контакт обеспечивает очень небольшой ток через подтягивающий резистор, светодиод не может загореться при подключении.
Вы должны настроить контакт светодиода как выход через
pinMode(led_pin, OUTPUT);
в вашей функции setup()
.
На самом деле функция beginTransaction()
была выполнена корректно. Вы просто не могли этого увидеть.
Спасибо!! Это исправило проблему., @Prashant
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Откуда вы знаете, что функция
beginTransaction()
не выполняется. Пожалуйста, включите полный код. Также: у вас есть внешний подтягивающий или подтягивающий резистор для геркона?, @chrislПривет, Крисл, я использовал внешний подтягивающий резистор для геркона. Я также отредактировал свой вопрос, добавив в код функцию beginTransaction(). Функция не выполняется, потому что светодиод не мигает., @Prashant