Чтение состояний выходов
- Войдите на сайт для отправки комментариев
Ср, 02/03/2016 - 13:19
Здравия тебе, all.
Суть вопроса: я настраиваю некоторый вывод на выход (pinMode(x,OUTPUT); или DDRx=0x(...)1(...);) и затем пишу туда значение, 0 или 1. В следующем цикле я не помню это значение, можно ли его прочитать? То есть, можно ли делать такие вещи:
boolean bOn=0; void setup(){ DDRB=0x00000001; } void loop(){ if(something){ PORTB=0x00000001; }else{ PORTB=0x00000000; } bOn=PORTB==0x00000001; // true if on }
Или обязательно заводить переменную и из неё писать в порт, а при надобности узнать что там в порту - читать эту переменную?
Можно, только имей в виду, если ты выдал 1, а нога просажена в 0, то прочитаешь 0.
Схема порта до кучи:
std bOn=PORTB==0x00000001; // true if on
что это за глубокомысленное выражение ? :)
Не, тут имеется в виду случай, когда к порту присоединено нечто с высоким (относительно) входным сопротивлением, типа транзисторов или входов TTL. Я всегда сперва собираю устройство, а только потом пишу скетч чтобы точно знать что кнопки и т. п. у меня на портах, объявленных как вход. Чтобы что-нибудь не пожечь.
Хотя, мб надо выработать привычку, на все выводы ставить резисторы.
Ну скобок нету :) С++ же, родимый. Страуструповский.
Немного не так. Если читать PORTB, как в примере у ТС - прочитается именно то, что туда записывали.
А реальное состояние вывода читается из PINB, и да, в каких-то случаях оно может отличаться от PORTB.
я настраиваю некоторый вывод на выход (pinMode(x,OUTPUT); или DDRx=0x(...)1(...);) и затем пишу туда значение, 0 или 1. В следующем цикле я не помню это значение, можно ли его прочитать?
Вообще-то конструкция типа
используется практически во всех классических "блинках".
Datak, да понятно что там по маске. ЕвгенийП, спасибо за ответ, теперь ясно.