질문게시판 > oled 한글 관련 질문

TODAY713 TOTAL2,171,912
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | oled 한글 관련 질문

페이지 정보

작성자 iwonder 작성일2021-10-24 20:39 조회2,103회 댓글2건

본문

	

차량에 충격이 가해지면 차량에 충격이 가해졌을 때의 시간을 rtc모듈로, 그때의 위치를 gps모듈로 블루투스 통신으로 전달 받아 어플로 확인하고 

차량에 전면부에는 lcd디스플레이를 부착하여 차량번호를 입력하고 후방에는 oled를 부착하여 어플에 입력한 메시지 등을 차량에 남길 수 있도록 하는 

앱인벤터로 만든 어플리케이션과 작품을 설계중입니다.

현재 코드를 아래와 같이 작성을 하였고 앱인벤터에서 한글텍스트를 입력하면 후방 oled에 출력할 수 있도록 하는 기능만 남겨놓은 상태입니다.

그런데 앱인벤터에서 한글이 안넘어가는 것인지 oled에서 한글을 인식을 못하는 것인지 잘 이해가 안갑니다.

만약 아두이노 oled에서 한글을 인식을 못하는 것이라면 코드를 어떻게 수정했을 때 입력한 한글값을 이해할 수 있을지 궁금합니다.

현재 oled는 IIC통신을 이용하고 있습니다.

 

 

 

#include <Arduino.h>

#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI

#include <SPI.h>

#endif

 

#ifdef U8X8_HAVE_HW_I2C

#include <Wire.h>

#include <SoftwareSerial.h> 

#include <LiquidCrystal.h>

#include <core_build_options.h>

#include <swRTC.h>

#include <time.h> 

#include<SD.h>

 

#define SHOCK1 26

#define SHOCK2 28

#define SHOCK3 30

#define SHOCK4 31

#endif

 

 

swRTC rtc;

File myFile;

U8G2_SH1106_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

int BT_RXD = 10; // 아두이노측 수신부 RXD는 8번핀(HC-06측 송신부 TXD와 연결)

int BT_TXD = 11; // 아두이노측 송신부 TXD는 7번핀(HC-06측 수신부 RXD와 연결)

SoftwareSerial bluetooth(BT_RXD, BT_TXD);

 

 

 

 

 

 

char a = ""; //gps 코드

String str = "";// gpsd 코드

String targetStr = "GPGGA"; // gps 코드

 

 

 

String readString;

String readString1;

char c;

 

void setup() {

   lcd.begin(16,2);

   bluetooth.begin(9600);

   Serial.begin(9600);

   lcd.clear();

   u8g2.begin();

   u8g2.enableUTF8Print();

   pinMode(SHOCK1, INPUT);

   pinMode(SHOCK2, INPUT);

   pinMode(SHOCK3, INPUT);

   pinMode(SHOCK4, INPUT);

   rtc.stopRTC(); 

   rtc.setTime(20, 27, 0);  //시, 분, 초

   rtc.setDate(16, 10, 2021); //일, 월, 년

   rtc.startRTC();

   Serial3.begin(9600);

 

 

}

 

void loop() {

  u8g2.setFont(u8g2_font_unifont_t_korean1); 

  u8g2.setFontDirection(0);

  u8g2.firstPage();

  int count = 0;

  while(bluetooth.available()){

 

    c = bluetooth.read();

    

    {

      

    readString += c; // 문자인 경우에 더해줌

    if(c != 0x23 || c != 0x24)

  {

    count++;

  }

    if(count > 16)

    {

        if(c>=0x20&&c<=0x7F)

      {

        readString1 += c;

      }

    }

  }

 }

         

  if(readString.length()>0){

 

    if(c>='0'&&c<='9')

    {

    lcd.clear(); 

    lcd.print(readString);

    

    }

    if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))

    {

      

    do 

  {

    if(count < 17)

    {

    u8g2.setCursor(0, 15);

    u8g2.print(readString);

    }

   

    else if(count > 16)

    {

      u8g2.setCursor(0, 15);

      u8g2.print(readString);

      u8g2.setCursor(0, 40);

      u8g2.print(readString1);

    }

    

  } while ( u8g2.nextPage() );

  }

  if(c == 0x24)

  {   

   myFile = SD.open("shock.txt");     

   if (myFile) {

      delay(3);

    while(myFile.available()){

      

    bluetooth.write(myFile.read());

    

     }

    }

  }

   myFile.close();

  if(c == 0x23) {

   SD.remove("shock.txt");

   delay(3);

}

      readString="";

      readString1="";

 

  }

  

   if (!SD.begin(53)) {

    return;

  }

  

    

  

