Arduino Polska Forum

Pełna wersja: TFT 3.5 cala z Chin i Mega 2650 nie mogę uruchomić
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Mam taki wyświetlacz jak na zdjęciach i nie mogę go uruchomić. Setki postów i różne ustawienia i cały czas biały. Może już ktoś miał podobny i udało mu się dobrać ustawienia, aby go ożywić?  Pomóżcie. Brak mi już pomysłów. Pozdrawiam
Jeśli próbowałeś wielu rzeczy, może zerknij na jakość lutów. Może gdzieś któryś jest zimny. Możesz spróbować sprawdzić (omomierzem) przejścia z jednej strony płytki na drugą? Może się czepiam, ale kto wie.
Jest niby do UNO, więc radzę od tego zacząć. Piny w UNO i MEGA nie do końca się pokrywają (np. piny ISP a są wykorzystywane w bibliotekach). Miałem podobny z dotykiem od MCU Friend. Nawet kilka. Jedne działały od strzału, inne nie. Nawet tak samo wyglądające, od różnych Chińczyków miały inne numerki chipu sterującego i wymagały innych procedur/funkcji do inicjalizacji, sterowania wyświetlaczem - innych bibliotek. Najwięcej działa mi na bibliotekach kbv, https://www.arduinolibraries.info/librar...friend_kbv, czasami trzeba wymusić jakiś chip bo go nie ma w bibliotece, a działa tak samo jak taki, który już jest opracowany, czasami odwrócić kolory. Moje działają OK na UNO, na Mega wolniej, na DUE OK. Jeśli kupiony w Chinach (lub można znaleźć taki na Ali) to można poczytać komentarze, czasami ludzie się chwalą, że odpalili na takich a takich lib.
Dzięki !!!! Odpaliłem na MCUFRIEND_kbv ale trzeba było wybrać odpowiedni ( UTFTGLUE myGLCD(0x9488,A2,A1,A3,A4,A0); ).
Musiało być 9488. Pomożesz mi jak można zmieniać czcionki bo czy robię Small czy Big to po powiększeniu np.  myGLCD.setTextSize(6); jest brzydka tzn. duże piksele. A może jest jakiś sposób podpiąć jakiś inny krój. Jestem za cienki aby to zrobić.
Pozdrawiam
Teraz mam coś takiego i czcionka beznadziejna.

Kod:
#include <SimpleDHT.h>
#include <UTFTGLUE.h>
#include <RTClib.h>

RTC_DS3231 rtc;

