019. Arduino 아두이노 - push button switch 푸쉬 버튼 스위치 이용하기
크기만 다를뿐 같은 버튼 스위치입니다
우측은 중간이랑 같은 버튼인데
캡을 씌운거구요
게임기 키패드가 생각나네요
스위치를 누르면 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 도 있으니 걱정안해도 됩니다