/*
* 키입력 인터럽트 Update 2019.08.30 by hack4ork
*/
#define BUTTON_PIN1 2
const int buttonPin1 = 2; // 인터럽트 0
const int buttonPin2 = 3; // 인터럽트 1
const int buttonPin3 = 4;
volatile long preTime = 0;
volatile long curTime = 0;
const int deBounce = 200;
void setup()
{
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(buttonPin1), buttonInterrupt1, FALLING);
attachInterrupt(digitalPinToInterrupt(buttonPin2), buttonlnterrupt2, FALLING);
}
void loop() {
int val = digitalRead(buttonPin3);
if (val ==1){
Serial.println("1번 버튼 누름");
}
}
void buttonInterrupt1() {
curTime = millis();
if(curTime - preTime >= deBounce) {
uint8_t oldSREG = SREG;
cli();
Serial.println("2번버튼 누름");
preTime = curTime;
SREG = oldSREG;
}
}
void buttonlnterrupt2() {
Serial.println("3번버튼 누름");
}
/*
* 키입력 인터럽트 Update 2019.08.30 by hack4ork
* 풀다운 폴링
*/
#define BUTTON_PIN1 2
const int buttonPin1 = 2; // 인터럽트 0
const int buttonPin2 = 3; // 인터럽트 1
const int buttonPin3 = 4;
volatile long preTime = 0;
volatile long curTime = 0;
const int deBounce = 200;
int buttonState;
void setup()
{
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(buttonPin1), buttonInterrupt1, FALLING);
attachInterrupt(digitalPinToInterrupt(buttonPin2), buttonlnterrupt2, FALLING);
}
void loop() {
// put your main code here, to run repeatedly:
int reading = digitalRead(buttonPin3); // 폴링 방식 //클럭주파수 때문에 쫙 떨어지면서 뜬다.
// if the button state has changed:
if (reading != buttonState) { // buttonState의 값은 전역변수 0 => reading이 1일 때,
buttonState = reading; // buttonState 값을 0으로 바꿔라
// only toggle the LED if the new button state is HIGH
if (buttonState == 1) { // if 버퍼 -> 시간차 조정
Serial.println("1번 누름");
}
}
}
void buttonInterrupt1() {
curTime = millis();
if(curTime - preTime >= deBounce) {
uint8_t oldSREG = SREG;
cli();
Serial.println("2번버튼 누름");
preTime = curTime;
SREG = oldSREG;
}
}
void buttonlnterrupt2() {
curTime = millis();
if(curTime - preTime >= deBounce) {
uint8_t oldSREG = SREG;
cli();
Serial.println("3번버튼 누름");
preTime = curTime;
SREG = oldSREG;
}
}
'임베디드 > Arduino' 카테고리의 다른 글
타이머 인터럽트 Timer interrupt (0) | 2020.09.03 |
---|---|
키입력인터럽트 + LED + buzzer (0) | 2020.09.02 |
button Interrupt : ISR (인터럽트 핸들러) // mode : Falling, Rising, Change, Low (0) | 2020.09.01 |
인터럽트 (0) | 2020.09.01 |
button_led (0) | 2020.09.01 |