Официальный сайт компании Arduino по адресу arduino.cc
Вопрос по чтению с цифрового пина при pinMode(x, OUTPUT)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 24/08/2011 - 09:48
Добрый день!
Никак не могу понять, можно ли читать с цифрового пина, которой находится в режиме output... пробывал, работает, но на очередном контроллере возникли глюки с этим моментом, а именно показывает неверную информацию... корректно ли использовать что то вроде этого:
... pinMode(3, OUTPUT); digitalWrite(3, HIGH); ... val=digitalRead(3);
А что вы хотите там увидеть ?
Вы увидите то что вы там установили , т.е. HIGH.
Это и хочу. Просто на одном устройстве мне такой код вернул "1", когда я ее туда не подавал. Видимо реализую с помощью булевых переменных.
Куда вы водите эту переменную ?
Как вы ее видите ?
Что значит " код вернул еденицу , когда я ее не подавал " ?
Т.е. вы пишете такой код :
1 ...
2
3 pinMode(3, OUTPUT);
4
5 digitalWrite(3, LOW);
6
7 ...
8
9 val=digitalRead(3);
а он выдает еденицу ?
Такого быть не может .
Прошу прощения за неточное объяснение, просто я очень увлечен. Точный код не выложу, т.к. я сейчас на работе, а код дома остался :)
нет, вот что у меня получается
#define pin1 2
#define pin2 3
#define pin3 4
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
потом я делаю
digitalWrite(pin1, high);
и опрашиваю все пины на предмет единицы:
Serial.println(digitalRead(pin1));
Serial.println(digitalRead(pin2));
Serial.println(digitalRead(pin3));
в ответ мне выдается, что единица есть на двух!! пинах, хотя digitalWrite я делал только на 1... при подключении реальных светодиодов все корректно (ничего лишнего не загорается), наблюдаю это на 1-ой ордуино нано, на другой ордуино такого нет и на сииидуино такого нет.
Каким образом вы устанавливаете HIGH напинах ?
Если внешним способом (кнопки/датчики) то проблема может быть в подключении.
Если просто внутрипрограмно то попробуйте вот так :
digitalWrite(1,HIGH);
if(digitalRead(1)==HIGH)
{
Serial.prnt("1,HIGH");
}
else
{
Serial.print ("1,LOW");
}
Кстати , что такое #define pin1 2 ?
Да , кстати , если вы устанавливаете 1 на одном пине а на других не устанавливаете вообще ничего то
значение на них может "плавать" (тем более если к ним ничего не подключено).
Обязательно указывайте
dgitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
У вас значение пинов 2и3 не указано вообще , программа не знает что ей делать и выдает случайное значение
, которое зависит от бурь на солнце.
Да , кстати , если вы устанавливаете 1 на одном пине а на других не устанавливаете вообще ничего то
значение на них может "плавать" (тем более если к ним ничего не подключено).
Обязательно указывайте
dgitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
У вас значение пинов 2и3 не указано вообще , программа не знает что ей делать и выдает случайное значение
, которое зависит от бурь на солнце.
Я написал в Arduino IDE некоторое подобие командного интерпретатора на ком-порту, к ардуино я подключаюсь через putty (терминал). В коммандном интерпретаторе я указываю "led1 on", потом указываю "status" на которое выполняется как раз
Serial.println(digitalRead(pin1));
Serial.println(digitalRead(pin2));
Serial.println(digitalRead(pin3));
Попробую сбрасывать в ноль нужные пины в setup. Видимо, правда имеет место случайное значение, которое хз от чего зависит :)
#define pin1 2 использую для удобства, чтобы не указывать каждый раз номер пина, как константу.
Спасибо за помощь