UTFTGLUE myGLCD(0x9488,A2,A1,A3,A4,A0); // Wyświetlacz 320x480 i Mega 2560
int pinDHT22 = 53;
SimpleDHT22 dht22;
//char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
// static const char *daysOfTheWeek[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
char daysOfTheWeek[7][14] = {" NIEDZIELA", "PONIEDZIALEK", "   WTOREK", "   SRODA", "  CZWARTEK", "   PIATEK", "   SOBOTA"};
#if !defined(BigFont)
extern uint8_t BigFont[];  
#endif
void setup()
{
rtc.begin();
randomSeed(analogRead(5));
pinMode(A0, OUTPUT);      
digitalWrite(A0, HIGH);
myGLCD.InitLCD();
myGLCD.clrScr();
// ================= RAMKI ==========================
  myGLCD.setColor(25, 25, 255);
  myGLCD.drawLine(20, 45, 220, 45); myGLCD.drawLine(220, 45, 220, 170); myGLCD.drawLine(20, 170, 220, 170); myGLCD.drawLine(20, 170, 20, 45);
  myGLCD.drawLine(240, 45, 460, 45); myGLCD.drawLine(240, 45, 240, 170); myGLCD.drawLine(460, 45, 460, 170); myGLCD.drawLine(460, 170, 240, 170);
  myGLCD.drawLine(20, 200, 460, 200); myGLCD.drawLine(460, 200, 460, 300); myGLCD.drawLine(20, 300, 460, 300); myGLCD.drawLine(20, 200, 20, 300);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setTextSize(0);
  myGLCD.print("` `", 170, 184);  
  myGLCD.setTextSize(2);
//       myGLCD.setFont(BigFont);
  myGLCD.print(" WILGOTNOSC ", 60, 191);
  myGLCD.print(" TEMPERATURA ", 275, 191);
  myGLCD.print(" GODZINA ", 66, 37);
  myGLCD.print(" DATA ", 310, 37);
  myGLCD.setColor(25, 25, 255);
  myGLCD.drawLine(20, 15, 460, 15);
  myGLCD.setColor(255, 50, 75);
//   myGLCD.setTextSize(0);
   myGLCD.setFont(BigFont);
  myGLCD.print(" KRZYSZTOF MADZIAR ", CENTER, 12);
  //================= ZNAKI DATY CZASU ========================
  myGLCD.setTextSize(2);
  myGLCD.setColor(250, 0, 255);
  myGLCD.print("o",385,235);
  myGLCD.setTextSize(4);
  myGLCD.print("C",402,240);
  myGLCD.setTextSize(2);
  myGLCD.setColor(0, 250, 255);
  myGLCD.print("%",180,235);
  myGLCD.print("RH",175,258);
  myGLCD.setTextSize(5);
//  myGLCD.setColor(25, 255, 0);
//  myGLCD.print(":",103,76);
  myGLCD.setColor(25, 255, 0);
  myGLCD.print(("/"), 335, 80);
}
void loop()
{
DateTime now = rtc.now();
String nazwa;
float temperature = 0;
float humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht22.read2(pinDHT22, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
return;
}
  myGLCD.setTextSize(5);
  myGLCD.setColor(25, 255, 0);
  myGLCD.print(":",105,80);
//================== Temperatura =========================
  myGLCD.setColor(250, 0, 255);
  myGLCD.setTextSize(4);
  myGLCD.printNumF((temperature), 1, 280, 240);
//=================== Wilgotność ==========================
  myGLCD.setColor(0, 250, 255);
  myGLCD.setTextSize(4);
  myGLCD.printNumF((humidity),1, 65, 240);
   //==================== DATA ===========================
  myGLCD.setColor(25, 255, 0);
  myGLCD.setFont(BigFont);
  myGLCD.setTextSize(6);
  if ((now.month())<=9){
  myGLCD.print("0", 370, 76);
  myGLCD.printNumF((now.month()),0, 405, 76);
 }else{
  myGLCD.printNumF((now.month()),0, 365, 76);}
  if ((now.day())<=9){
  myGLCD.print("0",260,76);
  myGLCD.printNumF((now.day()),0, 295, 76);
  }else{
  myGLCD.printNumF((now.day()),0, 260, 76);}
  myGLCD.setTextSize(2);
  myGLCD.setColor(250, 255, 0);
  nazwa = (daysOfTheWeek[(now.dayOfTheWeek())]);
  myGLCD.printNumF((now.year()),0, 322, 139);
  myGLCD.print((nazwa), 50, 139);
  //===================== CZAS ==========================
  myGLCD.setTextSize(6);
  myGLCD.setColor(25, 255, 0);
  if ((now.hour())<=9){
  myGLCD.print("0",38,76);
  myGLCD.printNumF((now.hour()),0, 73, 76);
}else{
  myGLCD.printNumF((now.hour()),0, 38, 76);}
  if ((now.minute())<=9) {
  myGLCD.print("0",135,76);
  myGLCD.printNumF((now.minute()),0, 170, 76);
}else{
  myGLCD.printNumF((now.minute()),0, 135, 76);}
/*   myGLCD.setTextSize(3);
  myGLCD.setColor(250, 255, 0);
  if ((now.second())<=9) {
  myGLCD.print("0",167,135);
  myGLCD.printNumI((now.second()), 185, 135);
}else{
  myGLCD.printNumI((now.second()), 167, 135);}
  */
delay(450);
  myGLCD.setTextSize(5);
  myGLCD.setColor(25, 255, 0);
  myGLCD.print(" ",105,80);
delay(550);
}
Zainstaluj sobie pakiet adafruit - biblioteki do jakiegoś ekranu + Adafruit_GFX_Library gdzie jest mnóstwo czcionek. Te tutaj to po prostu powiększone i pogrubione najmniejsze fonty, tak po prostu mają wyglądać, za to mniej pamięci zabierają. Tu jest tutorial: https://learn.adafruit.com/adafruit-gfx-...sing-fonts
Ja teraz nie sprawdzę, sam nie zmieniałem. Nie wiem czy to będzie działać z bibliotekami kbv (kojarzę, że jest to wymóg biblioteki kbv, by był gfx, także pewnie działa), miałem ekran działający na bibliotekach adafruit i tam to działa jak w tutorialu - includujesz, ustawiasz, używasz, resetujesz do podstawowego.
EDIT:
Autor KBV dał taki przykład ze przewijaniem tekstu i użyciem fontów TTF. Generalnie zauważyłem, że ładne czcionki TTF rozwalają wizualnie ekran, ciężko nad nimi zapanować. Bawiłem się przykładem ze skrolowaniem pionowym i robi sieczkę na TTF - inaczej się je rysuje, mają różne szerokości, itp. A te duże zjadają kilkadziesiąt kb flash - tylko jak się bawisz MEGA czy DUE. Statyczny napis wygląda oczywiście super na FreeSans18pt7b.
Kod:
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;

