13. LCD 특수문자 및 알람시계 만들기

Download Report

Transcript 13. LCD 특수문자 및 알람시계 만들기

LCD를 활용한 특수문자 표시 및 알람 시계 만들기
목차
1.
재료준비 및 브레드 보드 배선 구성하기
2.
LCD를 활용한 특수문자 표시 및 알람 시계 만들기
3.
응용 작품 만들기
1
준비물
준비하기
1) 아두이노 보드 (SPL-Duino V2 초보자용 보드)
2) USB 케이블
3) 서보 모터, 스피커, PSD 거리 센서
4) 브레드보드 실습 키트
2
브레드보드 배선 구성하기
전원 연결
아래 그림과 같이 브레드 보드를 연결해줍니다.
3
브레드보드 배선 구성하기
센서 연결
LCD모듈과 아날로그 키패드 스피커를 연결해줍니다.
4
특수문자 이해하기
특수문자
특수문자 만들기
크리스털 LCD는 총 8개의 문자를
사용자가 생성하여 사용할 수 있습니다.
LCD에서 사용가능한 문자는 총 256개 로서
이중 0번부터 7번 바이트까지
사용자가 변경할 수 있습니다.
각 문자는 5x8의 도트로 구성되며, 하나의 문자
좌측과 같이 8개의 16진수로 정의됩니다.
5
특수문자 이해하기
특수문자
문자를 저장하고 사용하는 명령어입니다.
lcd.createChar(0,배열이름);
- 만든 배열을 가지고 와 특수문자를 만들어 저장해주는 명령어입니다.
첫 번째 입력수는 저장할 번호의 수입니다.
0~15까지 총 16개의 값을 저장 할 수 있습니다.
두 번째 입력값은 만든 특수문자의 변수 이름입니다.
직접적인 출력 명령어가 아닌 메모리에 저장을 해주는 명령어입니다.
lcd.write(0);
- lcd.createChar에서 저장한 문자를 불러와주는 명령어 입니다.
lcd.createChar가 문자를 저장하면 lcd.write로 불러와 출력을 합니다.
6
특수문자 이해하기
특수문자
특수문자 생성하기
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
lcd를 이용하기 위한 기본 세팅을 합니다.
7
특수문자 이해하기
특수문자
uint8_t mychar[8] = {0x00,0x1f,0x09,0x05,0x03,0x01,0x01,0x00};
위와 같은 전역 변수를 하나 만들어줍니다.
8
특수문자 이해하기
특수문자
void setup()
{
lcd.begin();
lcd.backlight();
lcd.createChar(0, mychar);
}
void loop()
{
lcd.clear();
lcd.home();
lcd.write(0);
delay(1000);
}
setup에 lcd.createChar(0, mychar);를 사용합니다.
lcd.createChar(0, mychar);을 씀으로써 mychar를
불러와서 0번에 저장하게 됩니다.
작업을 마치고 실행을 하면 특수 문자가 나타납니다.
9
특수문자 이해하기
특수문자
특수 문자 생성법을 이용하여 하트 모양의 특수문자를 만들어 봅니다.
10
특수문자 이해하기
특수문자
8가지 특수문자 출력
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
uint8_t
uint8_t
uint8_t
uint8_t
uint8_t
uint8_t
uint8_t
uint8_t
bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4};
note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0};
clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0};
heart[8] = {0x00,0x0a,0x1f,0x1f,0x0e,0x04,0x00,0x00};
duck[8] = {0x00,0x0c,0x1d,0xf,0xf,0x06,0x00,0x00};
check[8] = {0x00,0x01,0x03,0x16,0x1c,0x08,0x00,0x00};
cross[8] = {0x00,0x1b,0x0e,0x04,0x0e,0x1b,0x00,0x00};
retarrow[8] = {0x01,0x01,0x05,0x09,0x1f,0x08,0x04,0x00};
임의의 모양 특수문자 8개를 만들어 줍니다.
11
특수문자 이해하기
특수문자
void setup()
{
lcd.begin();
lcd.backlight();
lcd.createChar(0, bell);
lcd.createChar(1, note);
lcd.createChar(2, clock);
lcd.createChar(3, heart);
lcd.createChar(4, duck);
lcd.createChar(5, check);
lcd.createChar(6, cross);
lcd.createChar(7, retarrow);
lcd.home();
lcd.print("Hello world...");
lcd.setCursor(0, 1);
lcd.print(" i ");
lcd.write(3);
lcd.print(" SPL-Duino!");
delay(5000);
}
setup에서 만든 특수문자들을 lcd.createChar에
저장하여 줍니다.
12
특수문자 이해하기
특수문자
void loop()
{
for (int i = 0; i < 8; i++)
{
lcd.clear();
lcd.write(i);
delay(2000);
}
}
for 반복문을 이용하여 저장한 특수문자를
lcd.write로 순차적으로 불러오게 됩니다.
13
기본 실습
메뉴구성
배열을 이용하여 메뉴를 구성하여 봅니다.
키패드와 LCD를 준비합니다
키패드의 버튼 2개를 이용하여 메뉴를 이동하는 것을 구현하고자 합니다.
14
기본 실습
메뉴구성
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
String menu[3] = {"menuA", "menuB", "menuC"};
int menu_index = 0;
int green = 721;
int blue = 660;
void setup()
{
lcd.begin();
lcd.backlight();
}
기본 세팅을 해줍니다.
String menu[3]은 나타내고자 하는 메뉴의 배열입니다.
menu_index는 메뉴 위치를 나타내고자 하는 변수입니다.
green과 blue는 키패드에서 두 개의 버튼값입니다.
키패드와 보드의 상태에 따라 아날로그 값이 다를 수 있으니 버튼값은
직접 확인하여 변경해주셔야 합니다.
15
기본 실습
메뉴구성
void loop()
{
int a0 = analogRead(0);
if (a0 == green)
{
menu_index = menu_index - 1;
if (menu_index < 0)
menu_index = 2;
}
else
if (a0 == blue)
{
menu_index = menu_index + 1;
if (menu_index > 2)
menu_index = 0;
}
lcd.clear();
lcd.home();
lcd.print(menu[menu_index]);
delay(100);
기본 세팅을 해줍니다.
String menu[3]은 메뉴의 배열입니다.
menu_index는 메뉴 위치를 저장 하는 변수입니다.
green과 blue는 키패드에서 두 개의 버튼값입니다.
키패드와 보드의 상태에 따라
아날로그 값이 다를 수 있으니 버튼값은
직접 확인하여 변경해주셔야 합니다.
16
응용 작품 만들기
실습
• 미션) LCD에 시계를 구현하고 알람 기능을 만드십시오.
키패드 센서로 알람의 시간을 조절 할 수 있고 알람을 키고 끄는 기능을
만드십시오
LCD의 첫 번째 줄은 시계 두 번째 줄은 알람 상태로 구현하십시오
ex)
시간:분:초
알람on/off 시간:분:초
알람시간 조절
알람을 위한 스피커
응용 작품 만들기
실습
• 코드 예시
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int green = 720;
int blue = 658;
int white = 900;
int yellow = 797;
int red = 603;
int
int
int
int
mv=6;
cnt=0;
bnk=0;
tone_on=0;
int
int
int
int
alarm=1;
alarm_h=0;
alarm_m=0;
alarm_s=0;
18