본문 바로가기

메이커 Maker

미세먼지 모니터 제작 2 - 버튼과 인터럽트

반응형

미세먼지 모니터 제작 2 - 버튼과 인터럽트

 

제목은 쉽지만 약간은 이해하기 어렵고 중요한 부분이다. 인터럽트에 대해서는 다른 포스팅에서 설명하기로 하고 우선 아두이노 개발환경을 구성하는 방법을 알아야 한다. 다음 링크를 참고하여 아두이노 개발환경을 이해한다. 간단히 설명한다. Arduino IDE – 설정 및 시작을 위한 완전한 가이드 

 

 

미세먼지 측정기 실습에서 다룰 강의 전체 내용은 아래와 같다.

 

미세먼지 모니터 제작 1 - 미세먼지 측정기 개요

미세먼지 모니터 제작 2 - 버튼과 인터럽트

미세먼지 모니터 제작 3 - 온도 습도 센서

미세먼지 모니터 제작 4 - 미세먼지 센서

미세먼지 모니터 제작 5 - OLED

미세먼지 모니터 제작 6 - 아두이노 나노 보드를 Nano 33 IoT 보드로 교체

 

버튼 기능을 활용하기 위해 인터럽트 방식으로 버튼 기능을 테스트 한다. 최대한 간단하게 아두이노 IDE에서 모두 해결하기로 한다. 쉽게 해도 된다. 꼭 어렵게 배우란 법은 없다. 

 

스위치 핀은 우노 보드의 2번 핀에 연결되어 있다. 아두이노 우노의 경우 인터럽트로 사용 가능한 핀은 2번과 3번 핀이다. 

 

아래 회로도에 버튼 출력 핀은 2번 핀에 연결하였다. 바운싱 문제는 아두이노 나노에서는 소프트웨어적으로 처리하여도 이상없이 작동하였지만 Nano 33 IoT 에서는 바운싱 문제로 인터럽트가 작동하지 않거나 아예 보드가 정지하는 현상이 일어나서 아예 하드웨어로 보완하였다.

 

버튼 인터럽트를 받는 2번핀 연결 회로도

 

아래는 잘 동작하는 소스코드를 나타낸다. 2번 핀으로 입력을 받는다. 디바운스 타임은 200msec 로 주었는데 회로를 보완하고 나면 하드웨어적으로 처리가 되기 때문에 따로 바운싱을 처리해 주는 코드는 필요가 없을 것이다.

 

int swPin = 2;
int currentmode =1;
#define debounceTime 200 // <<- Set debounce Time (unit ms) 

void setup() {
   Serial.begin(9600);
   pinMode(swPin, INPUT_PULLUP);
   attachInterrupt(0, swInterrupt, FALLING);
}

void loop()
{
    //mode lection process
    if(currentmode == 1)
    {
        Serial.println("Mode 1");
    }
        
    if(currentmode == 2)
    {
        Serial.println("Mode 2");
    }
        
    if(currentmode == 3)
    {
        Serial.println("Mode 3");
    }

    Serial.println(currentmode);
    delay(100);
}

void swInterrupt() 
{
    static unsigned long lastTime = 0;
    unsigned long now = millis();
    if((now-lastTime) > debounceTime)
    {
        Serial.println("interrupt");
        currentmode++;
        if(currentmode == 4) currentmode = 1;
    }
    lastTime = now;
} 

 

위 소스를 아두이노 나노 보드에 업로딩하여 결과를 씨리얼 코니터로 확인하면 아래와 같다. 버튼을 누를 때마다 Mode1 -> Mode2 -> Mode3 ->Mode1 으로 동작한다. 모드 변경은 OLED에 디스플레이 하는 데이터를 변경하기 위한 방법이다.

 

20:32:11.894 -> 1
20:32:11.996 -> Mode 1
20:32:11.996 -> 1
20:32:12.098 -> Mode 1
20:32:12.098 -> 1
20:32:12.200 -> Mode 1
20:32:12.200 -> 1
20:32:12.302 -> interrupt
20:32:12.302 -> Mode 2
20:32:12.302 -> 2
20:32:12.404 -> Mode 2
20:32:12.404 -> 2
20:32:12.506 -> interrupt
20:32:12.506 -> Mode 3
20:32:12.506 -> 3
20:32:12.608 -> Mode 3
20:32:12.608 -> 3
20:32:12.710 -> Mode 3
20:32:12.710 -> 3
20:32:12.812 -> Mode 3
20:32:12.812 -> 3
20:32:12.914 -> Mode 3

 

 

미세먼지 측정기 동작모습

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