Как сканировать сигнал HIGH на digitalRead во время основного цикла, одновременно выполняя другие задачи?

Я работаю над программой, которая прослушивает определенные байты последовательного порта через лестницу if/then/elseif. Я также хочу проверить , перешел ли контакт (скажем, A15) в ВЫСОКОЕ состояние от другого Arduino с общим заземлением. Подчиненный Arduino переведет цифровой вывод в положение HIGH, и я хочу, чтобы MEGA2560 каждый раз при циклическом выполнении проверял, присутствует ли HIGH с другой платы. Оператор «Пока кнопка не нажата, ничего не делать» не будет работать, потому что это не позволит циклу завершиться. Я попробовал выполнить оператор if, используя что-то вроде этого:

if (digitalRead(A15)==HIGH) {
  //things to do
}

Но, похоже, неважно, что я ставлю, будь то HIGH, LOW, != HIGH, != LOW и т. д. или любой входной контактный режим, подтягивающий или нет, он всегда думает, что плата передает ВЫСОКИЙ уровень. Фактически, он не думает, что это ВЫСОКИЙ уровень, только тогда, когда на самом деле он высокий. Я очень озадачен этим. Если вы спросите меня, digitalRead действительно странен с тем, что ВЫСОКОЕ, а что НИЗКОЕ.

, 👍0

Обсуждение

Вы объявляете A15 как «INPUT» в «Setup()», «pinMode(A15, INPUT);»? Не могли бы вы показать нам весь эскиз, который вы используете?, @VE7JRO

Я попробовал и это, и input_pullup. Могу приложить весь эскиз. *РЕДАКТИРОВАТЬ:* На самом деле, к сожалению, я только что посмотрел, и это похоже на то, что предыдущий эскиз заблокировал плату, я отредактировал его до того, как он был добавлен, и пренебрег сохранением копии сломанного кода., @SYGMAH

У вас есть изготовленная на заказ печатная плата atmega2560 или настоящая плата Arduino Mega 2560 или ее клон? Возможно, некоторые контакты GND или VCC на Atmega2560 не припаяны. Arduino Mega 2560 работает при напряжении 5,0 В? Он начинает делать странные вещи при напряжении 4,5 В или ниже., @Jot

Это клон Elago платы MEGA2560. Я подключил его к USB-порту настольного компьютера, поэтому сомневаюсь, что произошел сбой в питании., @SYGMAH


1 ответ


1

Упростите и покажите код установки.

Во-первых, есть ли у вас вызов pinMode в вашей функции настройки:

void setup() {
  pinMode(A15, INPUT_PULLUP);
  Serial.begin(115200);
}

Затем используйте такой тестовый код:

void loop() {
   if (digitalRead(A15) == HIGH) {
      Serial.println("Pin A15 is HIGH");
   } else {
      Serial.println("Pin A15 is LOW");
   }
}

Подключите контакт A15 напрямую к земле с помощью перемычки и запустите приведенный выше скетч. Откройте последовательный монитор и посмотрите, что выводится. Оно должно быть НИЗКИМ. Затем отсоедините перемычку и проверьте еще раз. Теперь оно должно быть ВЫСОКИМ. Наконец, подключите перемычку между A15 и +5 В и еще раз проверьте выход. Он по-прежнему должен показывать ВЫСОКИЙ уровень.

Это позволяет устранять неполадки только в программном обеспечении. Как только все заработает, подключите контакт A15 к выходному контакту удаленного Arduino и повторите попытку.

,

Я попробую это завтра, как только доберусь до доски., @SYGMAH