#include <fonts/FreeSans9pt7b.h>
#include <fonts/FreeSans12pt7b.h>
#include <fonts/FreeSans18pt7b.h>
#include <fonts/FreeSans24pt7b.h>

#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

void setup()
{
   uint16_t ID = tft.readID();
   tft.begin(ID);
   tft.setRotation(1);
}

void scrolltext(int x, int y, const char *s, uint8_t dw = 1, const GFXfont *f = NULL, int sz = 1)
{
   int16_t x1, y1, wid = tft.width(), inview = 1;
   uint16_t w, h;
   tft.setFont(f);
   tft.setTextColor(YELLOW, BLACK);
   tft.setTextSize(sz);
   tft.setTextWrap(false);
   tft.getTextBounds((char*)s, x, y, &x1, &y1, &w, &h);
   //    w = strlen(s) * 6 * sz;

   for (int steps = wid + w; steps >= 0; steps -= dw) {
       x = steps - w;
       if (f != NULL) {
           inview = wid - x;
           if (inview > wid) inview = wid;
           if (inview > w) inview = w;
           tft.fillRect(x > 0 ? x : 0, y1, inview + dw, h, BLACK);
       }
       x -= dw;
       tft.setCursor(x, y);
       tft.print(s);
       if (f == NULL) tft.print("  "); //rubout trailing chars
       delay(5);
   }
}


void loop()
{
   tft.fillScreen(BLACK);
   tft.setTextColor(WHITE);
   tft.setFont(NULL);   //System Font
   tft.setTextSize(1);
   tft.setCursor(0, 0);
   tft.println("Here are some scrolling examples");
   tft.println("System Font can be drawn in rubout mode");
   scrolltext(0, 30, "Default 100 pixels/s.  System Font.  sz = 1", 1, NULL, 1);
   scrolltext(0, 30, "David Prentice is a jolly good chap.  1000 pixels/s.  System Font",
              10, NULL, 1);
   scrolltext(0, 30, "200 pixels/s. System. sz=2", 2, NULL, 2);
   scrolltext(0, 30, "200 pixels/s. System. sz=3", 2, NULL, 3);
   scrolltext(0, 30, "500 pixels/s. System. sz=4", 5, NULL, 4);
   scrolltext(0, 30, "Saturday 30 September 2017", 2, NULL, 3);
   scrolltext(0, 60, "Saturday 30 September 2017", 10, NULL, 3);
   tft.setTextColor(WHITE);
   tft.setFont(&FreeSans9pt7b);   //Free Font
   tft.setTextSize(1);
   tft.setCursor(0, 40);
   tft.println("Free Fonts look nicer, only transparent");
   tft.println("re-painting background for rubout is nasty");

   scrolltext(0, 100, "200 pixels/s. FreeSans9pt7b. sz=1", 2, &FreeSans9pt7b, 1);
   scrolltext(0, 100, "Saturday 30 September 2017", 5, &FreeSans12pt7b);
   scrolltext(0, 200, "David", 10, &FreeSans18pt7b);
   delay(2000);
}