16개의 스위치가 행열로 배치되어 있음.
키패드를 편하게 사용하기 위래 라이브러리가 필요함.
tool -> manage library -> keypad 검색으로 라이브러리 설치함.

#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char myKeys[ROWS][COLS] ={
{'0', '1', '2', '3'},
{'4', '5', '6', '7'},
{'8', '9', 'A', 'B'},
{'C', 'D', 'E', 'F'}
};
byte rowPins[ROWS] = {5,4,3,2};
byte colPins[COLS] = {8,9,10,11};
Keypad customKeypad = Keypad(makeKeymap(myKeys), rowPins, colPins, ROWS, COLS);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
char customKey = customKeypad.getKey();
if(customKey){
Serial.println(customKey);
}
}


명세
- 스위치 1을 누르면 누를 때마다 RGB LED가 빨강 -> 노랑 -> 초록 -> 하늘 -> 파랑 -> 자주 순서로 변함
- 스위치 2를 누르면 RGB LED가 자주 -> 파랑 0> 하늘 -> 초록 -> 노랑 -> 빨강 순으로 변함
int ledR = 8;
int ledG = 9;
int ledB = 10;
int switch1 = 3;
int switch2 = 4;
int step = 0;
void setup() {
// put your setup code here, to run once:
pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(ledB, OUTPUT);
pinMode(switch1, INPUT);
pinMode(switch2, INPUT);
digitalWrite(ledR, HIGH);
digitalWrite(ledG, LOW);
digitalWrite(ledB, LOW);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if (digitalRead(switch1) == 1) {
step++;
Serial.println("switch1 누름");
}
if (digitalRead(switch2) == 1) {
step--;
Serial.println("switch2 누름");
}
if (step > 5) {
step = 0;
}
if (step < 0) {
step = 5;
}
Serial.println(step);
ledColor(step);
delay(200);
}
//정렬은 ctrl + t
void ledColor(int step) {
if (step == 0) { //빨강
digitalWrite(ledR, HIGH);
digitalWrite(ledG, LOW);
digitalWrite(ledB, LOW);
}
else if (step == 1) { //노랑
digitalWrite(ledR, HIGH);
digitalWrite(ledG, HIGH);
digitalWrite(ledB, LOW);
}
else if (step == 2) { //초록
digitalWrite(ledR, LOW);
digitalWrite(ledG, HIGH);
digitalWrite(ledB, LOW);
}
else if (step == 3) { //하늘
digitalWrite(ledR, LOW);
digitalWrite(ledG, HIGH);
digitalWrite(ledB, HIGH);
}
else if (step == 4) { //파랑
digitalWrite(ledR, LOW);
digitalWrite(ledG, LOW);
digitalWrite(ledB, HIGH);
}
else if(step == 5) { //step == 5 //자주
digitalWrite(ledR, HIGH);
digitalWrite(ledG, LOW);
digitalWrite(ledB, HIGH);
}
}



처음 코드 작성할 때 스위치 1, 2를 D1, D2에 저장했다.
이때 코드 업로딩이 멈추지 않는 문제가 발생했다.
참고 : https://blog.naver.com/dreve/221800796010
아두이노 0번과 1번 핀은 컴퓨터에서 코드를 업로드할때 사용하는 핀이라고 한다. 0, 1번은 피하는게 좋고, 어쩔 수 없을 때는 업로드 할 때만 핀을 빼줘야 한다.
딱 17page와 동일한 현상으로 발생했다. 택트 스위치에 저항 말고 전선으로 연결을 했더니 끊임없이 스위치를 누르고 있다고 인식되던가 안 누른다고 인식되는 일정하게 인식할 수 없었다.
page 17을 다시 정리하자면, 디지털 신호는 0(LOW, 0V) / 1(HIGH, 5V)로 이루어져야 하는데 어디에도 연결되어 있지 않은 것처럼 인식되어 신호 인식이 불가능한 현상을 플로팅이라고 한다.
이를 해결하기 위해 풀업, 풀다운 저항을 사용해야 한다.