아두이노(Arduino) 기초 디스플레이 시리얼LCD
애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지를 읽어주세요.
안녕하세요. 애드라이프 입니다.
이전 포스팅에서는 CLCD에 대해 다뤄 봤는데요. 제가 가지고 있는 부품들을 뒤지다 보니
시리얼 통신으로 제어가 가능한 LCD를 발견해서 포스팅 하려합니다.
모양부터 봐볼까요? 전면 모양은 같으니 후면 모양만 보여드릴께요.▼
왼쪽이 Serial LCD이고 오른쪽이 일반 CLCD입니다.
후면에 통신으로 제어가 가능하게끔 모듈이 달려있습니다.
그리고 글씨의 농도와 LCD배경의 밝기 조절이 가능한 가변저항도 보이네요.
모듈은 기본적으로 LCD의 16P에 모두 연결되어있습니다.
아쉽게도 TINKERCAD에는 시리얼 모니터 모듈이 없어서..허접하지만 그림판으로
회로도를 그렸어요. 다행이 회로구성이 정말 간단해서 다행이네요.
그럼 회로도 한번 살펴볼까요?
시리얼 통신만 있으면 되기때문에 회로도가 정말 간단하죠?
거기다 LCD는 단순히 정보를 받아 출력해주는 용도로 쓰는 경우가 많아서
Rx부분만 아두이노 우노(Arduino UNO) Tx 부분과 연결 했습니다.
인가전압은 CLCD와 같은 5v입니다.
이제 프로그램을 보면서 설명드리도록 하겠습니다.
첫번째로는 간단한 문자 출력입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void setup() { Serial.begin(9600); //통신속도 9600 } void loop() { Serial.print("$CLEAR\r\n"); //lcd의 모든 문자를 지웁니다. Serial.print("$Go 1 4\r\n"); //1행 4번째 열로 이동합니다 Serial.print("$PRINT Welcome to\r\n"); /문자를 출력합니다. Serial.print("$Go 2 1\r\n"); //2행 1번째 열로 이동합니다. Serial.print("$PRINT Add Life Blog !!\r\n"); //문자를 출력합니다. Serial.print("$CURSOR 1 1\r\n"); //커서를 다시 1행 1열로 이동합니다. delay(1000); } |
프로그램의 전반적인 설명은 주석을 참고해 주세요.
다만, SerialLCD에 명령을 줄 경우에는 반듯이 지켜야할 2가지 약속이 있습니다.
작성된 프로그램을 보시면 명령의 첫번째에 $ 표시가 붙어 있는게 보이시죠?
그리고 말미에는 \r\n이 붙어있죠. 이 두가지를 지켜주면 응용단계로 넘어갈때도 한결 편하실겁니다.
출력결과▼
자신이 쓰고 싶은 문구를 바꿔가며 출력해보면 좋겠네요.!!
이번 포스팅은 응용단계를 바로 들어가도록 하겠습니다.
CLCD때와 같이 ADC값을 출력해 보겠습니다.
응용편 회로부터 살펴보도록 하죠.▼
기존 회로에 아날로그 포트에 5v와 3.3만 연결하면 끝입니다.
회로가 워낙 간단하니 기타 설명없이 바로 프로그램 설명으로 넘어가겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #include<LiquidCrystal.h> //C:\arduino-1.8.5\libraries\LiquidCrystal에 해당 헤더파일있음 LiquidCrystal lcd(12,11,5,4,3,2); //라이브러리 사용을 위한 lcd 초기화 lcd(RS, Enable, Data Bit0, Data Bit1, Data Bit2, Data Bit3) int _5vPin = A0; //아날로그 포트 A0는 5V입력 int _3_3vPin = A1; //아날로그 포트 A1은 3.3V입력 void setup() { lcd.begin(16,2); //2행 8열로 라이브러리 셋팅 Serial.begin(9600); } void CLCD_Voltage_Display(int _5v_ADC,int _3_3v_ADC) { char _5v_str[50]; //5v 관련 정보를 문자로 저장하기 위한 변수 char _3_3v_str[50]; //3.3v 관련 정보르 문자로 저장하기 위한 변수 sprintf(_5v_str,"$PRINT 5v ADC:%d \r\n",_5v_ADC); sprintf(_3_3v_str,"$PRINT 3.3v ADC:%d \r\n",_3_3v_ADC); Serial.print("$CLEAR\r\n"); Serial.print("$Go 1 1\r\n"); Serial.print(_5v_str); Serial.print("$Go 2 1\r\n"); Serial.print(_3_3v_str); } void loop() { int _5vValue = 0; int _3_3vValue = 0; _5vValue= analogRead(_5vPin); //5V전압을 디지털 신호로 변환 _3_3vValue= analogRead(_3_3vPin); //3.3V전압을 디지털 신호로 변환 CLCD_Voltage_Display(_5vValue,_3_3vValue); delay(500); } | cs |
프로그램의 전반적인 설명은 주석으로 달아 놓았습니다.
프로그램을 보다 보면 아래부분에서 기존 예제와 다른 점이 보입니다.
받아온 ADC값을 표현하기 위해서 sprintf함수를 이용해서 한차례 문자열로 변환한 후에 그 문자열 그대로를 Serial.print함수로 출력하죠. 이렇게 하는 이유는 무엇일까요?
앞서 말씀 드렸듯이 시리얼 LCD를 쓰는 경우 지켜야할 규칙이있습니다.
$명령 문자열 \r\n의 형태를 그대로 유지한채 원하는 값만 넣어주는 형태로 되어있죠?
이 규칙을 깨지 않기 위해 변환해주는 것이죠.
마지막으로 결과를 보면서 이번 포스팅을 끝내겠습니다.
지금까지 아두이노(Arduino) 기초 디스플레이 시리얼LCD 편 포스팅이였습니다.
계속해서 도움되는 포스팅으로 찾아뵙겠습니다.
by 애드라이프
'아두이노 > 아두이노 기초' 카테고리의 다른 글
아두이노(Arduino) 기초 센서 2편 - 온습도 센서(DHT11) (0) | 2018.11.06 |
---|---|
아두이노(Arduino) 기초 센서 1편 - CDS 조도센서 (0) | 2018.11.04 |
아두이노(Arduino) 기초 디스플레이편(CLCD 16x2) 2편 (0) | 2018.11.03 |
아두이노(Arduino) 기초 디스플레이편(CLCD 16x2) 1편 (0) | 2018.11.03 |
아두이노(Arduino) 기초 아날로그 입출력(전압 읽기) 2편 (0) | 2018.11.02 |