#arduino #arduino-uno #gpio
#arduino #arduino-uno #gpio
Вопрос:
Я использовал этот код для проверки состояния вывода Arduino 8. Чтобы увидеть, является ли вывод высоким или низким, но мой вывод постоянно меняется с высокого на низкий.
Я ничего не подключаю к выводу 8 во время выполнения этого кода.
const int Pin = 8;
int Reading=0;
void setup() {
Serial.begin(9600);
delay(2000);
pinMode(Pin, INPUT);
}
void loop() {
Reading = digitalRead(Pin);
if(Reading == HIGH)
{
Serial.println("HIGH");
delay(2000);
}
if(Reading == LOW)
{
Serial.println("LOW");
delay(2000);
}
}
Но мой вывод выглядит следующим образом:
ВЫВОД:
HIGH
HIGH
LOW
LOW
HIGH
HIGH
LOW
LOW
HIGH
HIGH
LOW
LOW
HIGH
HIGH
LOW
LOW
Не знаете, что делать??
Комментарии:
1. Возможно, вам захочется узнать, что это за выводы, а не тестировать их и быть сбитым с толку тем, что вы найдете. На схеме распиновки указано, что это clk0, так что, вероятно, он выводит тактовый сигнал.
2. Ага. arduino.cc/en/Reference/SPI
3. @Will Он не инициализирует SPI, поэтому это не должно быть реальной причиной. Однако он заявляет, что «ничего не подключено», и код показывает:
pinMode(Pin, INPUT);
, так что это может быть больше похоже на проблему с плавающим вводом.4. Если к входу ничего не подключено, то почему вас волнует, что это за вход? Если вам не все равно, подумайте о добавлении подтягивающего резистора и / или подключите что-нибудь.
5. Да, вот и все. У вас есть вывод в неопределенном состоянии. Это называется плавающим выводом. Как заявили KIIV и blt, вам следует рассмотреть подтягивающий или понижающий резистор. В зависимости от вашего Arduino, ATmega также поставляется с внутренними резисторами, которые можно настроить.
Ответ №1:
Это правильное поведение.
Поскольку вы не подключаете вывод, считывание должно быть неопределенным (что означает, что оно нестабильно). Проверьте «плавающее» состояние, чтобы узнать больше.
Если вы хотите сделать его стабильным, рассмотрите возможность использования внутреннего подтягивающего резистора. Измените строку
pinMode (вывод, ВВОД);
Для
pinMode (вывод, INPUT_PULLUP);
чтобы он всегда был высоким при отключении. В этом случае вам следует учитывать внутреннее сопротивление подтягиванию, когда вы на самом деле пытаетесь подключить вывод.
Официальная документация Arduino предоставляет более подробные описания каждого состояния GPIO.
Ответ №2:
Поскольку внутренние подтягивания слабые, иногда добавление
pinMode(Pin, INPUT_PULLUP);
это не решит проблему, поэтому вам нужно добавить сопротивление 10 Ком или выше между выводом и землей / питанием, чтобы первоначально заставить вывод подтягиваться или опускаться.