digitalRead(), замена, работа через порт
- Войдите на сайт для отправки комментариев
добрый день
- Atmega328P
- на 3м порту (PD3/INT1) висит кнопка
- порт сконфигурирован на вход, подтяжка установлена
- дребезг контактов давится программно
попытался заменить ардуиновскую функцию digitalRead() на более низкоуровневую:
#define _L( BIT) ( _BV( BIT ) )
#define _R(PORT,BIT) ( PORT >> BIT )
#define PORTD_GET(BIT) ( _R ( ( PIND & _L(BIT) ) , (BIT) ) )
#define D03_GET (PORTD_GET (3))
#define PORT_GET_BTN ( D03_GET )
т.е. в коде
digitalRead(3)
меняется на
PORT_GET_BTN
при быстрой проверке работает нормально, читат все ок, но вот при дотошном прогоне кода, программа начинает подглючивать
причем при замене макроопределения на след. программа перестает тупить:
#define PORT_GET_BTN (digitalRead(3))
ВОПРОСЫ:
- привильно ли определен PORT_GET_BTN ?
- из за чего может глючить (хотя бы потенциально) ?
- где то читал, что для кнопок внутреннего подтягивающего сопротивления не достаточно и надо ставить внешние, кто что думает по этому поводу ?
можно ключевые слова, ссылки, в личку итд...
add:
- правомерная ли такая замена?