아두이노와 CLCD의 연결

아두이노와 CLCD를 연결하면 여러가지 내부 정보를 바로 눈으로 확인 할 수 있어서 편리하다.
CuBLOC에서 사용하던 CLCD가 있어서 그것을 이용하기로 맘 먹었다.
모델명은 LC2042-SFLYH6다.

일단 스펙.
사용자 삽입 이미지
이전에 만든 것이 시리얼 통신 중에 오류가 났기 때문에 내부 문제인지, 전송 문제인지를 찾기 위해서 CLCD를 사용하는 것이 목적이었으므로, 가능한 아두이노와 CLCD를 연겨할 때 사용할 핀 수를 줄여야 유리하다. 데이터 전송에는 8bit모드와 4bit모드가 있는데 전자는 8개의 데이터를 보내서 표시하는 것, 후자는 4개의 데이터를 보내서 표시하는 것이다. 일단 4bit모드로 만들기로 하고 위의 것을 살펴보면 다음과 같이 나와있다.

DB0~DB3 : in 4-bit mod. open these terminals. (4bit 모드로 사용할 땐 연결하지 말라는 의미)

따라서 데이터 전송은 DB4~DB7 즉 11~14번 핀을 이용해야한다.
물론, 이번에 사용한 CLCD에 한한 내용이다. 메이커나 제품에 따라 핀 배열이나 성능이 다를 수 있으므로, 자신이 사용하는 CLCD 모델명을 확인하고 해당 데이터 시트를 찾아 확인해야 한다.

아두이노에는 LCD를 위한 명령어들이 준비되어있는데, #include <LiquidCrystal.h>를 스케치 상단에 적어 놓는 것으로 불러올 수 있다. 이 파일은 아두이노 개발환경(IDE)의 librariesLiquidCrystal 폴더에 들어있다.

일단 눈에 띄는 중요한 부분을 살펴보면,

public:
  LiquidCrystal(uint8_t rs, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
  LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
		uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
  LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
  LiquidCrystal(uint8_t rs, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);

요 부분이다.
자신이 CLCD의 어떤 모드를 사용할 것인가를 결정하면 위의 포맷대로 써 줘야한다.
나는 4bit모드를 쓰기로 맘 먹었으므로…

  LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
		uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);

이 형식을 따라 연결해 주면 된다.

무엇을 의미하냐면, 아두이노 스케치에 LiquidCrystal(rs해당 핀 번호, rw해당 핀 번호, enable해당 핀 번호, D0해당 핀번 호,~,D3해당 핀 번호); 를 써 주면 된다는 것이고, 거기에 적은대로 아두이노와 CLCD를 직접 전선으로 연결해주면 된단 의미다.

이전 구성에서 A0, A1, D2, D3를 사용하고 있었으므로 이것을 피해서 연결해주기로 맘 먹고 그 외의 핀을 할당했다..

LiquidCrystal lcd(5, 6, 7, 9, 10, 11, 12);

와 같이 아두이노 5, 6,7, 9, 10, 11, 12번 핀과  CLCD 해당 핀을 서로 연결해 준다.

사용자 삽입 이미지
여기서 CLCD 3번 핀은 LCD의 컨트라스트를 조정하는 것인데, 일단 GND에 연결해 준다. 3번 핀을 가변저항 중간 단자에 붙이고 나머지 양 옆의 단자를 +,-에 연결해 주면 가변 저항을 돌리는 것으로 컨트라스트를 조절하게 만들 수도 있다. 아니라면 아날로그 출력을 이용해서 아두이노에서 컨트롤 할 수도 있을 것 같다.

15, 16번 핀은 백라이트이므로 전원에 바로 물려줬다.

사용법은 간단하다.

  lcd.print(변수, 변수 형태);
  lcd.print(“직접입력”);

과 같이 이용하면 된다.
그 외에도 여러 명령이 준비되어 있는데, 이것은 LiquidCrystal.h를 살펴보면 잘 나와 있다.

예를 들자면 화면을 지우려면 lcd.clear(); 화면의 맨 위로 이동시키려면 lcd.home();라고 쓰면 된다.

  lcd.print("[1]-----------------");
 lcd.print("[2]-----------------");
 lcd.print("[3]-----------------");
 lcd.print("[4]----------------");

위와 같이 해서 출력을 해 보았다.

사용자 삽입 이미지1행을 완성하면 3행이 써지고 그다음 2행이 써지고 다시 4행이 써지는 순서다.

그럼 맘대로 배치하려면 어떻게 해야 하는가?

  lcd.setCursor(0, 0);
  lcd.print("[1]");

  lcd.setCursor(1, 1);
  lcd.print("[2]");

  lcd.setCursor(2, 2);
  lcd.print("[3]");

  lcd.setCursor(3, 3);
  lcd.print("[4]");

이번에는 위와 같은 명령어를 써 봤다.
사용자 삽입 이미지
감이 잡히는가?
lcd.setCursor(가로, 세로); 명령으로 원하는 위치에 커서를 이동시켜 놓고, 그 위치에서 글자를 나오게 할 수 있다.  여기서 가로, 세로 값은 맨 왼쪽 위가 (0,0)이고, 맨 오른쪽 아래가 (19,3)이므로 그에 따라 적절히 값을 넣으면 된다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.