본 제품은 간단한 유저 인터페이스를 위한 제품입니다. 20 by 4 영문 LCD와 5개의 키가 내장되어 있습니다.
본 제품은 RS232C를 사용해서 연결합니다. CFMEGA2의 CH1, CH2중 하나를 사용하세요. RX, TX가 서로 교차되도록 연결하고, SG를 연결하세요.
RS232C로 문자열을 보내면 LCD에 표시됩니다.
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입니다.
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); }
본 제품은 다음과 같은 방식으로 사용할 수 있도록 고안된 제품입니다.
즉, 상단 빨간색 표시된 버튼으로 카테고리를 이동하고, 해당 카테고리 구성 메뉴 3개중 하나를 선택하는 방식입니다.
다음은 운영 예입니다.
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); }
아래 사진처럼 다수의 스위치및 램프가 필요한 콘트롤 박스에 활용할 수 있습니다.