====== 심플 유저 인터페이스 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]]