BASIC4MCU | 질문게시판 | 앱인벤터 아두이노 보드 LCD 글씨 나타내기 질문
페이지 정보
작성자 당찬병아리 작성일2023-05-29 01:31 조회23,857회 댓글7건본문
안녕하세요 앱인벤터로 어플을 만들고 여기에 원하는 영어를 쓰면 LCD에 나타나게 하도록 만드려고 하는데 어디가 잘못된건지 잘 모르겠어요ㅠ
아직 배우는 단계라 어느부분이 잘못된건지 아신다면 댓글 부탁드려요...
지금 문제가 되는 부분이 제 핸드폰으로 원하는 문구를 쳤을때 LCD에 아무것도 나타나지 않는거에요ㅜㅜ
혹시나 해서 시리얼 모니터에 원하는 문구를 쳤더니 LCD에 나오더라구요
핸드폰이랑 LCD 연결이 제대로 안된건가요..? 코딩이 잘못된건가요
----------------------
#include
int rxPin=2;
int txPin=3;
SoftwareSerial BTSerial(rxPin, txPin);
#include
#define LCD_I2C_ADDR 0x27 //0x3F
LiquidCrystal_I2C lcd(LCD_I2C_ADDR, 16, 2);
String readString;
int ledPin = 13;
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop(){
if(BTSerial.available()){
char c = BTSerial.read();
}
while(Serial.available()){
delay(3);
char c = Serial.read();
readString += c;
}
if(readString.length()>0){
lcd.clear();
Serial.println(readString);
lcd.print(readString);
if(readString == "On"){
digitalWrite(ledPin,HIGH);
}
if(readString =="Off"){
digitalWrite(ledPin,LOW);
}
readString="";
}
}
댓글 7
조회수 23,857master님의 댓글
master 작성일
void loop(){
if(BTSerial.available()){ char c = BTSerial.read(); }
while(Serial.available()){ delay(3); char c = Serial.read(); readString += c; }
BT에서 수신했을 때 readString에 저장해야 하는데( loop()함수 첫번째 라인)
시리얼모니터 수신했을 때 저장하고 있습니다.( loop()함수 두번째 라인)
master님의 댓글
master 작성일
void loop(){
if(BTSerial.available()){
char c = BTSerial.read(); Serial.write(c);
if(c=='0')digitalWrite(ledPin,0);
if(c=='1')digitalWrite(ledPin,1);
lcd.clear(); lcd.write(c);
}
if(Serial.available()){
char c = Serial.read();
BTSerial.write(c);
}
}
1문자를 전송하도록 하면 수신이 더 간단합니다.
당찬병아리님의 댓글
당찬병아리 작성일
답변 정말 감사합니다. 기존 void loop 이하를 다 지우고 master님께서 답변해주신거를 적어서 동작시켰는데 핸드폰으로 타자 친게 LCD에 표시되었어요 그런데 문장이 아니라 딱 한글자만 나타나네요ㅠㅠ 여러 단어를 써도 딱 마지막 한 글자만 나타나요... 문장으로는 못하나요??
#include <SoftwareSerial.h>
int rxPin=2;
int txPin=3;
SoftwareSerial BTSerial(rxPin, txPin);
#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDR 0x27 //0x3F
LiquidCrystal_I2C lcd(LCD_I2C_ADDR, 16, 2);
String readString;
int ledPin = 13;
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
lcd.init();
lcd.backlight();
}
void loop(){
if(BTSerial.available()){
char c = BTSerial.read(); Serial.write(c);
if(c=='0')digitalWrite(ledPin,0);
if(c=='1')digitalWrite(ledPin,1);
lcd.clear(); lcd.write(c);
}
if(Serial.available()){
char c = Serial.read();
BTSerial.write(c);
}
}
master님의 댓글
master 작성일한 문자로 제어하는데 문장이 필요있나요?
master님의 댓글
master 작성일
#include <SoftwareSerial.h>
int rxPin=2,txPin=3;
SoftwareSerial BTSerial(rxPin,txPin);
//
#include <LiquidCrystal_I2C.h>
#define LCD_I2C_ADDR 0x27 //0x3F
LiquidCrystal_I2C lcd(LCD_I2C_ADDR,16,2);
//
int ledPin=13;
//
String readString;
char flag=0;
//
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
lcd.init(); lcd.backlight();
}
//
void loop(){
if(BTSerial.available()){
char c=BTSerial.read(); Serial.write(c);
if(c=='\n'){ lcd.setCursor(0,0);
flag=1;
}
else{
if(flag){ flag=0; lcd.clear(); }
if(c=='0'){ digitalWrite(ledPin,0); }
if(c=='1'){ digitalWrite(ledPin,1); }
lcd.write(c);
}
}
if(Serial.available()){
char c=Serial.read();
BTSerial.write(c);
}
}
계속 표시하다가 '\n'를 만나면 커서포지션을 0로 바꿉니다.
당찬병아리님의 댓글
당찬병아리 작성일알려주셔서 정말 감사합니다. 문장은 정말 잘 써집니다. 그런데 제가 쓴 문장이 리셋이 안되네요ㅠㅠ 만약 hello라고 쓴 뒤에 엔터치고 다시 arduino라고 쓰면 이전 문장이 지워지지 않고 hello arduino 라고 써져요 리셋 시키는 거 계속 찾아보고 적용시키는데 안되네요ㅠㅠ 계속 질문해서 죄송합니다....ㅠㅠㅠ
master님의 댓글
master 작성일
// if(c=='\n'){ lcd.setCursor(0,0);
if(c=='\r'){ lcd.setCursor(0,0);
아래 문장처럼 수정해보세요