7주차 금고 만들기: 두 판 사이의 차이

아두위키 : Arduwiki
(새 문서: === 1. 키패드 === 프레임없음|400x400픽셀 4 x 4 크기의 키패드 모듈을 사용해 봅시다. 금고에 비밀번호를 설정해두고 키패드를 이용해 비밀번호를 누르는 기능을 만들 예정입니다. ==== 1-1. 회로 ==== 프레임없음|859x859픽셀 ==== 1-2. 라이브러리 추가 ==== 먼저 아두이노 IDE 에서 키패드를 사용하기 위해 라이브러리를 설치합니다....)
 
잔글편집 요약 없음
 
87번째 줄: 87번째 줄:
</syntaxhighlight>
</syntaxhighlight>


==== 1-6. length() ====
==== 1-6. 문자열 비교 ====
length() 함수는 String 변수에 저장된 문자열의 길이를 구해 반환합니다.<syntaxhighlight lang="arduino">
String a = "hello";
int len = a.length();
// len 변수에는 a의 길이인 5가 저장된다.
</syntaxhighlight>


==== 1-7. 문자열 비교 ====
String 변수 2개가 같은 문자인지 확인하기 위해서는 앞서 배운 비교연산자 "=="을 사용하면 됩니다.<syntaxhighlight lang="arduino">
String 변수 2개가 같은 문자인지 확인하기 위해서는 앞서 배운 비교연산자 "=="을 사용하면 됩니다.<syntaxhighlight lang="arduino">
String a = "hello"
String a = "hello"
106번째 줄: 100번째 줄:
</syntaxhighlight>
</syntaxhighlight>


==== 1-8. [실습] 누른 문자열을 모두 합쳐 출력하기 ====
==== 1-7. [실습] 누른 문자열을 모두 합쳐 출력하기 ====
키패드에서 누르는 문자를 모두 String 변수에 합쳐 저장해 봅시다.
키패드에서 누르는 문자를 모두 String 변수에 합쳐 저장해 봅시다.


143번째 줄: 137번째 줄:
     else{
     else{
       s += keyPressed;
       s += keyPressed;
    }
  } 
</syntaxhighlight>
=== 2. LCD ===
키패드로 누른 문자를 LCD를 이용해 출력해 봅시다.
==== 2-1. LCD 회로도[편집 | 원본 편집] ====
{| class="wikitable"
!I2C LCD 모듈 핀
!아두이노 우노 핀
|-
|VCC
|5V
|-
|GND
|GND
|-
|SDA
|A4
|-
|SCL
|A5
|}
[[파일:키패드LCD회로 2.png|프레임없음|840x840픽셀]]
==== 2-2. 키패드를 눌러 LCD에 문자 출력하기 ====
키패드가 눌리면 LCD에 문자열을 출력하도록 코드를 작성해 봅시다.
//영상<syntaxhighlight lang="arduino" line="1">
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#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 = "";
void setup(){ 
  lcd.init();
  lcd.backlight();
void loop(){ 
  keyPressed = customKeypad.getKey(); 
   
  if (keyPressed) 
  { 
    s += keyPressed;
    lcd.clear();
    lcd.print(s);
  } 
</syntaxhighlight>
==== 2-3. [실습] 비밀번호 확인하기 ====
금고 프로젝트를 위해 비밀번호를 확인하는 기능을 구현해 봅시다.
비밀번호는 "2025"라는 문자열로 지정합니다.
키패드에 눌리는 문자열을 LCD에 출력합니다.
만약 키패드의 '#'을 눌렀다면 비밀번호를 확인합니다.
비밀번호가 맞다면 LCD에 "OK!!"를 출력하고 아니라면 "NOoooo!!"를 3초 동안 출력합니다.
//영상<syntaxhighlight lang="arduino" line="1">
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#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 = "2025";
void setup(){ 
  lcd.init();
  lcd.backlight();
void loop(){ 
  keyPressed = customKeypad.getKey(); 
   
  if (keyPressed) 
  { 
    if (keyPressed == '#') {
      if (s == pw) {
        // code ..
      }
      else {
        // code ..
      }
      // code ..
    }
    else {
      s += keyPressed;
      lcd.clear();
      lcd.print("PW : ");
      lcd.print(s);
     }
     }
   }   
   }   
183번째 줄: 288번째 줄:
</syntaxhighlight>
</syntaxhighlight>


==== 1-8. [실습] 누른 문자열을 모두 합쳐 출력하기 ====
==== 1-7. [실습] 누른 문자열을 모두 합쳐 출력하기 ====
<syntaxhighlight lang="arduino" line="1">
<syntaxhighlight lang="arduino" line="1">
#include <Keypad.h>     
#include <Keypad.h>     
227번째 줄: 332번째 줄:
     else{
     else{
       s += keyPressed;
       s += keyPressed;
    }
  } 
</syntaxhighlight>
==== 2-3. [실습] 비밀번호 확인하기 ====
<syntaxhighlight lang="arduino" line="1">
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#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 = "2025";
void setup(){ 
  lcd.init();
  lcd.backlight();
void loop(){ 
  keyPressed = customKeypad.getKey(); 
   
  if (keyPressed) 
  { 
    if (keyPressed == '#') {
      if (s == pw) {
        lcd.clear();
        lcd.print("OK!!");
        delay(3000);
      }
      else {
        lcd.clear();
        lcd.print("NOoooo!!");
        delay(3000);
      }
      s="";
      lcd.clear();
      lcd.print("PW : ");
    }
    else {
      s += keyPressed;
      lcd.clear();
      lcd.print("PW : ");
      lcd.print(s);
     }
     }
   }   
   }   
}   
}   
</syntaxhighlight>
</syntaxhighlight>

