I2C 1602 LCD Module
I2C 1602 LCD 모듈은 2x16 character 디스플레이이다.
스펙 :
Address Range : 0x20 ~ 0x27 (Default=0x27)
Operator Voltage : 5 Vdc
아두이노 IDE
2x16 모두 사용하니 주소를 0x27로 설정하자. 한 가지 주의할 점은 lcd 출력은 SBCS에 해당하는 값만 가능하다. 물론 비트맵을 직접 구성하거나, 값을 넘길 때 2바이트 단위로 직접 인코딩해주면 한글도 가능하긴 하다. (어렵고 귀찮아서 그렇지..)
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
// put your setup code here, to run once:
Serial.begin(115200);
lcd.init(); // initalize the lcd
lcd.backlight();
}
String read_serial()
{
String str = "";
while (Serial.available())
{
str = Serial.readString();
delay(10);
}
return str;
}
void loop()
{
// lcd 출력 데이터 입력받기
String str = read_serial(), str_2;
// 16 글자 이상인 경우 다음 줄에 이어서 출력
if (str.length() >= 16)
{
str_2 = str.substring(16);
}
// lcd 출력
if (str == "1")
{
lcd.clear();
}
else
{
lcd.setCursor(0, 0);
lcd.print(str);
lcd.setCursor(0, 1);
lcd.print(str_2);
}
}
※ 시리얼 통신으로 데이터 입력받을 때, string버퍼가 아닌 char버퍼로 받아 string으로 구성하는 방식을 이용하면 좀 더 빠르게 작동한다.
while( Serial.available())
{
char ch = Serial.read();
str.concat(ch);
delay(10);
}
파이썬
import serial
# 'COM3' 부분에 환경에 맞는 포트 입력
ser = serial.Serial('COM3', 115200)
while True:
if ser.readable():
input_str = input() # 최대 32 문자
size = len(input_str)
if 0 <= size <= 32:
# data 전송
input_str = input_str.encode('utf-8')
ser.write(input_str)
else:
print("32 글자 초과, 재입력 바랍니다.")
'임베디드 > 아두이노' 카테고리의 다른 글
[아두이노] 파이썬으로 제어하기 (7) | 2021.02.11 |
---|