====== CHARACTER LCD 사용설명서 ====== CHARACTER LCD는 글자와 숫자를 줄 단위로 보여 주는 표시 장치입니다. 이 안내는 **PCF8574 I²C 변환 모듈이 연결된 HD44780 호환 문자 LCD**를 ILOGICS 산업용 아두이노의 내장 ''Iclcd...()'' 명령어로 사용하는 방법입니다. 별도의 ''ILIB.h'', ''CLCD.h'', ''Wire.h''나 LCD 객체를 스케치에 추가할 필요가 없습니다. 아래 순서대로 연결을 확인하고, 실제 LCD의 **I²C 주소와 열·행 수**를 입력한 뒤 예제를 업로드해주시기 바랍니다. 주소 ''0x27''과 크기 ''20 × 4''는 이 페이지의 예제값이며 모든 LCD의 공통값이 아닙니다. **16 × 4 LCD는 현재 내장 명령어의 3·4행 위치 계산과 맞지 않으므로 이 안내의 사용 대상에서 제외합니다.** ===== 1. 준비와 연결 ===== - [[guide:getting_started|Arduino IDE로 시작하기]]에 따라 ILOGICS Arduino SDK를 설치하고, 사용하는 제품과 같은 보드 및 포트를 선택해주시기 바랍니다. - **전원을 끈 상태에서** 제품의 I²C 단자와 LCD 변환 모듈을 연결해주시기 바랍니다. 단자의 실제 위치와 전원 출력 사양은 사용하는 [[products:mpino_series|MPINO]] 또는 [[products:mpaino|MPAINO]] 제품 설명에서 확인해주시기 바랍니다. ^ LCD 변환 모듈에 표시된 신호 ^ 제품 I²C 단자 ^ 확인할 점 ^ | ''SDA'' | ''SDA'' | 데이터 신호끼리 연결해주시기 바랍니다. | | ''SCL'' | ''SCL'' | 클록 신호끼리 연결해주시기 바랍니다. | | ''VCC'' 또는 ''+5V'' | ''+5V'' | **LCD 변환 모듈이 5 V 전원형인 경우에만** 연결해야 합니다. 사용하는 제품의 +5V 단자와 모듈의 전원 사양을 먼저 확인해주시기 바랍니다. | | ''GND'' | ''GND'' | 양쪽의 접지를 연결해주시기 바랍니다. | 아래 그림은 **MPAINO CPU 모듈의 I²C 결선 그림**에서 LCD 연결에 필요한 부분만 확대해 보여 줍니다. 그림과 단자 정보의 출처는 [[products:mpaino_16a16r|MPAINO-16A16R 제품 설명]]과 해당 제품 사용설명서의 캐릭터 LCD 연결 절입니다. {{ :guide:character_lcd:mpaino-i2c-connection.svg?500 |MPAINO CPU 모듈 I²C 단자와 기기의 SDA·SCL·+5V·GND를 같은 이름끼리 연결하는 그림 }} MPAINO CPU 모듈의 ''SDA''는 ''D20'', ''SCL''은 ''D21''입니다. **MPINO의 숫자 핀 번호는 모델에 따라 다르므로** 이 값을 MPINO에 적용해서는 안 됩니다. 실제 제품의 ''SDA''·''SCL'' 단자와 제품 설명을 따라주시기 바랍니다. I²C를 사용하는 동안 같은 ''SDA''·''SCL''을 외부 인터럽트 또는 엔코더 입력으로 동시에 사용해서는 안 됩니다. ===== 2. 내장 명령어 ===== ''IclcdBegin(address, columns, rows)''로 LCD를 초기화한 뒤 출력 명령어를 사용합니다. ''address''는 LCD 변환 모듈의 **7비트 I²C 주소**, ''columns''는 한 줄의 글자 수, ''rows''는 줄 수입니다. **인수의 허용 범위**는 열 ''1~40'', 행 ''1~4''입니다. 이 범위가 모든 LCD 크기의 실제 행 주소를 지원한다는 뜻은 아닙니다. 현재 코어의 3·4행 시작 주소는 ''0x14''·''0x54''로 고정되어 있어 **16 × 4 LCD의 3·4행에는 맞지 않습니다.** 주소·크기·장치 번호가 잘못되거나 필요한 I²C 전송에서 응답이 없으면 ''false''를 반환합니다. 모든 명령어는 성공 여부를 ''bool'' 값으로 반환합니다. LCD를 최대 4개까지 구분할 때는 장치 번호 ''device''에 ''0~3''을 사용합니다. 생략하면 ''0''이며, 각 장치는 먼저 서로 다른 주소로 ''IclcdBegin(address, columns, rows, backlight, device)''를 호출해야 합니다. ''backlight''의 기본값은 ''true''입니다. ^ 명령어 ^ 하는 일 ^ | [[commands:reference:iclcdbegin|IclcdBegin(address, columns, rows, backlight, device)]] | LCD 주소·크기·초기 백라이트 상태를 설정하고 연결 응답을 확인합니다. | | [[commands:reference:iclcdsetcursor|IclcdSetCursor(column, row, device)]] | 다음 글자를 쓸 위치를 지정합니다. 열과 행은 **0부터** 시작하며, 설정한 화면 범위를 벗어나면 ''false''입니다. | | [[commands:reference:iclcdprint|IclcdPrint(value, ...)]] | 문자열·문자·정수·실수를 출력합니다. 예: ''IclcdPrint(F("RUN"))'', ''IclcdPrint(12.34, 2)''. | | [[commands:reference:iclcdclear|IclcdClear(device)]] · [[commands:reference:iclcdhome|IclcdHome(device)]] | 화면을 지우고 처음으로 이동하거나, 글자를 유지한 채 커서만 처음으로 이동합니다. | | [[commands:reference:iclcdbacklight|IclcdBacklight(on, device)]] · [[commands:reference:iclcddisplay|IclcdDisplay(on, device)]] | 각각 백라이트와 화면 표시를 켜거나 끕니다. | | [[commands:reference:iclcdcursor|IclcdCursor(on, device)]] · [[commands:reference:iclcdblink|IclcdBlink(on, device)]] | 밑줄 커서와 깜박이는 커서를 제어합니다. | | [[commands:reference:iclcdscrollleft|IclcdScrollLeft(device)]] · [[commands:reference:iclcdscrollright|IclcdScrollRight(device)]] | 표시 화면을 한 칸 왼쪽 또는 오른쪽으로 이동합니다. | | [[commands:reference:iclcdtextdirection|IclcdTextDirection(leftToRight, device)]] · [[commands:reference:iclcdautoscroll|IclcdAutoscroll(on, device)]] | 글자 입력 방향과 입력할 때의 자동 화면 이동을 설정합니다. | | [[commands:reference:iclcdcreatechar|IclcdCreateChar(location, charmap, device)]] · [[commands:reference:iclcdwrite|IclcdWrite(value, device)]] | ''0~7'' 위치에 8바이트 사용자 문자를 등록하고 문자 코드 한 바이트를 출력합니다. | | [[commands:reference:iclcdcommand|IclcdCommand(command, device)]] | HD44780 명령 바이트를 직접 전송하는 고급 기능입니다. | ''IclcdPrint()''에서 문자열의 두 번째 인수는 장치 번호입니다. 정수의 두 번째 인수는 진법(''BIN'', ''OCT'', ''DEC'', ''HEX'' 또는 ''2~36''), 실수의 두 번째 인수는 소수점 아래 자릿수(''0~10'')이며, 이 두 형태의 장치 번호는 **세 번째 인수**입니다. 예를 들어 ''IclcdPrint("SUB", 1)''은 장치 1에 문자열을 쓰고, ''IclcdPrint(255, HEX, 1)''은 장치 1에 ''FF''를 씁니다. ===== 3. 사용 예: 첫째 줄과 둘째 줄에 글자 표시 ===== 다음은 **I²C 주소가 ''0x27''이고 20열 × 4행인 LCD**의 예제입니다. 실제 LCD 주소가 다르면 ''0x27''을 확인한 주소로 바꿔주시기 바랍니다. 다른 화면 크기를 사용할 때는 위의 행 주소 제한과 LCD 자료를 먼저 확인한 뒤 열·행 값을 바꿔주시기 바랍니다. **16 × 4 LCD에는 이 예제를 적용하지 않습니다.** Arduino IDE의 **파일 → 새 스케치**에 전체 코드를 붙여 넣고 저장한 후, **검증(✓)**과 **업로드(→)**를 차례대로 눌러주시기 바랍니다. void setup() { Serial.begin(115200); // 실제 LCD 변환 모듈의 I²C 주소, 열 수, 행 수로 바꾸세요. if (!IclcdBegin(0x27, 20, 4)) { // LCD를 초기화하고 I²C 응답을 확인합니다. Serial.println(F("LCD connection failed")); return; } IclcdSetCursor(0, 0); // 첫째 줄의 첫 번째 칸으로 이동합니다. IclcdPrint(F("ILOGICS")); // 첫째 줄에 글자를 씁니다. IclcdSetCursor(0, 1); // 둘째 줄의 첫 번째 칸으로 이동합니다. IclcdPrint(F("LCD READY")); // 둘째 줄에 글자를 씁니다. } void loop() { } 업로드 후 첫째 줄에 ''ILOGICS'', 둘째 줄에 ''LCD READY''가 보이는지 확인해주시기 바랍니다. 보이지 않으면 Arduino IDE **시리얼 모니터를 115200 bps**로 열어 ''LCD connection failed''가 출력되는지 확인해주시기 바랍니다. 이 메시지는 주소·배선·전원 또는 I²C 응답을 확인해야 한다는 뜻입니다. ''IclcdBegin()''의 ''true''는 I²C 전송이 응답했다는 뜻이며, 글자가 실제 화면에 보이는 것까지 검사하지는 않습니다. ===== 4. 동작하지 않을 때 ===== ^ 증상 ^ 확인 순서 ^ | 검증 시 ''IclcdBegin''을 찾을 수 없음 | ILOGICS Arduino SDK 설치 여부와 Arduino IDE에서 실제 제품에 맞는 ILOGICS 보드를 선택했는지 확인해주시기 바랍니다. 별도 LCD 라이브러리는 이 예제에 필요하지 않습니다. | | 시리얼 모니터에 ''LCD connection failed'' 표시 | 전원을 끄고 ''SDA''·''SCL''·''+5V''·''GND'' 연결과 LCD 모듈의 전원 사양을 다시 확인해주시기 바랍니다. ''0x27''은 예제 주소이므로 실제 모듈 주소를 확인해 수정해주시기 바랍니다. | | 초기화 오류 메시지는 없으나 글자가 보이지 않음 | LCD의 대비 조절부, 백라이트 상태, 실제 열·행 수를 확인해주시기 바랍니다. PCF8574 변환 모듈의 LCD 측 연결이 이 명령어의 매핑과 같은지도 확인해주시기 바랍니다. | | ''IclcdSetCursor()'' 등이 ''false'' 반환 | 해당 장치의 ''IclcdBegin()''이 성공했는지, ''device''가 ''0~3''인지, 커서의 열·행이 설정한 화면 범위 안인지 확인해주시기 바랍니다. | | 다른 I²C 기기와 함께 사용할 때 오류 | 주소 중복을 확인해주시기 바랍니다. 또한 ''Iclcd...()''가 실행되는 동안 다른 ''Wire'' 전송이나 I²C 슬레이브 콜백을 동시에 실행해서는 안 됩니다. | 이 명령어는 PCF8574의 **P0=RS, P1=R/W, P2=Enable, P3=백라이트, P4~P7=LCD D4~D7** 연결을 사용합니다. 변환 모듈의 매핑이 다르면 I²C 주소가 맞더라도 정상 출력되지 않을 수 있습니다. ''IclcdCommand()''는 화면 상태를 직접 바꾸므로 HD44780 명령을 알고 있을 때만 사용해야 합니다. 자세한 함수별 인수와 예제는 위 명령어 이름을 눌러 확인할 수 있습니다. 제품 단자와 전원 사양은 사용하는 [[products:mpino_series|MPINO]] 또는 [[products:mpaino|MPAINO]] 제품 설명을 우선합니다.