Функция digitalRead() ардуино не считывает входное значение, отправленное датчиком после обнаружения объекта

Schematic diagramЯ пытаюсь включить светодиод(встроенный/PIN13), когда фотоэлектрический датчик приближения(12 В) воспринимает любой объект. Датчик подключен на выводе 2. Назначенный вывод 2 в качестве входа, у меня есть реле 12 В spdt для переключения. выход 12 В от датчика подается на катушку, на другом конце 5 В подается на COM-pin и "Нормально открытый"(NO) pin на Arduino (с выпадающим резистором). Когда "НЕТ" подключен к свободному светодиоду, он работает правильно (показывает 5 В на вольтметре при обнаружении объекта). Но при подключении к Arduino digitalRead(), он всегда возвращает НИЗКИЙ/0.

//код
int a=0;
void setup() {
  pinMode(2,INPUT);
  pinMode(13,OUTPUT);
  Serial.begin(9600);
}

void loop() {
  a ==  digitalRead(2);
  Serial.println(a);
  if(a==HIGH){
    Serial.println("Object Detected");
    digitalWrite(13,HIGH);  
  }else{
    Serial.println("There's no object");  
    digitalWrite(13,LOW);  
  }
  delay(1000);
}

, 👍2

Обсуждение

трудно визуализировать то, что вы описываете ... пожалуйста, нарисуйте принципиальную схему или схему подключения ... также включите код, который вы используете, @jsotola

Чтобы прочитать этот детектор: избавьтесь от реле и замените его обычным делителем напряжения., @Sim Son

Я попробовал использовать 7805, чтобы получить выход 5 В. Это не сработало, @SimSon, @Prathamesh Konkar

@jsotola да. конечно. Я загружаю схему и код., @Prathamesh Konkar

используйте резистор 1 Ком для съема, @Juraj

@Juraj Я использовал резистор 1K для снятия, он не работал., @Prathamesh Konkar

Я говорю не о регуляторе напряжения, а о простом делителе напряжения, состоящем из двух резисторов. Датчик, вероятно, есть (у вас есть техническое описание?). не в состоянии обеспечить достаточный ток, чтобы активировать реле без вреда. Просто не используйте реле, это плохая конструкция., @Sim Son

А вы уверены, что распиновка реле правильная? Реле обычно имеют первичные контакты с одной стороны и вторичные-с другой., @Sim Son

@SimSon Прямо сейчас у меня нет подходящих резисторов, чтобы сделать делитель напряжения. Это просто реле, а не релейный модуль, поэтому вывод реле правильный. Датчик должен обеспечивать достаточный ток(у меня нет данных), потому что реле переключается при обнаружении объекта также с другой стороны реле получает 4,96 вольта (измеряется многометром) при обнаружении объекта. Но Arduino pin не распознает изменение напряжения (т. е. от 0 до 4,96). Все остальное работает абсолютно нормально, но функция digitalRead (), связанная с входным выводом Arduino, возвращает НИЗКИЙ уровень даже после обнаружения 4,96 В., @Prathamesh Konkar

Спасибо всем за ответ. Проблема решена это была глупая ошибка., @Prathamesh Konkar


1 ответ


2

a == digitalRead(2) должно быть a = digitalRead(2). Вам также лучше изменить предложение if на if(a), чтобы избежать путаницы true/HIGH/1.

Если бы вы отформатировали код правильно, вы бы сохраняли некоторое время (вам просто нужно выбрать код и нажать кнопку {}).

Вам также лучше заменить реле на делитель напряжения (как я уже упоминал в своем комментарии), потому что до тех пор, пока у вас нет схемы данных для датчика, вы не можете быть уверены, что датчик предназначен для источника такого большого тока. Если датчик должен управлять логикой TTL, он в конечном итоге выйдет из строя, так же, как вы не управляете реле с GPIO напрямую. И кроме того, вам нужен диод свободного хода через катушку реле, чтобы справиться с обратной ЭДС, которая также повредит датчику.

,

Я не могу себе этого простить. Я потратил около 3 дней на эту глупейшую синтаксическую опечатку. Спасибо, что обратили на это мое внимание. Спасибо за ваши предложения., @Prathamesh Konkar

о! Я попробую. Диодный материал очень полезен для меня. Спасибо., @Prathamesh Konkar