1 (2009-05-22 22:03:26 отредактировано Andrei)

Тема: Порты в режиме input

При загрузке программы

digitalWrite(13, digitalRead(3) );

светодиод в 13 порту загораеться сразу же, как только на 3 порт подаю +5,

но после снятия напряжения с 3 порта светодиод горит еще некоторое время.

Я так понимаю это связано с:

Если к считываемому порту ничего не подключено, то функция digitalRead () может беспорядочно возвращать значения HIGH или LOW.

Но как с этим бороться, поставить параллельно выключателю, установленному на 3 порт, сопротивление?

2

Re: Порты в режиме input

Andrei пишет:

Если к считываемому порту ничего не подключено, то функция digitalRead () может беспорядочно возвращать значения HIGH или LOW.
Но как с этим бороться, поставить параллельно выключателю, установленному на 3 порт, сопротивление?

Вы правы - "висеть в воздухе" вывод микроконтроллера не должен, и если Вам нужно подцепить к микроконтроллеру кнопку или выключатель, то в разомкнутом состоянии нога микроконтроллера должна через резистор быть соединена например с +5, а в замкнутом - с землей. Либо наоборот. Оба варианта можно изобразить вот так:
http://freeduino.ru/images_forum/pull_up_down.gif
Первый вариант предпочтительнее, т.к. подтягивающие к +5В резисторы уже есть внутри микроконтроллера - их нужно только программно включить. Ваш выключатель будет либо соединять вывод микроконтроллера с землей, либо разъединять, и тогда он "притянется" резистором к +5.
После того, как вывод установлен на "вход" чтобы включить на нем подтягивающий резистор нужно "записать" в него 1.
программа будет примерно такой:

void setup() {
  pinMode(13, OUTPUT);   //13я нога - выход
  pinMode(3, INPUT);     //3я - вход
  digitalWrite(3, HIGH); //включаем подтягивающий резистор
}
void loop() {
  digitalWrite(13, digitalRead(3));
}

Ну, и при работе с кнопками и выключателями нужно бороться с дребезгом контактов. На www.arduino.cc даже есть несколько библиотек для этой цели. Появятся вопросы - пишите.

3 (2009-05-23 19:49:37 отредактировано Andrei)

Re: Порты в режиме input

Спасибо.
Счас попробую, думаю резистора на 220 Ом будет в самый раз.

Попробовал вариант 1 - получил интересный эффект, все работает наооборот:
- контакт разомкнут, робот выполняет операцию объезда препятствий
- контак замкнут, робот едет вперед

пришлось в условие вставить проверку на уровень LOW  вместо HIGH

4

Re: Порты в режиме input

Andrei пишет:

Спасибо.
Счас попробую, думаю резистора на 220 Ом будет в самый раз.

Забыл указать сопротивление. 220 Ом - это мало, т.к. бегущий через него ток при замкнутом контакте будет 5В/220Ом = 22мА - это многовато. Зачем лишний ток потреблять?
Обычно ставят около 10кОм.
Встроенные резисторы согласно документации 20-50кОм.

Andrei пишет:

Попробовал вариант 1 - получил интересный эффект, все работает наооборот:

Все верно. В программе нужно учесть, что при замкнутом контакте будет читаться 0, а при разомкнутом - 1.