정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

LCD IIC 모델 한글 출력 관련하여 문의드립니다.
hojok | 2018-05-10

1. 프로젝트 사용한 보드 종류

  아두이노 UNO

 

 

2. 사용한 개발 프로그램명

  아두이노 IDE

 

 

3. 사용한 센서 모델명

  LCD IIC

 

4. 연결한 회로 설명 (또는 이미지)

 회로는 문제가 없어 따로 올리지 않겠습니다.

 

5. 소스코드 (주석 필수)

부득이하게 전체 코드 올린점 죄송합니다.

딴 건 다 제쳐두고 코코아팹에서 공부했던 내용대로 LCD에 한글을 출력하려합니다

LCD IIC가 아닌 그냥 LCD에는 문제없이 한글이 출력되는데

LCD IIC를 사용하니 한글이 ㄷ을 위아래로 붙힌 모양으로 출력이 되더라구요

코코아팹에서 알려준 내용으로는 LCD IIC에 적용할 수 없는것인지 문의드리려합니다.

만약 없다면 어떻게 한글을 출력할 수 있는지 방법도 알려주시면 감사하겠습니다.

(아래 소스에서 옆에 //****을 붙힌것만 확인해주셔도 됩니다.주석은 코코아팹에서 배운 그대로 코드를 사용하였기에

따로 달지는 않겠습니다.)

#include <Wire.h>
#include <LiquidCrystal_I2C.h> //****
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); //****
#include <DHT11.h>
#include <MsTimer2.h>
const int pin = 2;
const int water_level_pin = A0;
DHT11 dht11(pin);
const byte interruptPin = 3;
volatile unsigned char flag;
volatile unsigned char flag_two;
volatile unsigned char value;
volatile unsigned char start;
volatile unsigned char sensor_start;
volatile unsigned char sensor_flag;
volatile int water_level_value;
byte specialchar1[8] = //습 //****
{
  B00100,
  B01010,
  B11111,
  B00000,
  B01010,
  B01110,
  B01010,
  B01110
};
byte specialchar2[8] = //도 //****
{
  B00000,
  B01110,
  B01000,
  B01110,
  B00100,
  B00100,
  B11111,
  B00000
};
byte specialchar3[8] = //온 //****
{
  B00100,
  B01010,
  B00100,
  B00100,
  B11111,
  B01000,
  B01000,
  B01110
};
byte specialchar4[8] = // : //****
{
  B00000,
  B00100,
  B00100,
  B00000,
  B00000,
  B00100,
  B00100,
  B00000
};
byte specialchar5[8] = // 가 //****
{
  B00000,
  B00010,
  B11110,
  B00111,
  B01010,
  B10010,
  B00010,
  B00000
};
byte specialchar6[8] = // 기 //****
{
  B00000,
  B00001,
  B11101,
  B00101,
  B01001,
  B10001,
  B00001,
  B00000
};
void setup() {
  Serial.begin(9600);
  lcd.createChar(0, specialchar1); //****
  lcd.createChar(1, specialchar2); //****
  lcd.createChar(2, specialchar3); //****
  lcd.createChar(3, specialchar4); //****
  lcd.createChar(4, specialchar5); //****
  lcd.createChar(5, specialchar6); //****
  lcd.begin(16, 2); //****
  pinMode(8, OUTPUT);
  pinMode(interruptPin, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(interruptPin), sw, FALLING);
  MsTimer2::set(1000, water);
  MsTimer2::start();
}
void on()
{
  value = digitalRead(8);
  if(value == LOW)
    digitalWrite(8, HIGH);
  else if(value == 1) {}
}
void off()
{
  value = digitalRead(8);
  if(value == HIGH)
  {
    digitalWrite(8, LOW);
    delay(50);
    digitalWrite(8, HIGH);
    delay(50);
    digitalWrite(8, LOW);
  }
  else if(value == 0) {}
}
void sw()
{
  if(start == 0)
    start = 1;
  else if(start == 1)
    start = 0;
}
void water()
{
  if(sensor_start == 0)
    sensor_start = 1;
  else if(sensor_start == 1)
  {
    sensor_start = 0;
    sensor_flag = 0;
  }
  water_level_value = analogRead(water_level_pin);
}

void loop() {
  int err;
  float temp, humi;
  if((sensor_start == 0) && (sensor_flag == 0))
  {
    sensor_flag = 1;
    if((err=dht11.read(humi, temp))==0)
    {
     lcd.setCursor(0, 0); //****
     lcd.write(byte(2)); //****
     lcd.setCursor(1, 0); //****
     lcd.write(byte(1)); //****
     lcd.setCursor(2, 0); //****
     lcd.write(byte(3)); //****
     lcd.setCursor(3, 0); //****
     lcd.print((short) temp); //****
     lcd.setCursor(0, 1); //****
     lcd.write(byte(0)); //****
     lcd.setCursor(1, 1); //****
     lcd.write(byte(1)); //****
     lcd.setCursor(2, 1); //****
     lcd.write(byte(3)); //****
     lcd.setCursor(3, 1); //****
     lcd.print((short) humi); //****
    }
    else
    {
     Serial.println();
     Serial.print("Error No :"); 
     Serial.print(err);
     Serial.println();   
    }
  }
  else{}
  if((start == 1) && (water_level_value > 200))
  {
    if((humi > 70) && (humi < 85) && (flag_two == 0))
    {
      flag = 1;
      flag_two = 1;
      on();
      lcd.setCursor(7, 1); //****
      lcd.write(byte(4)); //****
      lcd.setCursor(8, 1); //****
      lcd.write(byte(0)); //****
      lcd.setCursor(9, 1); //****
      lcd.write(byte(5)); //****
      lcd.setCursor(11, 1); //****
      lcd.print("ON "); //****
    }
    else if((humi <= 70) && (flag == 0))
    {
     on();
     flag = 1;
     flag_two = 1;
     lcd.setCursor(7, 1); //****
     lcd.write(byte(4)); //****
     lcd.setCursor(8, 1); //****
     lcd.write(byte(0)); //****
     lcd.setCursor(9, 1); //****
     lcd.write(byte(5)); //****
     lcd.setCursor(11, 1); //****
     lcd.print("ON "); //****
    }
    else if((humi >= 85) && (flag == 1))
    {
     off();
     flag = 0;
     lcd.setCursor(7, 1); //****
     lcd.write(byte(4)); //****
     lcd.setCursor(8, 1); //****
     lcd.write(byte(0)); //****
     lcd.setCursor(9, 1); //****
     lcd.write(byte(5)); //****
     lcd.setCursor(11, 1); //****
     lcd.print("OFF"); //****
    }
  }
  else if((start == 0) || (water_level_value <= 100))
  {
    off();
    flag = 0;
    flag_two = 0;
    lcd.setCursor(7, 1); //****
    lcd.write(byte(4)); //****
    lcd.setCursor(8, 1); //****
    lcd.write(byte(0)); //****
    lcd.setCursor(9, 1); //****
    lcd.write(byte(5)); //****
    lcd.setCursor(11, 1); //****
    lcd.print("OFF"); //****
  }
  if(water_level_value <= 100)
  {
    start = 0;
  }
}

이전글   |    아두이노 릴레이 동작 오류 2018-05-10
다음글   |    오렌지보드BLE를 스마트폰과 페어링되는것만으로 wakeup 시킬수 있을까요?... 2018-05-11