BASIC4MCU | 질문게시판 | 앱인벤터와 아두이노 블루투스 통신을 이용한 lcd에 원하는 숫자 출력
페이지 정보
작성자 iwonder 작성일2021-10-16 16:18 조회11,160회 댓글6건본문
#include <Wire.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(4,6,10,11,12,13);
int BT_RXD = 8; // 아두이노측 수신부 RXD는 8번핀(HC-06측 송신부 TXD와 연결)
int BT_TXD = 7; // 아두이노측 송신부 TXD는 7번핀(HC-06측 수신부 RXD와 연결)
SoftwareSerial bluetooth(BT_RXD, BT_TXD);
String readString;
void setup() {
lcd.begin(16,2);
bluetooth.begin(9600);
Serial.begin(9600);
lcd.clear();
}
void loop() {
while(bluetooth.available())
{
delay(3);
char c = bluetooth.read();
readString += c;
}
if(readString.length() >0){
lcd.clear();
bluetooth.println(readString);
lcd.print(readString);
readString="";
}
}
앱인벤터와 아두이노 블루투스 통신을 이용해 lcd에 원하는 텍스트를 출력하는 문제를 해결하려고 하고 있습니다.
현재 아두이노 코드는 위와 같고
사진과 같이 휴대폰 어플에 입력한 숫자가 잠깐 뜬 후 두번째 사진처럼 엑박이 뜨게 됩니다.
엑박이 뜨는 문제를 해결해서 어플에 적은 텍스트(저희는 숫자만 사용할 예정 영어, 한글 사용x)가 온전히 뜨게할 수 있는 방법이 무엇이있을까요?
아두이노 코드에서 문제가 있으면 지적 후 조언 부탁드립니다.
댓글 6
조회수 11,160master님의 댓글
master 작성일
문자열이란 문자열의 마지막에 0x00 이 있어야 합니다.
널문자라고도 부르죠
만약 널문자가 없다면 어떻게 될까요?
0x00을 만날 때까지 계속해서 출력을 하게 됩니다.
master님의 댓글
master 작성일
void loop() {
while(bluetooth.available()){
delay(3);
char c=bluetooth.read();
if(c>=0x20&&c<=0x7F)readString+=c; // 문자인 경우에 더해줌
}
//
if(readString.length()>0){
readString+=0; // 널문자를 추가함
bluetooth.println(readString);
lcd.clear(); lcd.print(readString);
readString="";
}
}
loop() 함수를 위처럼 변경해서 돌려보세요
iwonder님의 댓글
iwonder
답변 정말 감사합니다. 널문자는 더이상 나타나지 않습니다. 근데 1234를 입력하면 12340이 출력됩니다.
뒤에 0이 붙어서 나오는데 이건 어떤거 때문에 그런걸까요??
master님의 댓글
master
void loop() {
while(bluetooth.available()){
delay(3);
char c=bluetooth.read();
if(c>=0x20&&c<=0x7F)readString+=c; // 문자인 경우에 더해줌
}
//
if(readString.length()>0){
bluetooth.println(readString);
lcd.clear(); lcd.print(readString);
readString="";
}
}
이 코드로 다시 돌려보세요
char c=bluetooth.read();
소프트웨어 시리얼 경우 수신이 없는데도 읽는 경우가 발생한다면 0xFF를 읽게 됩니다.
master님의 댓글
master 작성일
음,,,
1234를 전송할 때
LF, CR 같은 문자(즉, 0x0D, 0x0A와 같은 값)를 1234 뒤에 붙여서 전송한다면
LF나 CR을 읽어들여서 출력하게 되므로 문제가 발생할 수 있습니다.
iwonder님의 댓글
iwonder
감사합니다!!