Как отслеживать нажатие кнопки?
У меня есть код:
const int buttonPin = 7; // номер порта нашей кнопки
void setup() {
// устанавливаем порт светодиода на выход
// устанавливаем порт кнопки на вход
pinMode(buttonPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// читаем состояние порта кнопки и записываем в переменную
int buttonState = digitalRead(buttonPin);
// делаем простую проверку нашей переменной
if (buttonState == HIGH) {
Serial.println("Yes");
} else {
Serial.println("No");
}
}
Как видно по коду я хочу, чтобы при включение кнопки в Монитор порте появлялось 'Yes', но проблема в том что надпись появляется только если я зажму кнопку, а мне надо что когда я один раз нажал и в порте высветилось yes.
Ответы (1 шт):
Автор решения: Vanyamba Electronics
→ Ссылка
Если подключить кнопку ко входу INT0 (Digital 2), то можно задать микроконтроллеру, чтобы тот генерил прерывание INT0_vect при нажатии или при отпускании кнопки. А в теле функции loop() проверять, была ли нажата кнопка за время работы функции.
volatile bool bInt0 = false;
void setup()
{
pinMode(2, INPUT);
EICRA |= _BV(ISC01) | _BV(ISC00); // Запрос на прерывание по переднему фронту
EIMSK |= _BV(INT0); // Разрешить внешнее прерывание INT0
Serial.begin(57600);
interrupts(); // Разрешить прерывания
}
// Обработчик прерывания INT0_vect
ISR(INT0_vect)
{
bInt0 = true;
}
void loop()
{
if (bInt0) {
bInt0 = false;
Serial.println("Button pressed.");
}
delay(100);
}