2025년 1월 10일 (금) 21:09 기준 최신판

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. 문자열 비교

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

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

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

키패드에서 누르는 문자를 모두 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;
    }
  }  
}

2. LCD

키패드로 누른 문자를 LCD를 이용해 출력해 봅시다.

2-1. LCD 회로도[편집 | 원본 편집]

I2C LCD 모듈 핀 아두이노 우노 핀
VCC 5V
GND GND
SDA A4
SCL A5

2-2. 키패드를 눌러 LCD에 문자 출력하기

키패드가 눌리면 LCD에 문자열을 출력하도록 코드를 작성해 봅시다.

//영상

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#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 = "";

void setup(){  
  lcd.init();
  lcd.backlight();
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    s += keyPressed;
    lcd.clear();
    lcd.print(s);
  }  
}

2-3. [실습] 비밀번호 확인하기

금고 프로젝트를 위해 비밀번호를 확인하는 기능을 구현해 봅시다.

비밀번호는 "2025"라는 문자열로 지정합니다.

키패드에 눌리는 문자열을 LCD에 출력합니다.

만약 키패드의 '#'을 눌렀다면 비밀번호를 확인합니다.

비밀번호가 맞다면 LCD에 "OK!!"를 출력하고 아니라면 "NOoooo!!"를 3초 동안 출력합니다.

//영상

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#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 = "2025";

void setup(){  
  lcd.init();
  lcd.backlight();
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    if (keyPressed == '#') {
      if (s == pw) {
        // code ..
      }
      else {
        // code ..
      }
      // code ..
    }
    else {
      s += keyPressed;
      lcd.clear();
      lcd.print("PW : ");
      lcd.print(s);
    }
  }  
}

?. 실습 코드 참고하기

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-7. [실습] 누른 문자열을 모두 합쳐 출력하기

#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;
    }
  }  
}

2-3. [실습] 비밀번호 확인하기

#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#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 = "2025";

void setup(){  
  lcd.init();
  lcd.backlight();
}  
void loop(){  
  keyPressed = customKeypad.getKey();  
    
  if (keyPressed)  
  {  
    if (keyPressed == '#') {
      if (s == pw) {
        lcd.clear();
        lcd.print("OK!!");
        delay(3000);
      }
      else {
        lcd.clear();
        lcd.print("NOoooo!!");
        delay(3000);
      }
      s="";
      lcd.clear();
      lcd.print("PW : ");
    }
    else {
      s += keyPressed;
      lcd.clear();
      lcd.print("PW : ");
      lcd.print(s);
    }
  }  
}