크기만 다를뿐 같은 버튼 스위치입니다
우측은 중간이랑 같은 버튼인데
캡을 씌운거구요
게임기 키패드가 생각나네요
스위치를 누르면 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 도 있으니 걱정안해도 됩니다
021. Arduino 아두이노 - Laser Module 레이저 레이져 모듈 (1) | 2017.11.12 |
---|---|
020. Arduino 아두이노 - microphone sensor module 마이크 센서 모듈 (0) | 2017.08.04 |
018. Arduino 아두이노 - relay module control 릴레이 모듈 제어 (2) | 2016.09.08 |
017. Arduino 아두이노 - Bluetooth LE 모듈 AT 커맨드 사용해보기 (0) | 2016.08.26 |
016. Arduino 아두이노 - Bluetooth 2.0 모듈 AT 커맨드 사용해보기 (282) | 2016.08.24 |
댓글 영역