====== 심플 유저 인터페이스 UIF-5K-2 ======
본 제품은 간단한 유저 인터페이스를 위한 제품입니다. 20 by 4 영문 LCD와 5개의 키가 내장되어 있습니다.
* RS232C 인터페이스
* 통신방식(고정) : 보레이트 115200, 8비트, NONE 패리티, 1 스톱비트
* 전원 전압 : 9~24VDC
* 소비전류 : 1.2W
* 동작 환경 : 0~50C
* 사용습도 : 35~85% (단 결로없는 환경)
* 맴브레인 내구도 : 100,000회 (Force 250gf)
* 최대 통신거리 : 2미터
{{ :uifmain:uif5k2:uif5k2front.png?nolink |}}
{{ :uifmain:uif5k2:uif5k2.png?nolink |}}
===== 연결 방법 =====
본 제품은 RS232C를 사용해서 연결합니다. CFMEGA2의 CH1, CH2중 하나를 사용하세요. RX, TX가 서로 교차되도록 연결하고, SG를 연결하세요.
{{ :uifmain:uif5k2:conn1.png?nolink |}}
{{ :uifmain:uif5k2:connection.png?nolink |}}
===== 표시 방법 =====
RS232C로 문자열을 보내면 LCD에 표시됩니다.
{{ :uifmain:uif5k2:tx1.png?nolink |}}
===== 제어 명령 설명 =====
LCD 제어 명령은 ESC코드 (HEX 1B)를 선두로, 1개의 영문자를 보내 동작을 지시한 뒤, 그에 필요한 각종 인수를 보내는 형식으로 되어 있습니다.
^ 특수명령 ^ 명령코드 ^ 설명 ^ 전송 예 (16진수) ^
^ 캐릭터 커서 On | ESC S | 커서를 On 합니다. | 1B 53 |
^ 캐릭터 커서 Off | ESC s | 커서를 Off 합니다. | 1B 73 |
^ LCD 지우기 | ESC C | 전체 화면을 지웁니다. 이 명령 사용후 약 20mS지난후 다음 명령을 보내야 합니다. | 1B 43 |
^ 백라이트 ON/OFF | ESC BL # | 백라이트를 ON또는 OFF합니다. #위치에 0이면 OFF, 1이면 ON | 1B 42 4C 01 |
^ 좌표 설정 | ESC L X Y | X Y 위치로 표시 지점을 이동시킵니다. | 1B 4C 00 00 |
^ 부저 ON / OFF 설정 | ESC Z # | 스위치를 누를때 BEEP음을 발생시킬지 여부를 결정합니다. #=0 이면 OFF, #=1이면 On | 1B 5A 01 |
===== 키 입력 ======
키를 누르면, 해당 키코드 1바이트가 수신됩니다. 키코드는 왼쪽에서부터 차례대로 1~5입니다.
{{ :uifmain:uif5k2:rx1.png?nolink |}}
===== 샘플 프로그램 =====
++++ [소스 코드 보기]|
void setup() {
Serial1.begin(115200); //보레이트 115200 설정
uif_clear(); //전체 화면을 지움
uif_light(1); //back light를 on
uif_buzzer(1); //소리 on
uif_locate(0,0);
Serial1.print("== UIF-5K-2 MAIN ===");
uif_locate(0,3);
Serial1.print("AUTO ON OFF");
}
int cnt = 0;
void loop() {
cnt++; //카운터 값을 증가
uif_locate(6,2);
Serial1.print(cnt, DEC); //카운터 값을 표시
while (Serial1.available()>0) {
char inChar = (char)Serial1.read();
uif_locate(12,2);
Serial1.print(inChar, DEC);
}
delay(100);
}
void uif_clear() //전체 화면을 지웁니다.
{ Serial1.write(0x1b); Serial1.write(0x43); delay(50); }
void uif_light(unsigned char on_off) //back light 설정 인자 값 0 or 1
{ Serial1.write(0x1b);Serial1.write(0x42);Serial1.write(0x4c); Serial1.write(on_off); }
void uif_locate(unsigned char x, unsigned char y) //표시될 문자의 x축과 y축의 위치를 설정합니다
{ Serial1.write(0x1b);Serial1.write(0x4C);Serial1.write(x); Serial1.write(y); }
void uif_buzzer(unsigned char on_off) //부저동작 on/off 값 0 or 1
{ Serial1.write(0x1b);Serial1.write(0x5a);Serial1.write(on_off); }
++++
===== 제안 ======
본 제품은 다음과 같은 방식으로 사용할 수 있도록 고안된 제품입니다.
{{ :uifmain:uif5k2:category.png?nolink |}}
즉, 상단 빨간색 표시된 버튼으로 카테고리를 이동하고, 해당 카테고리 구성 메뉴 3개중 하나를 선택하는 방식입니다.
다음은 운영 예입니다.
{{ :uifmain:uif5k2:category2.png?nolink |}}
++++ [소스코드 보기]|
int mode = 0;
void setup() {
Serial1.begin(115200); //보레이트 115200 설정
mode_display_proc();
}
void mode_display_proc()
{
switch(mode) {
case 0:
uif_clear();
uif_light(1); //back light를 on
uif_buzzer(1); //소리 on
uif_locate(0,0);
Serial1.print(" AB CONTROL SYSTEM");
uif_locate(0,3);
Serial1.print("SETUP");
break;
case 1:
uif_clear();
uif_locate(0,0);
Serial1.print("1.MAIN TANK TEMP.>");
uif_locate(9,3);
Serial1.print("+ -");
break;
case 2:
uif_clear();
uif_locate(0,0);
Serial1.print("<2.MAIN TANK MIX>");
uif_locate(0,3);
Serial1.print("AUTO ON OFF");
break;
case 3:
uif_clear();
uif_locate(0,0);
Serial1.print("3.END OF MENU");
uif_locate(0,3);
Serial1.print("EXIT");
break;
}
}
void keyin_proc()
{
char inChar = (char)Serial1.read();
switch(mode) {
case 0:
if (inChar==2) {
mode = 1;
mode_display_proc();
}
break;
case 1:
if (inChar==5) {
mode = 2;
mode_display_proc();
}
break;
case 2:
if (inChar==1) {
mode = 1;
mode_display_proc();
}
if (inChar==5) {
mode = 3;
mode_display_proc();
}
break;
case 3:
if (inChar==1) {
mode = 2;
mode_display_proc();
}
if (inChar==2) {
mode = 0;
mode_display_proc();
}
break;
}
}
void loop() {
while (Serial1.available()>0) {
keyin_proc();
}
}
void uif_clear() //전체 화면을 지웁니다.
{ Serial1.write(0x1b); Serial1.write(0x43); delay(50); }
void uif_light(unsigned char on_off) //back light 설정 인자 값 0 or 1
{ Serial1.write(0x1b);Serial1.write(0x42);Serial1.write(0x4c); Serial1.write(on_off); }
void uif_locate(unsigned char x, unsigned char y) //표시될 문자의 x축과 y축의 위치를 설정합니다
{ Serial1.write(0x1b);Serial1.write(0x4C);Serial1.write(x); Serial1.write(y); delay(50); }
void uif_buzzer(unsigned char on_off) //부저동작 on/off 값 0 or 1
{ Serial1.write(0x1b);Serial1.write(0x5a);Serial1.write(on_off); }
++++
==== 동영상 ====
{{ youtube>T5aZxPYstKk?si=9M3yX69weB3Q62bK }}
===== 응용 분야 ======
아래 사진처럼 다수의 스위치및 램프가 필요한 콘트롤 박스에 활용할 수 있습니다.
{{ :uifmain:uif5k2:sizesshort.png?nolink |}}
{{ :uifmain:uif5k2:appsample.png?nolink |}}
===== 판넬 컷 =====
{{ :uifmain:uif5k2:panelct.png?nolink |}}
===== 외형 칫수 ======
{{ :uifmain:uif5k2:dimension.png?nolink |}}
===== 연결 부 설명 ======
{{ :uifmain:uif5k2:connectiondesc.png?nolink |}}
[[..:index|심플 유저 인터페이스 UIF]]