상세 컨텐츠

본문 제목

019. Arduino 아두이노 - push button switch 푸쉬 버튼 스위치 이용하기

embedded/arduino

by ZelKun 2016. 10. 28. 09:30

본문

반응형

   

크기만 다를뿐 같은 버튼 스위치입니다

우측은 중간이랑 같은 버튼인데

캡을 씌운거구요

게임기 키패드가 생각나네요

   

스위치를 누르면 on

누르지 않으면 off

간단합니다

   

코드 없이 바로 사용할 수 있죠

사진 : Fritzing

   

LED 중간에 버튼을 추가한 모습이에요

아두이노는 그냥 전원(3.3v)만 제공하고

하는일은 없습니다

   

건전지를 써도 된다는 이야기죠

   

   

대신 버튼을 눌러야만 불이 들어옵니다

   

사진 : Fritzing

   

   

전원연결은 보통 대각선으로 많이 하는데요

검은선, 빨간선으로 표시한부분끼리는 연결 되있습니다

버튼을 누르면 검은 & 빨강 이 연결된다고 보시면 되고요

   

설명이 좀 어렵나요??

   

일반적으로 버튼 스위치는

접지 & 비 접지 방식으로

출처 : http://terms.naver.com/entry.nhn?docId=710922&cid=42318&categoryId=42318

   

스위치에 대한 간단한 설명이에요

   

눌러야 전원이 연결되는데

스프링에 의해 다시 떨어지는 구조네요

   

전원만 줄거면 건전지로 하면되니

회로도를 바꿔봅니다

사진 : Fritzing

   

그리고 누르면 켜지도록 소스를 업로드합니다

#define ledPin 10

#define buttonPin 4

   

void setup() {

    pinMode(ledPin , OUTPUT);

    pinMode(buttonPin , INPUT);

}

   

void loop(){

    int nBtn4 = digitalRead(buttonPin );

    if (nBtn4 == LOW) {

        digitalWrite(ledPin, LOW);

    } else {

        digitalWrite(ledPin, HIGH);

    }

}

역시 버튼을 누르면 LED가 켜집니다

   

근데 언제까지 누르고있을 수는 없으니

누를때마다 LED를 on/off 하도록 수정합니다

#define ledPin 10

#define buttonPin 4

   

int sw= -1; // ON / OFF 변수처리

void setup() {

    pinMode(ledPin , OUTPUT);

    pinMode(buttonPin , INPUT);

}

   

void loop() {

    if (digitalRead(buttonPin ) == HIGH) //버튼 처리

        sw*= -1; // ON / OFF 처리

   

    if (sw > LOW){ //LED ON

        digitalWrite(ledPin, HIGH); //HIGH == 1

    } else { //LED OFF

        digitalWrite(ledPin, LOW); //LOW == 0

    }

}

이 코드에서 핵심은

sw *= -1;

이 부분입니다

풀어쓰자면 sw = sw * -1

sw값이 1 (on), -1 (off)

되기 때문입니다

   

쉽죠?

   

응용하면 3색LED의 색을 바꿔주는 스위치로도 가능합니다

3색 LED- http://zelkun.tistory.com/45

   

다만 sw를 이용하면 2가지 값만 나오니

카운트를 써서 해야편해요

   

buttonCnt % 4; 의 나머지 값 구하고

이를 이용해서 swith에서 비교하면 됩니다

뭐 결과적으로는

0 - OFF

1 - R

2 - G

3 - B

이렇게 되겠네요 꺼지기도 해야하니깐요

   

#define ledRPin 8

#define ledGPin 9

#define ledBPin 10

#define buttonPin 4

   

int buttonCnt = 0;

void setup() {

    pinMode(ledRPin, OUTPUT);

    pinMode(ledGPin, OUTPUT);

    pinMode(ledBPin, OUTPUT);

    pinMode(buttonPin , INPUT);

}

   

void loop() {

    if (digitalRead(buttonPin ) == HIGH) //버튼 처리

        buttonCnt++;

   

    switch(buttonCnt % 4){

        case 0:                               //LED OFF

            digitalWrite(ledRPin, LOW);

            digitalWrite(ledGPin, LOW);

            digitalWrite(ledBPin, LOW);

            break;

        case 1:

            digitalWrite(ledRPin, HIGH); // LED Red

            digitalWrite(ledGPin, LOW);

            digitalWrite(ledBPin, LOW);

            break;

        case 2:

            digitalWrite(ledRPin, LOW);

            digitalWrite(ledGPin, HIGH); //LED Green

            digitalWrite(ledBPin, LOW);

            break;

        case 3:

            digitalWrite(ledRPin, LOW);

            digitalWrite(ledGPin, LOW);

            digitalWrite(ledBPin, HIGH); //LED Blue

            break;

    }

}

소스가 길어보이지만 쉬운거에요

배열변수랑 함수로 처리하려다가 참았습니다..

   

버튼이 눌리면 buttonCnt 변수가 count가 하나씩올라가고

나머지가 0 ~ 3 일경우에 대해 처리했습니다

LED를 안끄고 사용할거면 swich%3으로 해도 됩니다

물론 case 부분을 수정해야 됩니다 (0~2)

   

버튼 몇개정도는 그냥 써도 되지만

버튼 개수가 많아지면 논리적인 부분이 들어가는게

좋습니다 논리회로라니..

   

3x3 매트릭스 버튼스위치 부분에서

다루게 될것 같네요

6개의 핀으로 9개의 버튼을 이용합니다

   

근데 library 도 있으니 걱정안해도 됩니다

반응형

관련글 더보기

댓글 영역