์ค๋์ KeyPad์ ๋ด๋ถ ๋์์ ์ดํด๋ณด๋๋ก ํ์ฃ . ๊ฐ์ฅ ์ ์๋ ค์ง๊ฒ ์ค์์น๋ฒํด์ผ๋ก ํํํ ์์ ์ ๋๋ค. ์๋ ์ค์์น ๋ฒํด์ ์ฐ๊ฒฐํ ํ๋ก๋๋ฅผ ์ ์ดํด๋ณด์ธ์. ์ด ์๋ฆฌ๋ฅผ ์ดํดํ์๋ฉด ๋์ค์ 3x3x3 LED CUBE๋ฅผ ๋ง๋๋๋ฐ ํ์ฉ๋๋ ์๋ฆฌ๋๊น ๊ผญ ์ดํดํด ์ฃผ์ธ์.
์ค์์น ๋ฒํด์ ๊ธฐ๋ณธ ๋๋ ์๋ ์ ๋ฅ๊ฐ ํ๋ฅด์์์. ์ด๊ฑธ 16๊ฐ์ ๋ฒํด์ ์ฐ๊ฒฐํ ๊ฒ์ด์ฃ . ๊ทธ๋ฆฌ๊ณ ๊ฐ ์ค์์น ๋ฒํด์ ์ ๋ ฅ์ ๋ด๋ถํ์ ์ ํญ์ ์ด์ฉํด์ ์ค์์น ๋๋ฅธ ์์น์ ์ํ๊ฐ์ ํตํด์ ๋ช๋ฒ์งธ ์ค์์น๊ฐ ๋๋ฌ์ก๋์ง ์๊ฒ ๋ฉ๋๋ค.
์ฐ์ ์ 4x4 ์ค์์น ๋ฒํด์ ๋ฐฐ์นํ๋ค์ ์ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ํํ๋ก ์ฐ๊ฒฐํ์ธ์. ๊ทธ๋ฆฌ๊ณ ์ค์์น ๋ฒํด์ ๋ด๋ถํ์ ์ ํญ์ ์ด์ฉํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ฌ๊ธฐ์, ๊ฐ๋ก ๋ผ์ธ์ 1์ธต์ผ๋ก ์๊ฐํ์๊ณ ์ธ๋ก๋ ๊ฐ ํธ์ค์ด๋ผ๊ณ ํ์ ๋ ๊ทธ๋ฌ๋ฉด 1์ธต 2ํธ์ค์ ๋๋ ์ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณด์ธ์.
์ด๋ค ๊ฒฝ์ฐ์ 1์ธต 2ํธ์ค์ด ๋๋ฌ์ก๋์ง ์ ์ ์์๊น์.
ํ๋๋ง ์ชผ๊ฐ์ ๋ค์ ์ดํด๋ณด์ธ์. 1์ธต 2ํธ์ค์ 6๋ฒํ์ด Gnd์ด๊ณ 4๋ฒํ์ LOW ์ํ์ผ๋ ์ ๋๋ค. ์ข ํ๊ฐ๋ฆฌ ์ ์๋๋ฐ ๋ด๋ถํ์ ์ ํญ ๋ชจ๋์ผ๋๋ ์ด๊ธฐ ์ค์์น ๊ฐ์ HIGH(1)์ธ ์ํ๊ฐ ๋๊ณ ์ค์์น๋ฅผ ๋๋ฅด๋ฉด ์ ๋ฅ๊ฐ ํ๋ฌ ๊ฐ๊ธฐ ๋๋ฌธ์ ํด๋น 4๋ฒํ์ LOW(0) ์ํ๊ฐ ๋ฉ๋๋ค. ๊ฒฐ๋ก ์ 1์ธต 2ํธ์ค ์ค์์น๋ฅผ ๋๋ฅด๋ฉด 6๋ฒํ์ด Gnd์ผ๋ 4๋ฒํ์ ์ ๋ ฅํ์ด LOW์ผ๋์ ๋๋ค.
์ด๊ฑธ ์ด๋ป๊ฒ ์ฐพ์๋ด๋๋ ํ๋ฉด
for(int y=0;y<rows;y++){
digitalWrite(rowPins[y], LOW);
for(int x=0;x<cols;x++){
if(!digitalRead(colPins[x]))val = keys[y][x];
}
digitalWrite(rowPins[y], HIGH);
}
2์ค for๋ฌธ์ ์ด์ฉํด์ ๊ฐ ์ธต๋ณ์ ๋ํ ํด๋น ํธ๋ณ๋ก ์์ฐจ์ ์ผ๋ก ์ฒดํฌํ๋ฉด ๋ฉ๋๋ค. ์ด๊ธฐ๋ก ๋ชจ๋ ์ธต์ HIGH ์ํ๋ก ์ธํ
ํ ํ์
1์ธต(LOW)๋ถํฐ์ 1ํธ์ค, 2ํธ์ค, 3ํธ์ค, 4ํธ์ค ์ฒดํฌํด์ ์ค์์น๊ฐ ๋๋ฌ์ก๋์ง ํ์ธํ ๋ค์ 1์ธต์ HIGH๋ก ๋ค์ ์ ๊ถ์ง๋๋ค.
2์ธต(LOW)๋ถํฐ์ 1ํธ์ค, 2ํธ์ค, 3ํธ์ค, 4ํธ์ค ์ฒดํฌํด์ ์ค์์น๊ฐ ๋๋ฌ์ก๋์ง ํ์ธํ ๋ค์ 2์ธต์ HIGH๋ก ๋ค์ ์ ๊ถ์ง๋๋ค.
...
์ด๋ ๊ฒ ์ด๊ธฐ๊ฐ์ผ๋ก ๊ฐ ์ธต์ HIGH๋ก ํด๋์ผ๋ฉด LOW๋ก ๋ ์ธต์ ๊ฐ ํธ์ค๋ง ์ฒดํฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ค๋ช ์ด ์ด๋ ค์ธ ์ ์๋๋ฐ ์ฝ๊ฒ ๋งํด์ HIGH์ ๊ฐ ์ธต์ด ๋ซํ์ง ์ํ์ด๊ณ LOW๋๋ฉด LOW๋ ์ธต์ด ๊ฐ๋ฐฉ๋๊ฒ ๋ฉ๋๋ค.
๋ง์ฝ์ ๊ฐ ์ธต์ด ์ ๋ถ๋ค LOW๋ผ๊ณ ์๊ฐํด๋ณด์ธ์. ๊ฐ๋ น 2์ธต 1ํธ์ค์ ๋๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด 5๋ฒ ํ์ digitalRead(5)ํ์ ๊ฐ์ LOW๊ฐ ๋ฉ๋๋ค. ํ์ง๋ง ๋๋ฅธ ์์น๊ฐ 1์ธต 1ํธ์ค์ธ์ง 2์ธต 1ํธ์ค์ธ์ง ์ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ง์ฝ for๋ฌธ์ด 1์ธต๋ถํฐ ์ฒดํฌํ๋ค๋ฉด 1์ธต 1ํธ์ค์์ ์ถ๋ ฅ๊ฐ์ด LOW๋๊ธฐ ๋๋ฌธ์ 1์ธต 1ํธ์ค๋ก ์ธ์ํ๊ฒ ๋๊ณ ๋ง์ฝ์ for๋ฌธ์ด 4์ธต๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ฒดํฌํ๋ค๋ฉด 4์ธต 1ํธ์ค์์ LOW๊ฐ ๋๊ธฐ ๋๋ฌธ์ 4์ธต 1ํธ์ค๋ก ์ธ์ํ๊ฒ ๋ฉ๋๋ค.
๊ฐ ์ธต์ ์ฒดํฌํ ๋๋ ์ฒดํฌํ๋ ์ธต๋ง LOW๊ฐ ๋๊ณ ๋๋จธ์ง ์ธต์ HIGH๋ก ์ ๊ถ๋์ผ ๋ฉ๋๋ค.
์ดํด๊ฐ ์๋์๋ฉด์ ๊ทธ๋ฅ HIGH์ผ๋ ์ ๊ฒจ์ง๊ณ LOW์ผ๋ ์ด๋ฆฐ๋ค๊ณ ์๊ฐํ์๋ฉด ๋๊ฒ ์ต๋๋ค. ์ด๊ฒ ์ค์์น์ ์ ๋ฅ์ ํ๋ฆ์ ์ดํดํ๋ฉด ์ฝ๊ฒ ์ดํด๋๋๋ฐ ์ฝ๊ฐ ์ค๋ช ์ด ์ด๋ ต๋ค์.
๋ง์ฝ 1์ธต(6๋ฒ)์ด HIGH์ผ๋ 1์ธต 1ํธ์ค์ ๋๋ฅด๋ ์๋๋ฅด๋ 1์ธต 1ํธ์ค digitalRead(5)์ ์ถ๋ ฅ๊ฐ์ ๋ฌด์กฐ๊ฑด HIGH์
๋๋ค. ์ค์์น๋ฅผ ๋๋ฅธ๋ค๊ณ LOW๋์ง ์์ต๋๋ค. 1์ธต(6๋ฒ) ํ์ด LOW์ผ๋ ๋๋ฅธ ํธ์ค์ digitalRead(ํธ์ค)์ ์ถ๋ ฅ๊ฐ์ด ๊ทธ์ ์์ LOW ๋ฉ๋๋ค.
ํ์
์ ํญ์ค์์น๋ฒํด์ ๊ธฐ๋ณธ ๋์์ ์ดํดํ์
์ผ ์ด ์๋ฆฌ๋ฅผ ์ดํดํ์ค ์ ์์ต๋๋ค.
์ ์ฐ๊ฒฐ๋ง ์ฃผ์ํ์๋ฉด ๊ทธ๋ฝ๊ฒ ์ด๋ ต์ง ์์ต๋๋ค.
๊ทธ์ธ ํจ์๋ค์ ์ฐธ๊ณ ์ถ์ฒ์ ๊ฐ์ ์ ํ๋ฒ ์ฝ์ด๋ณด์๊ธธ ๋ฐ๋์.
#include
const byte rows = 4; //four rows
const byte cols = 4; //four columns
byte rowPins[rows] = {9,8,7,6};
byte colPins[cols] = {5,4,3,2};
char keys[rows][cols] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();
if (key != NO_KEY){ //ํค๊ฐ์ด ๋๋ ๋์ง ํ์ธ๋ฌธ
Serial.println(key);
}
}
์ค์์น๋ฒํด Keypad์์ ์ค๋ช ํ ๋ฐฉ์์ผ๋ก ์ฝ๋ฉ์ ํ๋ฉด ์ ๋ธ๋ฌ๊ทธ์ ์๋ ์ฝ๋ฉ์ธ๋ฐ ๊ทธ๋๋ก ์ธ์ฉํฉ๋๋ค. ๋ก์ง์ ์์ธํ ์ดํด๋ณด์๋ฉด ์ดํด๊ฐ ๋์ค๊บผ์์.
const byte rows = 4; //4 rows
const byte cols = 4; //4 columns
byte rowPins[rows] = {9,8,7,6};
byte colPins[cols] = {5,4,3,2};
char keys[rows][cols] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
void setup(){
Serial.begin(9600);
for(int i=0;i<rows;i++){
pinMode(rowPins[i], OUTPUT);
digitalWrite(rowPins[i], HIGH); // ๊ฐ์ธต ์ด๊ธฐํ๋ก ์ ๊ธ
}
for(int i=0;i<cols;i++){
pinMode(colPins[i], INPUT_PULLUP); //๊ฐํธ์ค ๋ด๋ถํ์
์ ํญ๋ชจ๋๋ก ์ฝ๊ธฐ
}
}
void loop(){
char val = '\0';
for(int y=0;y<rows;y++){
digitalWrite(rowPins[y], LOW); //ํด๋น์ธต ๊ฐ๋ฐฉ
for(int x=0;x<cols;x++){
if(!digitalRead(colPins[x]))val = keys[y][x];
}
digitalWrite(rowPins[y], HIGH); //ํด๋น์ธต ์ ๊ธ
}
if(val!='\0'){
Serial.println(val);
delay(300);
}
}
์ ๋ฐฐ์น๊ฐ ์ ์ผ ๊ท์ฐฎ์๋ค์.
์ค๋์ Keypad๋ฅผ ์ค์์น๋ฒํด์ผ๋ก ๋์ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ์ง์ ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ๋์์ ์ ์ด ํ๋ค์.
์ค์์น๋ฒํด์์ ์ธต๊ณผ ํธ์ค์ ๊ดํ ์ ๋ฅ ํ๋ฆ์ ์ฒดํฌ์ ๋ํด์ ๊ผญ ์ดํดํด ์ฃผ์ธ์. ์๋๋ฉด ๋์ค์ ์์ฉํธ์์ ๊ฑฐ๋ก ํ 3x3x3 LED CUBE์ ์๋ฆฌ๊ฐ ๊ฐ์ต๋๋ค.
์๋ LED ์ ์ด๋ฅผ ํ๋ค์ ์์ฉํธ์ผ๋ก ๋ฏธ๋ฆฌ ๋ค๋ฃจ์ด์ผ ํ๋๋ฐ ์์ฉํธ์ด๊ณ ์ฝ๋ฉ์ชฝ์ด์ฌ์ ๋ค์ ์ด๋ ค์ธ ์ ์์ด์ ์ค์์น๋ฒํด์์ ๋จผ์ ๊ทธ ์๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค์.
๊ผญ ์ธต๊ณผ ํธ์ค์ ๊ด๊ณ๋ฅผ ์ดํดํด ์ฃผ์ธ์. ์
๋ ฅ์ ์ธต๊ณผ ํธ์ค๋ก ๋ฐ์์ง๋ง ๋ฐ๋๋ก ์ถ๋ ฅ์ ์ธต๊ณผ ํธ์ค๋ก ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ๋ฐ๋ก 3x3x3 LED CUBE์ ๊ธฐ๋ณธ ์๋ฆฌ์
๋๋ค.
์ด ์๋ฆฌ๋ฅผ ๊นจ์ฐ์น๋ฉด ์ง์ง ํ๋ คํ๊ณ ์ฌ๋ฐ๋ ์ํ์ ๋ง๋ค ์ ์์ผ๋๊น ๊ผญ ์ดํดํด ์ฃผ์ธ์.
๊ถ๊ธํ์๋ฉด ๊ตฌ๊ธ๊ฒ์์ผ๋ก 3x3x3 LED CUBE๋ฅผ ์ณ๋ณด์ธ์ ๋ง๋ค๊ณ ์ถ์ ์ถฉ๋์ด ๋๊ปด์ง๊บผ์์.