7주차 금고 만들기

아두위키 : Arduwiki
ArduWiki (토론 | 기여)님의 2025년 1월 10일 (금) 20:53 판 (새 문서: === 1. 키패드 === 프레임없음|400x400픽셀 4 x 4 크기의 키패드 모듈을 사용해 봅시다. 금고에 비밀번호를 설정해두고 키패드를 이용해 비밀번호를 누르는 기능을 만들 예정입니다. ==== 1-1. 회로 ==== 프레임없음|859x859픽셀 ==== 1-2. 라이브러리 추가 ==== 먼저 아두이노 IDE 에서 키패드를 사용하기 위해 라이브러리를 설치합니다....)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1. 키패드

4 x 4 크기의 키패드 모듈을 사용해 봅시다. 금고에 비밀번호를 설정해두고 키패드를 이용해 비밀번호를 누르는 기능을 만들 예정입니다.

1-1. 회로

1-2. 라이브러리 추가

먼저 아두이노 IDE 에서 키패드를 사용하기 위해 라이브러리를 설치합니다.

[스케치] - [라이브러리 포함] - [라이브러리 관리] 에서 "keypad"을 검색합니다. [Keypad by Mark Stanley, Alexander Brevig]을 찾아 설치해주세요.

1-3. 키패드를 눌러 시리얼 모니터에 출력하기

키패드가 눌릴 때마다 시리얼 모니터에 눌린 버튼에 해당하는 문자를 출력해 봅시다.

//영상

#include <Keypad.h>    
char hexaKeys[4][4] = {  
  {'1', '2', '3', 'A'},  
  {'4', '5', '6', 'B'},  
  {'7', '8', '9', 'C'},  
  {'*', '0', '#', 'D'}};  
byte rowPins[4] = {9, 8, 7, 6};   
byte colPins[4] = {5, 4, 3, 2};   
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 4);   
char keyPressed; 
  
void setup(){  
  Serial.begin(9600);  
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    Serial.println(keyPressed);  
  }  
}

1-4. [실습] 특정 버튼이 눌렸을 때 LED 켜기

버튼 '*'이 눌리면 LED를 켜고, 버튼 '#'이 눌리면 LED를 끄는 코드를 작성해 봅시다.

#include <Keypad.h>    
char hexaKeys[4][4] = {  
  {'1', '2', '3', 'A'},  
  {'4', '5', '6', 'B'},  
  {'7', '8', '9', 'C'},  
  {'*', '0', '#', 'D'}};  
byte rowPins[4] = {9, 8, 7, 6};   
byte colPins[4] = {5, 4, 3, 2};   
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 4);   
char keyPressed; 
  
void setup(){  
  Serial.begin(9600);  
  pinMode(13,  OUTPUT);
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    Serial.println(keyPressed);  
    if(keyPressed=='*') {
      // code ..
    }
    if(keyPressed=='#'){
      // code ..
    }
  }  
}

1-5. String 자료형의 이해

String 자료형은 문자열을 쉽게 사용하고 저장, 관리할 수 있습니다.

금고의 비밀번호를 저장하고 비교하기 위해 사용할 것입니다.

문자열은 더하기(+) 연산이 가능합니다. 문자열 더하기 연산은 두 문자열을 연결해서 새로운 문자열을 만들어낼 수 있습니다.

String a = "hello";
String b = "coders";
String c = a + b;
// c에는 "hellocoders"가 저장된다.

1-6. length()

length() 함수는 String 변수에 저장된 문자열의 길이를 구해 반환합니다.

String a = "hello";
int len = a.length();
// len 변수에는 a의 길이인 5가 저장된다.

1-7. 문자열 비교

String 변수 2개가 같은 문자인지 확인하기 위해서는 앞서 배운 비교연산자 "=="을 사용하면 됩니다.

String a = "hello"
String b = "coders"
if (a==b) {
    //같은 문자열이라면
}
if (a!=b) {
    //다른 문자열이라면
}

1-8. [실습] 누른 문자열을 모두 합쳐 출력하기

키패드에서 누르는 문자를 모두 String 변수에 합쳐 저장해 봅시다.

키패드의 '#'이 눌렀을 때 이전까지 누른 문자열이 "1234"라면 LED를 1번 깜빡이고 아니라면 LED를 3번 깜빡이게 코드를 작성해 봅시다.

#include <Keypad.h>    
char hexaKeys[4][4] = {  
  {'1', '2', '3', 'A'},  
  {'4', '5', '6', 'B'},  
  {'7', '8', '9', 'C'},  
  {'*', '0', '#', 'D'}};  
byte rowPins[4] = {9, 8, 7, 6};   
byte colPins[4] = {5, 4, 3, 2};   
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 4);   
char keyPressed; 
String s = "";
String pw = "1234";

void setup(){  
  Serial.begin(9600);  
  pinMode(13,  OUTPUT);
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    if (keyPressed=='#') {
      if(s == pw) {

      }
      if(s != pw) {

      }
      s = "";
    }
    else{
      s += keyPressed;
    }
  }  
}

?. 실습 코드 참고하기

1-4. [실습] 특정 버튼이 눌렸을 때 LED 켜기

#include <Keypad.h>    
char hexaKeys[4][4] = {  
  {'1', '2', '3', 'A'},  
  {'4', '5', '6', 'B'},  
  {'7', '8', '9', 'C'},  
  {'*', '0', '#', 'D'}};  
byte rowPins[4] = {9, 8, 7, 6};   
byte colPins[4] = {5, 4, 3, 2};   
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 4);   
char keyPressed; 
  
void setup(){  
  Serial.begin(9600);  
  pinMode(13,  OUTPUT);
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    Serial.println(keyPressed);  
    if(keyPressed=='*') {
      digitalWrite(13, HIGH);
    }
    if(keyPressed=='#'){
      digitalWrite(13, LOW);
    }
  }  
}

1-8. [실습] 누른 문자열을 모두 합쳐 출력하기

#include <Keypad.h>    
char hexaKeys[4][4] = {  
  {'1', '2', '3', 'A'},  
  {'4', '5', '6', 'B'},  
  {'7', '8', '9', 'C'},  
  {'*', '0', '#', 'D'}};  
byte rowPins[4] = {9, 8, 7, 6};   
byte colPins[4] = {5, 4, 3, 2};   
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 4);   
char keyPressed; 
String s = "";
String pw = "1234";

void setup(){  
  Serial.begin(9600);  
  pinMode(13,  OUTPUT);
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    if (keyPressed=='#') {
      Serial.println(s);
      if(s == pw) {
        digitalWrite(13, HIGH);
        delay(500);
        digitalWrite(13, LOW);
        delay(500);
      }
      if(s != pw) {
        for(int i=0; i<3; i++) {
          digitalWrite(13, HIGH);
          delay(500);
          digitalWrite(13, LOW);
          delay(500);
        }
      }
      s = "";
    }
    else{
      s += keyPressed;
    }
  }  
}