Скетч останавливается, если кнопка нажата при загрузке

У меня есть поворотный энкодер KY-040 с кнопкой, подключенной к ESP8266. Моя цель — определить, нажата кнопка или нет при загрузке.

В приведенном ниже коде, если я удержу кнопку нажатой и включу ESP8266, ни сообщение «ОН НАЧАЕТСЯ» не появится; или «ЭТО ЗАциклИВАЕТСЯ»; печатается на последовательном мониторе, даже если я отпущу кнопку. Если я не нажимаю кнопку, код работает как положено и печатает «ОН НАЧАЛОСЬ». за которым следует «ЭТО ЗАциклИВАЕТСЯ». Как будто код зависает/останавливается, если я нажимаю кнопку при загрузке.

Может кто-нибудь объяснить, почему это происходит?

Я также был бы признателен за предложения о том, как определить состояние (нажата/не нажата) кнопки при включении ESP8266.

Вот мой код:

void setup() {
  pinMode(D3, INPUT_PULLUP);
  Serial.begin(115200);
  Serial.println("IT'S STARTED");
}

void loop() {
  Serial.println("IT'S LOOPING");
  delay(1000);
}

, 👍0

Обсуждение

D3 — это io 0, контакт режима загрузки. https://arduinoprosto.ru/q/75704/what-are-the-best-gpio-pins-to-use-for-my-project/75706#75706, @Juraj


1 ответ


Лучший ответ:

4

Описание контакта D3 из этого справочника по распиновке ESP8266:

подключено к кнопке FLASH, при нажатии на НИЗКИЙ уровень загрузки произойдет сбой

Поэтому вы не можете перевести этот контакт в положение LOW во время загрузки, так как это будет держать ESP в режиме флэш-памяти. Вам нужно использовать вывод, который не имеет этого ограничения, например D1, D2, D5, D6 или D7.

,

Спасибо за ответ @chrisl. Из всех булавок, которые я мог выбрать!, @Lachlan Etherton