BASIC4MCU | 질문게시판 | TFT LCD 이상이 있습니다
페이지 정보
작성자 플립플롭 작성일2022-06-10 05:28 조회16,126회 댓글5건본문
안녕하세요 TFT 디스플레이 업로드 하고나면 처음 1~2초정도는 작동이 되는데 그이후부터가 숫자변동이 있을떄마다
중첩?꺠짐 현상이 있어서 문의를 드립니다 이러한 경우는 어떤접근으로 봐야 하나요?
숫자폰트에 문제가 있거나 코딩에 문제가 있어서 그런지 여쭤봅니다
//---------------------------------------------------------------------------------------
#include "SPI.h"
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9340.h" //TFT 240 X 320
#define _sclk 13
#define _miso 12
#define _mosi 11
#define _cs 10
#define _dc 9
#define _rst 8
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_ILI9340 tft = Adafruit_ILI9340(_cs, _dc, _rst);
//-----------------------------------------------------------------------------------
#include <DHT.h> // 온습도 센서
#include
#define DHTPIN 7 //------온습도 센서 신호 핀 7 선언
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
//----------------------------RTC 시간 모듈-------------------------------------------------------
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
//----------------------------------------가스센서---------------------------------------------------
#include
int Analog_Input = A2;
int lpg, co, smoke;
MQ2 mq2(Analog_Input);
void setup() {
Serial.begin(9600); //시리얼 통신 시작
tft.begin(); // TFT 시작
dht.begin(); //온습도센서 시작
mq2.begin(); // 가스센서 시작
Wire.begin();
if (! rtc.begin())
{
tft.print("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning())
{
tft.print("RTC is NOT running!");
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //컴퓨터 시간에서 자동업데이트
tft.fillScreen(ILI9340_BLACK); // 배경화면 색깔
Serial.print(tft.width());
Serial.print("/");
Serial.println(tft.height());
}
//--------------------------------------------------------------------------------
void loop(void) {
int light = analogRead(A6); // 여기서 light는 아날로그 핀 A6
// 포토레지스터
int h = dht.readHumidity(); // 읽어온 습도 값을 h로 설정
int t = dht.readTemperature(); // 읽어온 온도 값을 t로 설정
float* values = mq2.read(true); //가스센서
lpg = mq2.readLPG();
co = mq2.readCO();
smoke = mq2.readSmoke();
Serial.print("Humi:");
Serial.print(h);
Serial.print("%");
Serial.print(", Temp:");
Serial.print(t);
Serial.println("℃:"); // 시리얼 창에 습도, 온도값 띄움
//------------------------------------------------------------------------
DateTime now = rtc.now();
tft.setTextColor(ILI9340_GREEN ); tft.setTextSize(2);
tft.setCursor(0, 50);
tft.print("TIME");
tft.print(" ");
tft.print(now.hour());
tft.print(':');
tft.print(now.minute());
tft.print(':');
tft.print(now.second());
tft.print(" ");
tft.setCursor(0, 0); //---------------------------------------------------
tft.print("DATE");
tft.print(" ");
tft.print(now.day());
tft.print('/');
tft.print(now.month());
tft.print('/');
tft.print(now.year());
tft.print(" ");
//--------------------------------------------------------------
tft.setCursor(0,150); // LCD 디스플레이 0,30 위치에
tft.setTextColor(ILI9340_YELLOW); tft.setTextSize(3); //LCD 온도 결과값불러오기
tft.print("Humi. = ");
tft.print(h); // h값 불러옴
tft.print(" %");
//--------------------------------------------------------------------------
tft.setCursor(0,100); // LCD 디스플레이 0,60 위치에
tft.setTextColor(ILI9340_CYAN); tft.setTextSize(3); //LCD 습도 결과값불러오기
tft.print("Temp. = "); // text 띄우고
tft.print(t); // t값 불러옴
tft.print("'C");
//----------------------------------------------------------------------
tft.setCursor(0, 200);
tft.setTextColor(ILI9340_CYAN); tft.setTextSize(3); // 조도센서
tft.print("light. = ");
tft.println(light);
//----------------------------------------------------------------------
tft.setCursor(0, 240);
tft.setTextColor(ILI9340_RED ); tft.setTextSize(2); //가스센서
tft.print("LPG:");
tft.print(lpg);
tft.setCursor(0, 270);
tft.print("SMOKE:");
tft.print(smoke);
tft.print(" PPM");
//----------------------------------------
delay(1000); // 1초의 delay
}
댓글 5
조회수 16,126master님의 댓글
master 작성일
이전 문자가 왜 삭제되지 않을까요?
라이브러리를 설치하면 예제가 함께 설치됩니다.
라이브러리 예제를 돌려서 같은 증상이 나오는지 체크해보세요
master님의 댓글
master 작성일
정 안되면
매번 전체화면 clear 시키고 나서 전체 화면 표시를 해야겠습니다.
플립플롭님의 댓글
플립플롭
감사합니다 문제해결에 있어서 많은 도움이 되었습니다 허나
void loop(void)쪽에 tft.clear(); 넣어서도 안되고 reset 도 시도해보긴 했습니다
'class Adafruit_ILI9340' has no member named 'clear'
'class Adafruit_ILI9340' has no member named 'reset'
이렇게 뜹니다
야매로 void loop(void) 쪽에
tft.fillScreen(ILI9340_BLACK); 넣으니 숫자 중첩상태가 나오지는 않긴합니다만.. 영시원치 않습니다
clear을 아예 손을 봐야 할까요?
master님의 댓글
master
어떤 위치에 글씨를 쓸 때에
해당 영역만 검정색으로 fill 시킨 후에 글씨를 출력하는 식으로 만들어보세요
왜 배경색이 적용되지 않는지 잘 체크해보세요
배경색을 적용하지 않는 옵션이 있는지도 찾아보시고요
master님의 댓글
master 작성일
tft.setTextColor(WHITE, BLACK)를 사용하여 배경색을 설정합니다.
setTextColor(WHITE) 메서드를 사용하면 전경은 WHITE이지만 배경색은 그리지 않습니다.