일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- C++
- 모바일 무료 게임 순위
- 파이썬을 중심으로
- 프로그래밍 열풍
- Python
- 앱인벤터
- Operator
- 사용자 출력
- 관계 연산자
- 앱 인벤터 예시
- output
- cmath
- 파이썬
- user function
- User Input Output
- Logic Operator
- 앱 인벤터
- C++ Basic
- input
- 사용자 입력
- 연산자
- Python Basic
- 앱 스토어 4월
- Conditional operator
- using namespace std
- ISSACMin
- help 함수
- C++ 연습예제
- 비트 논리 연산자
- 앱 인벤터 2
- Today
- Total
ISSAC.Min
[Arduino] 아두이노 푸시 버튼, 매트릭스 모듈, 이진수 LED 예제 본문
푸시 버튼이란?
아두이노에서 대표적인 입력장치로는 컨트롤러 모듈, 푸시버튼 등이 있습니다.
푸시버튼은 버튼을 누르는 동안 HIGH 값을 가지고 땔 때 LOW 값을 갖습니다. 또한 일반적으로 푸시버튼은 4개의 단자를 가지고 있으며 하나의 단자가 끊어지더라도 다른 방향의 단자를 통하여 컨트롤 할 수 있습니다.
[그림 3]에서 확인 할 수 있듯이 1번 3번, 2번 4번이 연결되어 있으므로 만약 4번이 단선되더라도 2번 라인을 통해서 연결이 가능하다.
매트릭스 모듈이란?
아두이노에서의 대표적인 입력장치인 푸시버튼은 단일 입력을 받고 있지만 여러가지 입력을 간단한 코드로 제어할 수 있는 매트릭스 모듈도 있다. 하지만 사용방법 및 역할 등에 다른 점은 존재하지 않는다.
일반 단일 푸시버튼과 같이 입력을 위한 Digital Pin이 꼭 하나씩 존재했지만 매트릭스형 모듈 같은 경우 더 적은 핀으로 여러가지 입력을 받을 수 있다. 그럴수 있는 이유는 매트릭스의 구조 때문인데 [그림 4]의 4 by 4 매트릭스 모듈을 예로 들면 아래와 같이 이해할 수 있다.
행/열 | 1 | 2 | 3 | 4 |
a | a1 | a2 | a3 | a4 |
b | b1 | b2 | b3 | b4 |
c | c1 | c2 | c3 | c4 |
d | d1 | d2 | d3 | d4 |
위의 표에서 행 a, b, c, d / 열 1, 2, 3, 4는 입력을 받는 핀이라고 생각하면 된다. 그렇게 된다면 행과 열의 데이터 정보에 따라 총 16개의 서로 다른 입력 데이터가 가능하다. 그러므로 단지 핀 8개로 16개의 입력을 받을 수 있는 것이다.
[예제 1] 푸시버튼을 이용하여 LED를 켜보자!!
푸시버튼의 첫 예제로서 간단히 푸시버튼을 이용하여 LED를 켜보도록하자. 준비물은 다음과 같다.
준비물
부품명 | 부품사진 | 개수 |
아두이노 우노 보드 | 1 | |
푸시 버튼 | 1 | |
LED(발광 다이오드) | 1 | |
10k 옴 저항 | 1 | |
점퍼선(수 - 수) | 6 |
아두이노 구성
아두이노 코딩
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
int state = 0;
void setup() {
pinMode(4, OUTPUT);
pinMode(3, INPUT);
}
void loop() {
int i = digitalRead(3);
if(i == 1){
if(state == 0){
state = 1;
}
else if(state == 1){
state = 0;
}
}
if(state == 0){
digitalWrite(4, LOW);
}
else if(state == 1){
digitalWrite(4, HIGH);
}
}
|
cs |
위의 코드는 버튼을 누르고 있을때 LED가 켜지는 것이 아닌 한 번 누르면 켜지고 한 번 더 누르면 꺼지는 기능을 한다.
1번줄 state는 LED를 켜고 끄기 위한 상태 변수이다.
state = 0일땐 꺼지고 state = 1일땐 켜진다.
아두이노 업로드
[예제 2] 매트릭스 모듈을 이용하여 LED를 켜보자!!
매트릭스 모듈은 키패드 모듈이라고도 부르며 다양한 싸이즈와 형태를 가지고 있다. 오늘 사용할 매트릭스 모듈은 4 x 4 매트릭스 모듈이며 제일 많이 사용하는 종류이다.
이번에 사용할 매트릭스 모듈은 그전에 사용했던 푸시버튼이나 LED 등과 다르게 Keypad 라이브러리가 필요한데 또 싸이트에 들어가서 다운받고 힘들게 찾아야하는 것이 아닌 Arduino IDE의 라이브러리 관리자를 통해서 다운받을 수 있다.
툴 > 라이브러리 관리... > 검색창 keypad 검색 > Keypad(by Mark Stanley, Alexander Breving)을 설치
설치가 완료되었다면 코딩하기 전 구성을 보도록하겠다. 그냥 LED를 켜면 재미없고 사실 매트릭스 모듈의 핀이 8개이기 때문에 우노보드의 디지털 핀을 사용하기엔 16개의 LED를 모두 사용하기엔 좀 복잡해진다. 그러므로 이진법수를 나타낼수있도록 4개의 LED를 사용해서 16개의 수를 나타내보자.
준비물은 아래쪽에!
준비물
부품명 | 부품사진 | 개수 |
아두이노 우노 보드 | 1 | |
발광 다이오드 | 4 | |
4 x 4 매트릭스 모듈 | ||
점퍼선(수 - 수) | 8 | |
점퍼선(암 - 수) | 8 |
아두이노 구성
추가적으로 말할게 있다면 매트릭스 제품마다 C1 ~ C4, R1 ~ R4의 Pin의 배열이 다르다. 지금 사용하고 있는 모듈은 에듀이노에서 구입한 제품이며 아래에 링크를 담아놓겠다. 물론 구입할때 설명서에 핀에 대한 정보가 적혀있으니 꼭 참고하고 사용하길 바란다.
eduino.kr/product/detail.html?product_no=123&cate_no=55&display_group=1
핀의 맨 위부터 R1 R2 R3 R4 C1 C2 C3 C4 이다. 제품마다 다르니 꼭 확인하고 사용하길 바란다.
아두이노 코딩 및 업로드
Switch 문을 사용하면 더 깔끔하겠다. 하지만 난 귀찮으니 하지 않는다.
"CTRL + C, CTRL + V는 최대의 미덕"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#include <Keypad.h>
const byte row = 4; // 행(row) 개수
const byte column = 4; // 열(columns) 개수
char keys[row][column] = { // 행, 열 문자열을 지정합니다.
{'4','8','C','G'},
{'3','7','B','F'},
{'2','6','A','E'},
{'1','5','9','D'}
};
byte rowPins[row] = {9, 8, 7, 6}; // R1, R2, R3, R4 단자가 연결된 아두이노 핀 번호
byte colPins[column] = {5, 4, 3, 2}; // C1, C2, C3, C4 단자가 연결된 아두이노 핀 번호
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, row, column );
void setup() {
Serial.begin(9600);
pinMode(10, OUTPUT); // 1자리 수
pinMode(11, OUTPUT); // 2^1자리 수
pinMode(12, OUTPUT); // 2^2자리 수
pinMode(13, OUTPUT); // 2^3자리 수
}
void loop() {
char key = keypad.getKey();
if (key){
if (key == '1'){
Serial.println(key);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(100);
}else if(key == '2'){
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(100);
}else if(key == '3'){
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
delay(100);
}else if(key == '4'){
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(100);
}else if(key == '5'){
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(100);
}else if(key == '6'){
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(100);
}else if(key == '7'){
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
delay(100);
}else if(key == '8'){
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(100);
}else if(key == '9'){
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(100);
}else if(key == 'A'){
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(100);
}else if(key == 'B'){
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
delay(100);
}else if(key == 'C'){
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(100);
}else if(key == 'D'){
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(100);
}else if(key == 'E'){
digitalWrite(10, LOW);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(100);
}else if(key == 'F'){
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
delay(100);
}else{
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
}
}
|
cs |
'STUDY > Arduino' 카테고리의 다른 글
[Arduino 문제발생] 업로드 에러, 포트 인식 (16) | 2020.11.25 |
---|---|
[Arduino] 아두이노 LED 켜기, 파도치기 예제 (1) | 2020.11.23 |
[Arduino] 아두이노 첫 걸음, 아두이노 설치 (0) | 2020.11.21 |