SaintSmart Touch LCD

Тема в разделе "Arduino & Shields", создана пользователем Mitrandir, 25 июл 2013.

  1. Mitrandir

    Mitrandir Гуру

    Здравствуйте, купил себе такой LCD:

    SainSmart 3.2"TFT LCD Display+Touch Panel+PCB adapter SD Slot 4 Arduino mega2560

    Попытался загрузить скетч-пример, но экран светится только белым

    Кто-нибудь работал с ним?
    как его оживить?
     
  2. Mitrandir

    Mitrandir Гуру

    Так же пытался использовать библиотеку UTFT:
    Код (C):
    // UTFT_Demo_320x240 (C)2012 Henning Karlsen
    // web: http://www.henningkarlsen.com/electronics
    //
    // This program is a demo of how to use most of the functions
    // of the library with a supported display modules.
    //
    // This demo was made for modules with a screen resolution
    // of 320x240 pixels.
    //
    // This program requires the UTFT library.
    //

    #include <UTFT.h>

    // Declare which fonts we will be using
    extern uint8_t SmallFont[];

    // Uncomment the next line for Arduino 2009/Uno
    //UTFT myGLCD(ITDB32S,19,18,17,16);   // Remember to change the model parameter to suit your display module!

    // Uncomment the next line for Arduino Mega
    UTFT myGLCD(ITDB32S,38,39,40,41);   // Remember to change the model parameter to suit your display module!

    void setup()
    {
      randomSeed(analogRead(0));
     
    // Setup the LCD
      myGLCD.InitLCD();
      myGLCD.setFont(SmallFont);
    }

    void loop()
    {
      int buf[318];
      int x, x2;
      int y, y2;
      int r;

    // Clear the screen and draw the frame
      myGLCD.clrScr();

      myGLCD.setColor(255, 0, 0);
      myGLCD.fillRect(0, 0, 319, 13);
      myGLCD.setColor(64, 64, 64);
      myGLCD.fillRect(0, 226, 319, 239);
      myGLCD.setColor(255, 255, 255);
      myGLCD.setBackColor(255, 0, 0);
      myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1);
      myGLCD.setBackColor(64, 64, 64);
      myGLCD.setColor(255,255,0);
      myGLCD.print("<http://www.sainsmart.com>", CENTER, 227);

      myGLCD.setColor(0, 0, 255);
      myGLCD.drawRect(0, 14, 319, 225);

    // Draw crosshairs
      myGLCD.setColor(0, 0, 255);
      myGLCD.setBackColor(0, 0, 0);
      myGLCD.drawLine(159, 15, 159, 224);
      myGLCD.drawLine(1, 119, 318, 119);
      for (int i=9; i<310; i+=10)
        myGLCD.drawLine(i, 117, i, 121);
      for (int i=19; i<220; i+=10)
        myGLCD.drawLine(157, i, 161, i);

    // Draw sin-, cos- and tan-lines  
      myGLCD.setColor(0,255,255);
      myGLCD.print("Sin", 5, 15);
      for (int i=1; i<318; i++)
      {
        myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95));
      }
     
      myGLCD.setColor(255,0,0);
      myGLCD.print("Cos", 5, 27);
      for (int i=1; i<318; i++)
      {
        myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95));
      }

      myGLCD.setColor(255,255,0);
      myGLCD.print("Tan", 5, 39);
      for (int i=1; i<318; i++)
      {
        myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180)));
      }

      delay(2000);

      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);
      myGLCD.setColor(0, 0, 255);
      myGLCD.setBackColor(0, 0, 0);
      myGLCD.drawLine(159, 15, 159, 224);
      myGLCD.drawLine(1, 119, 318, 119);

    // Draw a moving sinewave
      x=1;
      for (int i=1; i<(318*20); i++)
      {
        x++;
        if (x==319)
          x=1;
        if (i>319)
        {
          if ((x==159)||(buf[x-1]==119))
            myGLCD.setColor(0,0,255);
          else
            myGLCD.setColor(0,0,0);
          myGLCD.drawPixel(x,buf[x-1]);
        }
        myGLCD.setColor(0,255,255);
        y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100)));
        myGLCD.drawPixel(x,y);
        buf[x-1]=y;
      }

      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some filled rectangles
      for (int i=1; i<6; i++)
      {
        switch (i)
        {
          case 1:
            myGLCD.setColor(255,0,255);
            break;
          case 2:
            myGLCD.setColor(255,0,0);
            break;
          case 3:
            myGLCD.setColor(0,255,0);
            break;
          case 4:
            myGLCD.setColor(0,0,255);
            break;
          case 5:
            myGLCD.setColor(255,255,0);
            break;
        }
        myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20));
      }

      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some filled, rounded rectangles
      for (int i=1; i<6; i++)
      {
        switch (i)
        {
          case 1:
            myGLCD.setColor(255,0,255);
            break;
          case 2:
            myGLCD.setColor(255,0,0);
            break;
          case 3:
            myGLCD.setColor(0,255,0);
            break;
          case 4:
            myGLCD.setColor(0,0,255);
            break;
          case 5:
            myGLCD.setColor(255,255,0);
            break;
        }
        myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20));
      }
     
      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some filled circles
      for (int i=1; i<6; i++)
      {
        switch (i)
        {
          case 1:
            myGLCD.setColor(255,0,255);
            break;
          case 2:
            myGLCD.setColor(255,0,0);
            break;
          case 3:
            myGLCD.setColor(0,255,0);
            break;
          case 4:
            myGLCD.setColor(0,0,255);
            break;
          case 5:
            myGLCD.setColor(255,255,0);
            break;
        }
        myGLCD.fillCircle(100+(i*20),60+(i*20), 30);
      }
     
      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some lines in a pattern
      myGLCD.setColor (255,0,0);
      for (int i=15; i<224; i+=5)
      {
        myGLCD.drawLine(1, i, (i*1.44)-10, 224);
      }
      myGLCD.setColor (255,0,0);
      for (int i=224; i>15; i-=5)
      {
        myGLCD.drawLine(318, i, (i*1.44)-11, 15);
      }
      myGLCD.setColor (0,255,255);
      for (int i=224; i>15; i-=5)
      {
        myGLCD.drawLine(1, i, 331-(i*1.44), 15);
      }
      myGLCD.setColor (0,255,255);
      for (int i=15; i<224; i+=5)
      {
        myGLCD.drawLine(318, i, 330-(i*1.44), 224);
      }
     
      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some random circles
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=32+random(256);
        y=45+random(146);
        r=random(30);
        myGLCD.drawCircle(x, y, r);
      }

      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some random rectangles
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=2+random(316);
        y=16+random(207);
        x2=2+random(316);
        y2=16+random(207);
        myGLCD.drawRect(x, y, x2, y2);
      }

      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

    // Draw some random rounded rectangles
      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=2+random(316);
        y=16+random(207);
        x2=2+random(316);
        y2=16+random(207);
        myGLCD.drawRoundRect(x, y, x2, y2);
      }

      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

      for (int i=0; i<100; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        x=2+random(316);
        y=16+random(209);
        x2=2+random(316);
        y2=16+random(209);
        myGLCD.drawLine(x, y, x2, y2);
      }

      delay(2000);
     
      myGLCD.setColor(0,0,0);
      myGLCD.fillRect(1,15,318,224);

      for (int i=0; i<10000; i++)
      {
        myGLCD.setColor(random(255), random(255), random(255));
        myGLCD.drawPixel(2+random(316), 16+random(209));
      }

      delay(2000);

      myGLCD.fillScr(0, 0, 255);
      myGLCD.setColor(255, 0, 0);
      myGLCD.fillRoundRect(80, 70, 239, 169);
     
      myGLCD.setColor(255, 255, 255);
      myGLCD.setBackColor(255, 0, 0);
      myGLCD.print("That's it!", CENTER, 93);
      myGLCD.print("Restarting in a", CENTER, 119);
      myGLCD.print("few seconds...", CENTER, 132);
     
      myGLCD.setColor(0, 255, 0);
      myGLCD.setBackColor(0, 0, 255);
      myGLCD.print("Runtime: (msecs)", CENTER, 210);
      myGLCD.printNumI(millis(), CENTER, 225);
     
      delay (10000);
    }
     
    Результат тот же
     
  3. HighDigital

    HighDigital Гик

    Попробуйте такой скетч:
    Код (C):
    //Bench.ino
    //Maël - 01/03/2013
    //Mesure le temps de différentes methodes des lib UTFT et UTouch et envoi les temps sur le port Serie (115200 bauds)

    #include <UTFT.h>
    #include <UTouch.h>

    #include "icon.h"

    // Declare which fonts we will be using
    extern uint8_t SmallFont[];
    extern uint8_t BigFont[];
    extern uint8_t SevenSegNumFont[];

    // Tft, touchscreen for Arduino Mega
    UTFT myGLCD(ITDB32S,38,39,40,41);  
    UTouch myTouch(6,5,4,3,2);

    extern unsigned int icon[0x400];

    //pointeur de fonction simple
    typedef void TFunction(void);

    typedef struct  
    {
      TFunction * process; //pointeur sur la methode à chronometrer
      String text;       //nom du test (apparaitra sur la console)
    } TProcessInfo;

    void InitTFT()
    {
    // Setup the LCD, touch screen
      myGLCD.InitLCD(LANDSCAPE);
      myTouch.InitTouch(LANDSCAPE);
      myTouch.setPrecision(PREC_LOW); //PREC_MEDIUM
     
      myGLCD.clrScr();
    }

    void MeasureDrawPixel(void)
    {
      myGLCD.drawPixel(0,0);
    }

    void MeasureDraw10Pixels(void)
    {
      for (int i = 0; i < 10; i++)
        myGLCD.drawPixel(i,i);
    }

    void MeasureSetColor()
    {
      myGLCD.setColor(255, 255, 255);
    }

    void MeasureSetBackColor()
    {
      myGLCD.setBackColor(64, 64, 64);
    }

    void MeasureFillRoundRect()
    {
      myGLCD.fillRoundRect(10, 10, 50, 50);
    }

    void MeasureDrawRoundRect()
    {
      myGLCD.drawRoundRect(110, 10, 150, 50);
    }

    void MeasureDrawLine()
    {
      myGLCD.drawLine(210, 10, 250, 50);
    }

    void MeasureDrawVLine()
    {
      myGLCD.drawLine(270, 10, 270, 50);
    }

    void MeasureDrawHLine()
    {
      myGLCD.drawLine(230, 20, 270, 20);
    }

    void MeasureFillRect()
    {
      myGLCD.fillRect(100, 100, 50, 150);
    }

    void MeasureSetSmallFont()
    {
      myGLCD.setFont(SmallFont);
    }

    void MeasurePrintText()
    {
      myGLCD.print("001", 1, 1);   
    }

    void MeasurePrintTextAbc()
    {
      myGLCD.print("Abc", 1, 1);   
    }

    void MeasureSetBigFont()
    {
      myGLCD.setFont(BigFont);
    }

    void MeasureclrScr()
    {
      myGLCD.clrScr();
    }

    void MeasureBitmap()
    {
     myGLCD.drawBitmap (200, 10, 32, 32, icon);
    }

    void MeasurePrintNum()
    {
      int num = 123;
      myGLCD.printNumI(num, 200, 100);
    }

    void MeasureTouch_dataAvailable()
    {
      boolean b = myTouch.dataAvailable();
    }

    void MeasureTouch_read()
    {
      myTouch.read();
    }

    void MeasureTouch_getxy()
    {
      int x=myTouch.getX();
      int y=myTouch.getY();
    }

    //Liste des méthodes à mesurer
    #define LIST_COUNT 22
    TProcessInfo ListOfMeasures[LIST_COUNT] = {
      { MeasureclrScr, "clrScr" },
      { MeasureDrawPixel, "DrawPixel" },
      { MeasureDraw10Pixels, "DrawPixel x 10" },
      { MeasureSetColor, "SetColor" },
      { MeasureSetBackColor, "SetBackColor" },
      { MeasureFillRoundRect, "FillRoundRect 40x40" },
      { MeasureDrawRoundRect, "DrawRoundRect 40x40" },
      { MeasureDrawLine, "drawLine 40x40" },
      { MeasureDrawVLine, "draw Vertical Line 40" },
      { MeasureDrawHLine, "draw Horizontal Line 40" },
      { MeasureFillRect, "FillRect 40x40" },
      { MeasureSetSmallFont, "SetSmallFont" },
      { MeasurePrintText, "Print 001" },
      { MeasurePrintTextAbc, "Print Abc" },
      { MeasurePrintNum, "printNumI(123)" },
      { MeasureSetBigFont, "SetBigFont" },
      { MeasurePrintText, "Print 001" },
      { MeasurePrintNum, "printNumI(123)" },
      { MeasureBitmap, "draw bitmap 32x32" },
      //Mesure des optimisations sur UTouch (en debogage)
      { MeasureTouch_dataAvailable, "Touch Screen DataAvailable"},
      { MeasureTouch_read, "Touch Screen Read"},
      { MeasureTouch_getxy, "Touch Screen getX, getY"}
      };

    void Measure()
    {
      Serial.println("start...");
      unsigned long ChronoAll = micros();
      for (int i = 0; i < LIST_COUNT; i++)
      {
        if ( ListOfMeasures[i].process != NULL)
        {
          unsigned long ChronoOne = micros();
          ListOfMeasures[i].process();
          ChronoOne = micros() - ChronoOne;
          Serial.print(ChronoOne, DEC);
          Serial.print(" us : ");
          Serial.println(ListOfMeasures[i].text);
        }
      }
      ChronoAll = micros() - ChronoAll;
      Serial.print("finish in ");
      Serial.print(ChronoAll, DEC);
      Serial.println(" us.");
    }

    void setup()
    {
      Serial.begin(115200);
      Serial.println("ready.");
      InitTFT();
     
      Measure();
    }

    void loop()
    {
    }
    Источник: Arduino.cc
    Полистайте там форум, быть может решите свою проблему.
    Удачи.
     
  4. Mitrandir

    Mitrandir Гуру

    Спасибо за код, но увы тот же результат, только подсветка(
     
  5. HighDigital

    HighDigital Гик

    Быть может вы не правильно подключили, контакты отходят, или может в дисплее проблема...
    Попробуйте начать заново, лично мне помогает когда "на ходу" пишу большой код.
     
  6. Mitrandir

    Mitrandir Гуру

    Хмм как можно шилд неправильно одеть?) я уж думаю китайцы битый прислали(
    хотя ардуина от того же продавца рабочая...
     
  7. Summit

    Summit Нуб

    UTFT myGLCD(ITDB32S,38,39,40,41);
    ITDB32S- возможно у тебя CTE32HR, у меня такой дисплей.