BASIC4MCU | 질문게시판 | 질문드립니다
페이지 정보
작성자 Ssll 작성일2022-12-05 22:28 조회254회 댓글1건본문
코딩회로를 짜는데 조언을 구하면서 하고 있는데 제일 근접하게한 코딩이 밑의 회로입니다
#define BUTTON_PIN 2
#define LED_PIN 13
void ledLighting(void); // 함수원형선언
int ledOnOff = 0;
int ledTiming = 1000;
int buttonState;
int lastButtonState = LOW;
void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600);
}
void loop() {
buttonState = !digitalRead(BUTTON_PIN);
if (lastButtonState==0 && buttonState==1) {
ledTiming = ledTiming/2;
if (ledTiming<200) ledTiming=1000;
}
ledLighting();
lastButtonState = buttonState;
delay(50);
}
// 모드에 따라서 LED 켜는 함수
void ledLighting()
{
if (millis()%(2*ledTiming)<ledTiming && ledOnOff==1) {
digitalWrite(LED_PIN, LOW); ledOnOff=0;
}
if (millis()%(2*ledTiming)>=ledTiming && ledOnOff==0) {
digitalWrite(LED_PIN, HIGH); ledOnOff=1;
}
}
그런데 저는 원하는게 버튼을 1번누르면 1초에서 0.5초로 바뀌고 다시 1초로 바뀌는 동작을 하고 싶은데 이 동작에서는 0.25초가 계속 출력이 되고 있는데 이거 왜이러는지 좀 간단하게 알려주실수 있나요?
하고 싶은동작은 [인터럽트를 활용하여 스위치를 누를 때 마다 점멸 간격이 변한다. (1초 -> 0.5초) 반복] 입니다
댓글 1
조회수 254master님의 댓글
master 작성일
#define BTN_PIN 2
#define LED_PIN 13
//
int ledTiming=500;
bool ledOnOff=0,BTNstate,lastBTNstate=0;
//
void setup(){
pinMode(BTN_PIN,INPUT_PULLUP);
pinMode(LED_PIN,OUTPUT);
Serial.begin(9600);
}
//
void loop(){
BTNstate=!digitalRead(BTN_PIN);
if(lastBTNstate==1 && BTNstate==0){
if(ledTiming!=250)ledTiming=250;
else ledTiming=500;
}
lastBTNstate=BTNstate;
//
ledOnOff=!ledOnOff;
digitalWrite(LED_PIN,ledOnOff);
delay(ledTiming);
}
무슨 인터럽트를 활용 한다는 말일까요?
버튼입력에 사용되는 외부인터럽트?
아니면 타이머 인터럽트?
웹검색으로 해당 인터럽트를 먼저 공부해서 적용해보세요