#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x20, 16, 2); // lcd주소와 크기 지정
boolean lastButton = LOW; // 이전 버튼의 눌림 상태를 Boolean 형 변수로 선언
boolean currentButton = LOW; // 현재 버튼의 눌림 상태를 Boolean 형 변수로 선언
const int PIN = A0; // 가변저항 A0번 핀에 지정
int value; // value 값 저장 할 변수 생성
const int BUTTON = 8; // 버튼을 8번 핀에 지정
boolean debounce(boolean last)
{
boolean current = digitalRead(BUTTON); // 현재 버튼 상태 읽기
if (last != current)
{
delay(5); // 짧은 시간 동안 대기하여 디바운싱 처리
current = digitalRead(BUTTON); // 다시 현재 버튼 상태 읽기
}
return current; // 디바운싱 처리된 현재 버튼 상태 반환하고있다.
}
void setup()
{
// LCD 초기화
lcd.init(); // I2C 통신을 초기화
lcd.backlight(); //lcd에 백라이트 켜주기
lcd.begin(16, 2); // LCD 크기 설정
lcd.clear(); //lcd 화면 초기화
lcd.print("ID:201904035"); //문제 조건에 맞게 lcd에 print 해주기
// 핀 모드 설정
pinMode(BUTTON, INPUT); //0~1023까지 아날로그 값 읽을 수 있음, 버튼 핀을 입력 모드로 설정
pinMode(PIN, INPUT); // 가변저항 핀을 입력 모드로 설정
}
void loop()
{
currentButton = debounce(lastButton); // 버튼 상태 읽기 (디바운스 적용)
if (currentButton == HIGH && lastButton == LOW) // 현재 버튼이 켜지고 이전 버튼이 꺼질 때 실행
{
value = analogRead(PIN); // 버튼이 눌렸을 때만 아날로그 값을 읽어온다.
// LCD 초기화 후 새로 출력해주고 있다.
lcd.clear();
lcd.print("ID:201904035"); // 출력문
lcd.setCursor(0,1); // 출력 해 줄 위치를 설정해주었다.
lcd.print("Value:"); // 출력문
lcd.print(value); // 가변저항 값 출력
}
lastButton = currentButton; // 이전 버튼 상태 업데이트
}


▶ 느낀점
아두이노IDE를 사용하여 lcd에 변하는 저항의 값을 출력해주는 코드를 만들었습니다. 코드를 만들면서 발생한 문제점은 첫 번째 저항 값은 잘 표시되었으나, 두 번째 부터는 lcd 디스플레이부분에 이전에 값이 지워지지 않아서 중복 표시가 나왔던 문제점이였으며, 코드에는 초기화를 이미 시켜놓았다. 이러한 문제점을 해결 한 방법은 다음 저항을 보여주기전에 초기화를 하고 보여주는 방법을 사용했다. "초기화 -> 입력 -> 초기화 -> 입력" 순으로 코드를 만들어 주어야지 오류를 잡을 수 있다.
추후에 lcd를 사용하여 슈퍼마리오 게임과 피에조부저를 장착하여 사운드 재생을 시키며 작은 게임기를 만들어 볼 예정입니다.
