Задать вопрос
@Alexander1705

Почему digitalRead рандомно возвращает HIGH?

Написал первую программку на arduino (mega 2560): замыкаешь проводки - светодиод горит, размыкаешь - не горит.
int ledPin = 13;
int switchPin = 10;


void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  digitalWrite(ledPin, digitalRead(switchPin));
  delay(250);
}


Так вот, когда замыкаю, всё нормально - светиться, но когда размыкаю - светодиод начинает мигать.
Почему digitalRead иногда возвращает истину, если на самом деле сигнала нет?
  • Вопрос задан
  • 1035 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 2
Используйте стягивающие/подтягивающие резисторы, что бы не ловить помехи.

стягивающий:
%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%
Есть нажатие: Vout = Vcc
Нет нажатия: Vout = 0

подтягивающие:
%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%
Есть нажатие: Vout = 0
Нет нажатия: Vout = Vcc
Ответ написан
Комментировать
LittleFatNinja
@LittleFatNinja
горе девелопер, любитель лютой садомии
у меня тоже что то похожее было, оказался не digital read, а схема подключения
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AlexanderKomarchouk
программист PHP, embedded atmega/stm32
В Atmega порт очень чувствительный, и принимает помехи на линии за изменение логического сигнала на входе.
Что бы избежать этого, можно между входом и + питания подключить резистор, например, 10 кОм, т.е. "подтянуть к питанию", либо использовать "встроенные" в микроконтроллер программируемые "подтягивающие" резисторы.
Для этого нужно написать:
void setup()
{
  pinMode(switchPin, INPUT_PULLUP);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы