7주차 금고 만들기: 두 판 사이의 차이
(새 문서: === 1. 키패드 === 프레임없음|400x400픽셀 4 x 4 크기의 키패드 모듈을 사용해 봅시다. 금고에 비밀번호를 설정해두고 키패드를 이용해 비밀번호를 누르는 기능을 만들 예정입니다. ==== 1-1. 회로 ==== 프레임없음|859x859픽셀 ==== 1-2. 라이브러리 추가 ==== 먼저 아두이노 IDE 에서 키패드를 사용하기 위해 라이브러리를 설치합니다....) |
잔글편집 요약 없음 |
||
87번째 줄: | 87번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== 1-6. | ==== 1-6. 문자열 비교 ==== | ||
String 변수 2개가 같은 문자인지 확인하기 위해서는 앞서 배운 비교연산자 "=="을 사용하면 됩니다.<syntaxhighlight lang="arduino"> | String 변수 2개가 같은 문자인지 확인하기 위해서는 앞서 배운 비교연산자 "=="을 사용하면 됩니다.<syntaxhighlight lang="arduino"> | ||
String a = "hello" | String a = "hello" | ||
106번째 줄: | 100번째 줄: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== 1- | ==== 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- | ==== 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);
}
}
}