Как узнать состояние цифрового выхода?
- Войдите на сайт для отправки комментариев
Втр, 09/07/2013 - 17:18
Т.е. pin был установлен в режим выхода
pinMode(ledPin, OUTPUT);
На него был подан один из уровней хай или лоу.
Могу я как то узнать, какой из уровней был подан последним? Понятно, что я сам их подаю и можно отследить, что подавалось, но может есть возможность просто считать состояние?
Понятно, что я сам их подаю и можно отследить, что подавалось, но может есть возможность просто считать состояние?
А смысл? Заведите переменную и когда пишете в выход, пишите и в неё. Я бы так и сделал.
В вашем случает это digitalRead().
В вашем случает это digitalRead().
Не меняя pinMode?
Cool Smile,
да, можно так
Не меняя pinMode?
pinMode, с точки зрения физики, это наличие/отсутствие резистора на выходе, а не возможность только читать или только писать... :)
какого резистора? pinMode устанавливает направление порта. или я не понял о чем вы.
какого резистора? pinMode устанавливает направление порта. или я не понял о чем вы.
Ну, мне прямо даже неудобно: http://arduino.ru/Tutorial/DigitalPins
"Сконфигурированные порты ввода находятся в высокоимпедансном состоянии."
Подробнее есть на http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-v...
ну. так топикстартер вроде как спрашивал как узнать состояние порта вывода, а не ввода, т.к. он туда "выводит".
зы. эт я крапаль намекаю что ответ немножко другой.
Хотел бы задать тот же вопрос.
в скетче при включении монитор порта ардуина перезагружается, и состояние светодиода становится LOW,
в монитор порта шлет постоянно LOW,
если нажать цифру 1 светодиод вкл и в порт передает постоянно HIGH
0 светодиод выкл и в порт передает постоянно LOW.
вопрос
1. как узнать первоначальное состояние если бы ардуина не перезагружалась?
2. как написать что бы в порт передавалось один раз HIGH или LOW а не постоянно?
разобрался авторезет отключил, в порт шлет включен или выключен, а есл постоянно небудет слать то наверно и состояние не отследить, извините за беспокойство. (сам с собой поговорил -))
Немного не по теме. Но раз здесь описаны цифровые выходы попробую задать вопрос сдесь.
По умолчанию arduino выводы находятся в Z состоянии (высокоимпедансное). Потом я могу настроить вывод на ввод или на вывод.
У меня вопрос: Как можно в теле Loop менять состояние выхода. Сначала он настроен на вывод, затем в Z состояние, затем опять на вывод. Нигде не нашел как перевести вывод из состояния как выход в Z состояние?
http://arduino.ru/Reference/PinMode
Правда тут нет про резистор привязки.
А как аы думаете работает термометр по однопроводной шине?
https://www.arduino.cc/reference/en/language/functions/digital-io/pinmode/
"вход" и "Z-состояние" - это одно и то же.
Перевести из любого состяния в любое, естественно, pinMode();
Чтобы перевести в состояние выхода: pinMode(pin, OUTPUT);
Чтобы перевести в состояние входа: pinMode(pin, INPUT);
Этот вариант про z состояние и про вход непрокатит. При конфигурировании "как вход" входной ток может быть слишком большим. Допускается до 1 мка. У меня выходной ток около 10 мка. Это дает большую погрешность. Надо получить что то типа как входной ток аналогового входа 0.05 мка.
Такой ток может беспечить специальный операционник, если включиь его как буфер к входу процессора. Не встречал я z состояния и что бы вход был. Выходы в z состоянии - это видел.
1. Режим работы пина Вход-Выход можно менять в любом месте программы. Хоть в setup, хоть в loop. Причём любое количество раз. Если того требует алгоритм работы программы.
2. Режим INPUT не всегда означает Z-состояние то есть высокое сопротивление. Можно притянуть pullup резистор. При этом входное сопротивление не будет равно бесконечности, точнее очень высоким.
3. Пин может находиться в следующих состояниях:
а. Вход, Z-состояние, входное сопротивление очень высокое.
б. Вход, притянутый к Vcc, сопротивление и смещение определяется резистором pullup. При отсутствии входного напряжения будет присутствовать уровень HIGH.
в. Выход. Выходное напряжение определяется состоянием выходных транзисторов. Закрыты, открыты.
PS: если установить режим работы пина 13 (к нему подключен светодиод) как вход, записать в него значение HIGH, то можно увидеть слабое свечение встроенного светодиода. Тока через pullup резистор вполне достаточно чтобы диод открылся.
Топикстартеру: Независимо от значения регистра DDRx (настройка режима порта вход - выход) выходное значение можно считать из регистра PINx. Или же digitalRead().
http://arduino.ru/forum/programmirovanie/bitovye-operatsii-proverit-bit#comment-433615