Arduino - LiquidCrystal I2C

sungwbs·2023년 10월 25일

Arduino

목록 보기
1/2
post-thumbnail

1. 프로젝트 코드

#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; // 이전 버튼 상태 업데이트
}


2. 프로젝트에 대한 설명

  • 스위치 디바운싱 함수는 'digitalRead(BUTTON)'를 사용하여 현재 버튼의 상태를 읽습니다.
    그리고나서 이전 버튼 상태(last)와 현재 버튼 상태(current)를 비교합니다.
    만약에 이전 버튼 상태와 현재 버튼 상태가 다르다면, delay(5)를 통해 5 밀리초 동안 대기시간을 가집니다.
    이것은 짧은 시간 동안 안정화되기를 기다리는 것으로 디바운싱을 수행합니다.
    대기 후에 다시 한 번 digitalRead(BUTTON)를 사용하여 현재 버튼 상태를 읽습니다.
    디바운싱 처리된 현재 버튼 상태(current)를 반환합니다.
  • 가변저항(가변저항은 값이 변하는 저항입니다)을 돌린 후에 버튼을 클릭 시 화면에 출력되어있는 문자열을 초기화시킨 후 가변저항이 돌아간 만큼 새로운 저항값을 출력해준다.
    ※ 새로운 가변저항 값을 받을때마다 clear()를 사용하는 이유는 lcd잔상의 오류 문제를 인해서 추가시켜 놓은 것이다.
    만약에 clear()를 사용하지않고, 다음 저항값을 출력하게 되면은 겹쳐보이는 문제점이 나타나게 되면서 제한 숫자인 0~1023 이상의 숫자가 표시가 된다.

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

0개의 댓글