/*  if(Serial2.available())

{

       delay(3);

 

    myFile = SD.open("shock.txt");

    if (myFile) {

      delay(100);

    while(myFile.available()){

      

    Serial2.write(myFile.read());

    

     }

    }

    

        myFile.close();

 

 

 

}

*/

if(Serial3.available()) // gps 센서 통신 가능?

 

    {

      double LatF;

      float LongF;

      a=Serial3.read(); // 센서의 값 읽기

 

      if(a == '\n'){ // \n 값인지 구분.

 

        // \n 일시. 지금까지 저장된 str 값이 targetStr과 맞는지 구분

 

        if(targetStr.equals(str.substring(1, 6))){

 

 

 

          int first = str.indexOf(",");

 

          int two = str.indexOf(",", first+1);

 

          int three = str.indexOf(",", two+1);

 

          int four = str.indexOf(",", three+1);

 

          int five = str.indexOf(",", four+1);

 

          // Lat과 Long 위치에 있는 값들을 index로 추출

 

          String Lat = str.substring(two+1, three);

 

          String Long = str.substring(four+1, five);

 

          // Lat의 앞값과 뒷값을 구분

 

          String Lat1 = Lat.substring(0, 2);

 

          String Lat2 = Lat.substring(2);

 

          // Long의 앞값과 뒷값을 구분

 

          String Long1 = Long.substring(0, 3);

 

          String Long2 = Long.substring(3);

 

          // 좌표 계산.

 

           LatF = Lat1.toDouble() + Lat2.toDouble()/60;

 

           LongF = Long1.toFloat() + Long2.toFloat()/60;

 

          // 좌표 출력.

 

     //     Serial.print("위도 : ");

 

     //    Serial.println(LatF, 15);

 

       //   Serial.print("경도 : ");

 

     //     Serial.println(LongF, 15);

 

        

 

        }

 

        // str 값 초기화 

 

        str = "";

 

      }else{ // \n 아닐시, str에 문자를 계속 더하기

 

        str += a;

 

      }

 

if (digitalRead(SHOCK1) == HIGH) {

            Serial.println("shock1");

    myFile = SD.open("shock.txt",FILE_WRITE);

    if(myFile){

      myFile.print(rtc.getYear(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMonth(),DEC);

      myFile.print("/");

      myFile.print(rtc.getDay(),DEC);

      myFile.print("/");

      myFile.print(rtc.getHours(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMinutes(),DEC);

      myFile.print("/");

      myFile.print(rtc.getSeconds(),DEC);

      myFile.print("/");

      myFile.println("충격감지1");

      myFile.print("위도 : ");

      myFile.println(LatF, 15);

      myFile.print("경도 : ");

      myFile.println(LongF, 15);

      myFile.close();      

      delay(3000);

 

      }

       

    Serial.print(rtc.getYear(),DEC);

    Serial.print("/");

      Serial.print(rtc.getMonth(),DEC);

      Serial.print("/");

      Serial.print(rtc.getDay(),DEC);

      Serial.print("/");

      Serial.print(rtc.getHours(),DEC);

      Serial.print("/");

      Serial.print(rtc.getMinutes(),DEC);

      Serial.print("/");

      Serial.print(rtc.getSeconds(),DEC);

      Serial.print("/");

      Serial.println("충격감지1");

      Serial.print("위도 : ");

      Serial.println(LatF, 15);

      Serial.print("경도 : ");

      Serial.println(LongF, 15);

  }

     else if (digitalRead(SHOCK2) == HIGH) {

            Serial.println("shock2");            

 

    myFile = SD.open("shock.txt",FILE_WRITE);

    if(myFile){

      myFile.print(rtc.getYear(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMonth(),DEC);

      myFile.print("/");

      myFile.print(rtc.getDay(),DEC);

      myFile.print("/");

      myFile.print(rtc.getHours(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMinutes(),DEC);

      myFile.print("/");

      myFile.print(rtc.getSeconds(),DEC);

      myFile.print("/");

      myFile.println("충격감지2");

      myFile.print("위도 : ");

      myFile.println(LatF, 15);

      myFile.print("경도 : ");

      myFile.println(LongF, 15);

      myFile.close();

      delay(3000);

 

      }

      

 

    Serial.print(rtc.getYear(),DEC);

    Serial.print("/");

      Serial.print(rtc.getMonth(),DEC);

      Serial.print("/");

      Serial.print(rtc.getDay(),DEC);

      Serial.print("/");

      Serial.print(rtc.getHours(),DEC);

      Serial.print("/");

      Serial.print(rtc.getMinutes(),DEC);

      Serial.print("/");

      Serial.print(rtc.getSeconds(),DEC);

      Serial.print("/");

      Serial.println("충격감지2");

      Serial.print("위도 : ");

      Serial.println(LatF, 15);

      Serial.print("경도 : ");

      Serial.println(LongF, 15);

  }

      else if (digitalRead(SHOCK3) == HIGH) {

      Serial.println("shock3");

    myFile = SD.open("shock.txt",FILE_WRITE);

    if(myFile){

      myFile.println("");

      myFile.print(rtc.getYear(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMonth(),DEC);

      myFile.print("/");

      myFile.print(rtc.getDay(),DEC);

      myFile.print("/");

      myFile.print(rtc.getHours(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMinutes(),DEC);

      myFile.print("/");

      myFile.print(rtc.getSeconds(),DEC);

      myFile.print("/");

      myFile.println("충격감지3");

      myFile.print("위도 : ");

      myFile.println(LatF, 15);

      myFile.print("경도 : ");

      myFile.println(LongF, 15);

      myFile.close();

      delay(3000);

      }

      

 

    Serial.print(rtc.getYear(),DEC);

    Serial.print("/");

      Serial.print(rtc.getMonth(),DEC);

      Serial.print("/");

      Serial.print(rtc.getDay(),DEC);

      Serial.print("/");

      Serial.print(rtc.getHours(),DEC);

      Serial.print("/");

      Serial.print(rtc.getMinutes(),DEC);

      Serial.print("/");

      Serial.print(rtc.getSeconds(),DEC);

      Serial.print("/");

      Serial.println("충격감지3");

      Serial.print("위도 : ");

      Serial.println(LatF, 15);

      Serial.print("경도 : ");

      Serial.println(LongF, 15);

  }

     else if (digitalRead(SHOCK4) == HIGH) {

            Serial.println("shock4");

    myFile = SD.open("shock.txt",FILE_WRITE);

    if(myFile){

      

      myFile.print(rtc.getYear(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMonth(),DEC);

      myFile.print("/");

      myFile.print(rtc.getDay(),DEC);

      myFile.print("/");

      myFile.print(rtc.getHours(),DEC);

      myFile.print("/");

      myFile.print(rtc.getMinutes(),DEC);

      myFile.print("/");

      myFile.print(rtc.getSeconds(),DEC);

      myFile.print("/");

      myFile.println("충격감지4");

      myFile.print("위도 : ");

      myFile.println(LatF, 15);

      myFile.print("경도 : ");

      myFile.println(LongF, 15);

      myFile.close();

      delay(3000);

 

      }

      

    Serial.print(rtc.getYear(),DEC);

    Serial.print("/");

      Serial.print(rtc.getMonth(),DEC);

      Serial.print("/");

      Serial.print(rtc.getDay(),DEC);

      Serial.print("/");

      Serial.print(rtc.getHours(),DEC);

      Serial.print("/");

      Serial.print(rtc.getMinutes(),DEC);

      Serial.print("/");

      Serial.print(rtc.getSeconds(),DEC);

      Serial.print("/");

      Serial.println("충격감지4");

      Serial.print("위도 : ");

      Serial.println(LatF, 15);

      Serial.print("경도 : ");

      Serial.println(LongF, 15);

  }

    }

 

 

  

}.

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 2

조회수 2,103

iwonder님의 댓글

iwonder 작성일

하나만 더 질문 하겠습니다. 이 코드에서 충격이 왔을때의 gps값을 어플로 디스플레이하려고 하는데 gps만 따로 회로에서 떼어내서 측정을 했을때는 문제가 없는데 gps를 회로에 합쳐서 동작했을때는 일정한 값만 뜹니다.
ex )위도 : 2398789.000000
    경도 : 0.0000000
 gps는 계속 신호를 보내는데 충격이 왔을때 의 gps값만 따려고 해서 문제가 발생한 것일까요??
문제의 원인을 알고 싶습니다.

master님의 댓글

master 작성일

https://www.google.com/search?q=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8+OLED+%ED%95%9C%EA%B8%80&oq=%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8+OLED+%ED%95%9C%EA%B8%80&aqs=chrome..69i57j0i8i30.5488j0j7&sourceid=chrome&ie=UTF-8
한글 예제로 먼저 공부하시고요

GPS값을 읽지 못하면 연속해서 2번 읽어서 2번째 값도 문제가 있는지 체크 해보세요

질문게시판HOME > 질문게시판 목록

MCU, AVR, 아두이노 등 전자공학에 관련된 질문을 무료회원가입 후 작성해주시면 전문가가 답변해드립니다.
ATMEGA128PWMLED초음파
아두이노AVR블루투스LCD
UART모터적외선ATMEGA
전체 스위치 센서
질문게시판 목록
제목 작성자 작성일 조회
질문 atmega128에서 스위치1개는LED, 스위치 1개는 세그먼트의 동작하게 하려는데.. 새글 aasdw 06:28 20
질문 ATMEGA128 0번핀과1번핀 스위치를 누르면 LED점등 속도 제어댓글[3] dfas123 22-05-11 204
질문 Atmega128 led 왕복 점등 및 스위치 방향 전환댓글[1] MaeuM 22-05-06 354
질문 LED 점등 예제 질문입니다.댓글[4] 이미지첨부파일 홍머생 22-05-01 244
질문 Atmega128 led 점등 Eleccc 22-05-01 291
답변 답변글 답변 : Atmega128 led 점등댓글[8] master 22-05-01 392
질문 (ATmega128 LED점등)이 부분이 왜 오류가 뜨는건가요?댓글[3] 이미지첨부파일 isdpolicy 22-04-29 291
질문 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다.댓글[3] Mobile 22-04-21 389
질문 마이크로 스위치 입력하면 LED출력댓글[1] 이미지 두두칠리 22-04-18 239
질문 AVR, atmega128에서 led 점등 코드댓글[5] 제발도와주세요 22-04-14 574
질문 Led 점등시키기댓글[1] 하이용 22-04-12 395
질문 마이크로프로세서 실습키트LED 점등시키기댓글[1] 하이용 22-04-12 337
질문 Avr atmega128 led 제어 질문드리겠습니다 임연수구이 22-04-04 494
답변 답변글 답변 : Avr atmega128 led 제어 질문드리겠습니다댓글[1] master 22-04-04 423
질문 아두이노 LED 실행코드댓글[5] PEANUTS 22-04-04 721
질문 가변저항 값으로 4개의 LED 밝기를 조절하기댓글[3] 웰치스 22-04-03 492
질문 아두이노 8x8 led로 가위바위보 게임하기댓글[3] jsham21 22-04-02 335
질문 아두이노 조이스틱를 이용한 rgb led 표현 + rgb 출력값 읽어오기댓글[5] 나Ks 22-03-25 670
질문 아두이노 led 시간제어질문이요!!...ㅠ댓글[1] dd1304 21-12-18 1388
질문 atmega128 초음파센서(HC-SR04)를 이용한 LED 제어 질문있습니다.댓글[2] 호2 21-12-04 1715
질문 토글스위치와 블루투스를 동시에 이용하여 led한개를 제어하는 방법 질문댓글[3] 첨부파일 화일 21-12-03 1346
질문 안녕하세요 아트메가128 LED 질문입니다!댓글[2] 이미지첨부파일 아트메가공부중 21-11-28 1380
질문 atmega 128 을 이용한 LED댓글[1] 초보오 21-11-22 1307
질문 artmega128 초음파 센서로 LED 점등하기댓글[1] 이미지첨부파일 maximum 21-11-22 1363
질문 atmega128 스위치를 이용한 LED패턴 점등댓글[2] wondeeli 21-11-19 2247
질문 Atmega128 인터럽트 이용한 LED 질문 드립니다.댓글[5] 호2 21-11-19 3318
질문 아두이노 조도센서, LED, 피에조 부저, 서보모터 회로도와 코드 질문드립니다.댓글[3] 이미지첨부파일 얼짱생쥐 21-11-19 2675
질문 atmega128 초음파센서로 거리측정 하여 led 제어댓글[1] 아두이장인 21-11-11 2477
질문 아두이노 OLED 6핀 SPI 됐다 안됐다하네요댓글[4] Rider 21-11-08 2639
질문 ATMEGA128 블루투스 시리얼 통신 LED점멸 qorgh215 21-11-07 1771
게시물 검색

2022년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2021년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2020년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2019년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
2018년 1월 2월 3월 4월 5월 6월 7월 8월 9월 10월 11월 12월
Privacy Policy
MCU BASIC ⓒ 2020
모바일버전으로보기