Прерывание активируется, как только я вставляю перемычку в порт
Я написал очень простой код для проверки работы прерываний моей платы расширения Arduino Uno:
const byte buttonPin3 = 3;
void setup() {
pinMode(buttonPin3, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin3), trigger, CHANGE);
Serial.begin(9600);
}
void loop() {
}
void trigger(){
Serial.println("trigger");
}
Однако Serial.println("trigger");
активируется, как только я вставляю перемычку в контакты 2 или 3. Похоже, я сломал микроконтроллер. Я был бы признателен, если бы вы могли помочь мне узнать, что-то не так с моим кодом или мне нужно изменить микроконтроллер? если мне нужно заменить MCU, могу ли я просто использовать любой идентичный AVR и просто поместить его на адаптер гнезда DIP IC?
PS Филип Франик попросил меня нарисовать схемы:
PS Я использовал официальный учебник по кнопке, и теперь все работает нормально. Я больше не могу воспроизвести проблему без видимой причины!.
@Foad, 👍1
Обсуждение2 ответа
Подключите контакты 2 и 3 с помощью двух резисторов 1K к земле.
Когда контакт, установленный как INPUT, является «плавающим» (он ни к чему не подключен), значение на нем «не определено», и прерывание может срабатывать при изменении состояния соседнего контакта или даже просто волшебным образом само по себе. Резисторы номиналом 1 кОм (называемые подтягивающими резисторами) гарантируют, что контакт установлен в НИЗКИЙ уровень, когда он не подключен с помощью перемычки.
Эта схема должна обеспечивать стабильное 0 В на контакте 3, когда переключатель не нажат, и 5 В, когда он нажат. Вы должны быть в состоянии проверить это с помощью любого вольтметра.
Если проблема не устранена, замена микроконтроллера на Arduino — это лишь один из шагов, которые необходимо выполнить. Вам также потребуется записать загрузчик на чип. Это несложная процедура, но для нее требуется второй Arduino.
При этом нет непрерывных прерываний. Однако, как только я удаляю провод, чтобы подключить его к другому месту, где он должен быть, он снова начинает срабатывать!, @Foad
Можете ли вы нарисовать свои связи? У меня проблемы с представлением вашего дизайна. Также используйте вольтметр и проверьте, есть ли 5 В после того, как вы поместите перемычку и резистор на контакт., @Filip Franik
добавил в пост, @Foad
"...как только я убираю провод, чтобы подключить его к другому месту, где он должен быть, он снова начинает срабатывать!" В этом есть смысл. Когда контакт ни к чему не подключен, он снова начинает плавать., @Duncan C
Входы CMOS «плавают», когда ни к чему не подключены, и выдают полуслучайные значения. Вы можете либо соединить вывод с землей через резистор среднего значения (1кОм-10кОм), либо установить вывод в режим INPUT_PULLUP.
Вы не должны перемещать контакты прерывания во время работы Arduino. Как только вы отсоединяете провод от входа, он снова начинает плавать и может обнаруживать полуслучайные значения HIGH/LOW.
Если вы используете внешний подтягивающий резистор, поместите разъем после заземления и переместите это соединение, чтобы подтягивающий резистор всегда был подключен к контакту.
Если вы используете режим INPUT_PULLUP, вам не следует использовать подтягивающий или подтягивающий резистор. В этом режиме контакт слабо подключается к +5 В, что будет удерживать его в ВЫСОКОМ значении, когда он ни к чему не подключен. Затем вы бы заземлили его, чтобы вызвать прерывание. В режиме INPUT_PULLUP вы, вероятно, сможете отсоединить провод от вывода прерывания, не вызывая прерывания.
- Можно ли программировать для Ардуино без реальной платы?
- Использование millis() и micros() внутри процедуры прерывания
- Подсчет импульсов с прерыванием
- Устранение дребезга кнопки с помощью прерывания
- Программа arduino выдаёт ошибку expected //primary-expression before ')' token error: //expected ';' before '}' token E
- Почему необходимо использовать ключевое слово volatile для глобальных переменных при обработке прерываний в ардуино?
- Как сгенерировать аппаратное прерывание в mpu6050 для пробуждения Arduino из режима SLEEP_MODE_PWR_DOWN?
- Использование поворотных энкодеров с прерываниями смены контактов
В схеме, которую вы разместили, нет кнопки или перемычки куда-то еще. В текущем состоянии оба контакта будут отображать только 0 в качестве своего состояния. Объясните, пожалуйста, какой соединительный кабель вы имеете в виду, куда вы его подключаете и куда он оттуда идет., @chrisl