Adafruit_TFTLCD и tft.setFont не стирает старые символы

Vln
Offline
Зарегистрирован: 17.12.2015

Adafruit_TFTLCD (Adafruit_GFX), сли сменить шрифт tft.setFont, то  tft.print при выводе не стирает старые символы:

  while (true) {
    if (oldsec != t.sec) {
      tft.setFont(FONT1); tft.setTextSize(2);
      tft.setTextColor(TFT_WHITE, TFT_BLACK); tft.setCursor( 0, 0);
      tft.print(rtc.getTimeStr());
      oldsec = t.sec; 
  }  }

Если tft.setFont() по умолчанию, то стирает.

Библиотека так работает, или я где-то ошибся?

 

Vln
Offline
Зарегистрирован: 17.12.2015

Весь код (LCD chip9328):

/* tft.setFont tft.setTextColor */

#include <Adafruit_TFTLCD.h>
#include <DS3231.h>


#include <fonts/FreeSerif9pt7b.h>
#define FONT1  &FreeSerif9pt7b

#define TFT_BLACK   0x0000
#define TFT_WHITE   0xFFFF

Adafruit_TFTLCD tft(A3, A2, A1, A0, 0);

DS3231  rtc(SDA, SCL);
Time t;
int oldsec = 0;

void setup() {
  Serial.begin(9600);
  rtc.begin();
  tft.reset();
  tft.begin(tft.readID());
  tft.fillScreen(TFT_BLACK);
}

void loop() {
  t = rtc.getTime();
  while (true) {
    if (oldsec != t.sec) {
      tft.setFont(FONT1);
      tft.setTextSize(2);
      tft.setTextColor(TFT_WHITE, TFT_BLACK);
      tft.setCursor( 50, tft.width() / 2);
      tft.print(rtc.getTimeStr());
      tft.setFont();
      tft.setCursor( 70, tft.width() / 2 + 25);
      tft.print(rtc.getTimeStr());

      Serial.print(oldsec); Serial.print(" ");
      Serial.println(rtc.getTimeStr());
    }
    oldsec = t.sec;
    delay(250);
    t = rtc.getTime();
  }
}
negavoid
Offline
Зарегистрирован: 09.07.2016
Vln
Offline
Зарегистрирован: 17.12.2015

negavoid пишет:
Ещё, Adafruit напоминает, что при работе с такими шрифтами автоматическое закрашивание бэкграунда не работает, при перерисовке закрашивать фон придётся самим, определяя размер rect-а через функцию getTextBounds (https://learn.adafruit.com/adafruit-gfx-graphics-library/using-fonts):

int16_t x1, y1; 
uint16_t w, h; 
tft.getTextBounds(string, x, y, &x1, &y1, &w, &h); 

за getTextBounds спасибо, не знал