Forum Rule: Always post complete source code & details to reproduce any issue!
Page 1 of 2 1 2 LastLast
Results 1 to 25 of 35

Thread: Touch screen advice

  1. #1
    Senior Member
    Join Date
    Apr 2019
    Posts
    147

    Touch screen advice

    I am looking for a touchscreen and a bluetooth solution to build a touchpad/controller

    Has anyone used the nextion screens ?

    Ideally a screen and enclosure solution

    Any suggestions greatly appreciated

  2. #2
    Junior Member
    Join Date
    Oct 2017
    Location
    Roskilde, Denmark
    Posts
    5
    I have used the Nextion in the past, i used the 7 inch model with capacitive touch.

    1) I was not pleased with the editor, strange issues, sporadic loss of elements on the screen.
    2) The fonts look really bad, ugly spacing between char's, no antialising.

    Br Gigabyte

  3. #3
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,547
    @gadget999 - Not me,

    Might help to have an idea of which type ones you are looking at, I see some from banggood for maybe $21 and others from $200-$300 which are probably very different.

  4. #4
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    https://www.adafruit.com/product/802

    Lots of choice over at adafruit

  5. #5

  6. #6

  7. #7

  8. #8
    Senior Member
    Join Date
    Apr 2017
    Posts
    189
    I use the heck out of the 2.4" and 2.8" inch TFT's (ILI9341) and HX8357 (3.5 inch units). I use all aspects such as graphics, SD usage and touch. I wish there were larger more affordable units. I use a combimation of adafruit buttons, my own libs, pauls font libs, etc. Not sure how i can help other than i've had very good luck with these units

    Here are 2 examples of what I use these displays for
    https://www.youtube.com/watch?v=tCUUaf6nYE8
    https://www.youtube.com/watch?v=A9F1ezGgaC4

  9. #9
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    Hi KrisKasprzak - thank you for the information

    some neat projects there esp liking the thermal camera !


    what do you use for enclosures ? 3d printing ?

    Regards

    G.

  10. #10
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    5,547
    Again not sure what all your requirements are. As mentioned we have done a lot of work on the ili9341 library and touch screen that PJRC sells.

    Also recently some of us have done some work on making sure the RA8875 displays work on the T3.x and T4...
    As you can see in the thread: https://forum.pjrc.com/threads/57280...rom-Buydisplay

  11. #11
    Senior Member
    Join Date
    Apr 2017
    Posts
    189
    The 3D printer I use is a makerbot we have at work. There are several online printing services that are very affordable. The software I use is Solid Edge and you can get a free download (student edition) at https://www.plm.automation.siemens.c...ftware/student. Disclaimer I work at the company that develops this software.

  12. #12
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    it looks like PJRC sell a screen !

    https://www.pjrc.com/store/display_ili9341_touch.html

    I can see some images of it with fonts - but does it do graphics like buttons etc ?

  13. #13
    Senior Member
    Join Date
    Apr 2017
    Posts
    189
    that looks like the same ones I use. drawing buttons is more dependent on the library and not the display. The library used is ili9341_t3. optimized for the teensy and supports Adafruit_GFX operations. Buttons are part of that lib. Using this lib I can create graphics, buttons, sliders, etc. jsut like what I show in my vids. I've also found a display that supports the getPixel function and I found a screen capture utility that will take a snapshot of the screen and save the image to an sd card.

  14. #14
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    Hi Kris - I have ordered one up hope to be playing with it soon

  15. #15
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    The screen arrived and i have wired it up to test the dmeo program using a nano

    the screen does not seem to work

    I originally wired it up with no resistors - have I killed it ?




    http://www.electronoobs.com/eng_arduino_tut58.php

  16. #16
    Senior Member
    Join Date
    Apr 2017
    Posts
    189
    I seriously doubt you fried your display. Send info on you pin connection and code.

    the link shows an UNO that pumps out 5 volts, the display in the link may not be 5 volt tolerant. I use the heck out of these https://www.amazon.com/gp/product/B0...?ie=UTF8&psc=1

    They have resistors built in but still work. There are inline resistors to the SD card and i have to close them. and a jumper needs to get close to bypass the onboard 3v3 regulator. These units have full touch and work well.

    Note the units in my link have black headers and for soem reason this unit supports getPixel() meaning i have a screen capture function to create an image of the screen. other units with yellow headers seem to not support the getPixel()...weird.

  17. #17
    I'm using Nextion 4.3 Enhanced screens in a project. The screens work well. The Ide takes some getting used to (to put it mildly ). The latest version of the Ide has much better fonts. The support forum is hosted by several abysmal jerks.

  18. #18
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    i used a nano and wired it the same as in this link - http://www.electronoobs.com/eng_arduino_tut58.php
    the code is the same also

    i have ordered a new tft and will connect it to a T3.2 when it arrives

    is there an example wiring diagram and code for a T3.2 ?

    Regards

  19. #19
    Senior Member+ MichaelMeissner's Avatar
    Join Date
    Nov 2012
    Location
    Ayer Massachussetts
    Posts
    3,306
    With the picture you posted, it uses 5v from an Arduino UNO type board. The Teensy 4.0/3.x/LC all run at 3.3v. Many displays can run at either 5v or 3.3v, but you need to check what the display actually does. You likely need to feed it 5v for the power, but usually you don't have to convert the data pins to 5v. For inputs from the display (like touch screen), you need to make sure the display never returns anything over 3.3v or you might fry your Teensy LC, 3.6, or 4.0 (the 3.2 and 3.5 are tolerant of 5v on digital inputs).

    PJRC.com sells its own ILI9341 TFT display and there are optimized libraries for it. I would imagine the same pinout would be used on your display, but the pins may be in a different order.:


    I have seen complaints that a lot of the random displays that you buy on ebay, amazon, or at buydisplay.com just don't work. So you need to test them.

  20. #20
    Member
    Join Date
    Aug 2019
    Location
    Melbourne Australia
    Posts
    29
    Users might like to check out intelligent touch screens offered here:- https://4dsystems.com.au/products/featured-products

    More expensive than the Nextions so I guess you'd weigh up $ per hour in time spent hair-tearing versus a few more $ invested for what looks like a well supported range of products..

  21. #21
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    Quote Originally Posted by MatrixRat View Post
    Users might like to check out intelligent touch screens offered here:- https://4dsystems.com.au/products/featured-products

    More expensive than the Nextions so I guess you'd weigh up $ per hour in time spent hair-tearing versus a few more $ invested for what looks like a well supported range of products..
    wow they look really neat and come with built in wifi !

  22. #22
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    ok i have the screen wired up as here using a T3.2 and no audio board

    https://www.pjrc.com/store/display_ili9341_touch.html

    Connections
    ILI9341 Pin Teensy 3.x
    Standard
    VCC VIN
    GND GND
    CS 10
    RESET +3.3V (not connected yet)
    D/C 9
    SDI (MOSI) 11 (DOUT)
    SCK 13 (SCK)
    LED VIN using 150 ohm resistor
    SDO (MISO) 12 (DIN)

    sketch is here

    Code:
    /***************************************************
      This is our GFX example for the Adafruit ILI9341 Breakout and Shield
      ----> http://www.adafruit.com/products/1651
    
      Check out the links above for our tutorials and wiring diagrams
      These displays use SPI to communicate, 4 or 5 pins are required to
      interface (RST is optional)
      Adafruit invests time and resources providing this open source code,
      please support Adafruit and open-source hardware by purchasing
      products from Adafruit!
    
      Written by Limor Fried/Ladyada for Adafruit Industries.
      MIT license, all text above must be included in any redistribution
     ****************************************************/
    #define ILI9341_BLACK       0x0000  ///<   0,   0,   0
    #define ILI9341_NAVY        0x000F  ///<   0,   0, 123
    #define ILI9341_DARKGREEN   0x03E0  ///<   0, 125,   0
    #define ILI9341_DARKCYAN    0x03EF  ///<   0, 125, 123
    #define ILI9341_MAROON      0x7800  ///< 123,   0,   0
    #define ILI9341_PURPLE      0x780F  ///< 123,   0, 123
    #define ILI9341_OLIVE       0x7BE0  ///< 123, 125,   0
    #define ILI9341_LIGHTGREY   0xC618  ///< 198, 195, 198
    #define ILI9341_DARKGREY    0x7BEF  ///< 123, 125, 123
    #define ILI9341_BLUE        0x001F  ///<   0,   0, 255
    #define ILI9341_GREEN       0x07E0  ///<   0, 255,   0
    #define ILI9341_CYAN        0x07FF  ///<   0, 255, 255
    #define ILI9341_RED         0xF800  ///< 255,   0,   0
    #define ILI9341_MAGENTA     0xF81F  ///< 255,   0, 255
    #define ILI9341_YELLOW      0xFFE0  ///< 255, 255,   0
    #define ILI9341_WHITE       0xFFFF  ///< 255, 255, 255
    #define ILI9341_ORANGE      0xFD20  ///< 255, 165,   0
    #define ILI9341_GREENYELLOW 0xAFE5  ///< 173, 255,  41
    #define ILI9341_PINK        0xFC18  ///< 255, 130, 198
    
    #include "SPI.h"
    #include "Adafruit_GFX.h"
    #include "Adafruit_ILI9341.h"
    
    // For the Adafruit shield, these are the default.
    #define TFT_CLK 13
    #define TFT_MISO 12
    #define TFT_MOSI 11
    #define TFT_DC 9
    #define TFT_CS 10
    #define TFT_RST 9
    // Use hardware SPI (on Uno, #13, #12, #11) and the above for CS/DC
    //Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
    // If using the breakout, change pins as desired
    Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
    
    void setup() {
      Serial.begin(9600);
      Serial.println("ILI9341 Test!"); 
     
      tft.begin();
    
      // read diagnostics (optional but can help debug problems)
      uint8_t x = tft.readcommand8(ILI9341_RDMODE);
      Serial.print("Display Power Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDMADCTL);
      Serial.print("MADCTL Mode: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDPIXFMT);
      Serial.print("Pixel Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDIMGFMT);
      Serial.print("Image Format: 0x"); Serial.println(x, HEX);
      x = tft.readcommand8(ILI9341_RDSELFDIAG);
      Serial.print("Self Diagnostic: 0x"); Serial.println(x, HEX); 
      /*
      Serial.println(F("Benchmark                Time (microseconds)"));
      delay(10);
      Serial.print(F("Screen fill              "));
      Serial.println(testFillScreen());
      delay(500);
    
      Serial.print(F("Text                     "));
      Serial.println(testText());
      delay(3000);
    
      Serial.print(F("Lines                    "));
      Serial.println(testLines(ILI9341_CYAN));
      delay(500);
    
      Serial.print(F("Horiz/Vert Lines         "));
      Serial.println(testFastLines(ILI9341_RED, ILI9341_BLUE));
      delay(500);
    
      Serial.print(F("Rectangles (outline)     "));
      Serial.println(testRects(ILI9341_GREEN));
      delay(500);
    
      Serial.print(F("Rectangles (filled)      "));
      Serial.println(testFilledRects(ILI9341_YELLOW, ILI9341_MAGENTA));
      delay(500);
    
      Serial.print(F("Circles (filled)         "));
      Serial.println(testFilledCircles(10, ILI9341_MAGENTA));
    
      Serial.print(F("Circles (outline)        "));
      Serial.println(testCircles(10, ILI9341_WHITE));
      delay(500);
    
      Serial.print(F("Triangles (outline)      "));
      Serial.println(testTriangles());
      delay(500);
    
      Serial.print(F("Triangles (filled)       "));
      Serial.println(testFilledTriangles());
      delay(500);
    
      Serial.print(F("Rounded rects (outline)  "));
      Serial.println(testRoundRects());
      delay(500);
    
      Serial.print(F("Rounded rects (filled)   "));
      Serial.println(testFilledRoundRects());
      delay(500);
    
      Serial.println(F("Done!"));
    */
    }
    
    
    void loop(void) {
      tft.fillScreen(ILI9341_NAVY);
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_GREEN);
      tft.setTextSize(5);
      tft.println("Groop");
      tft.setTextSize(2);
      tft.println("I implore thee,");
      tft.setTextSize(1);
      tft.println("my foonting turlingdromes.");
      tft.println("And hooptiously drangle me");
      tft.println("with crinkly bindlewurdles,");
      tft.println("Or I will rend thee");
      tft.println("in the gobberwarts");
      tft.println("with my blurglecruncheon,");
      tft.println("see if I don't!");
      delay(5000);
    
    }
    
    unsigned long testFillScreen() {
      unsigned long start = micros();
      tft.fillScreen(ILI9341_BLACK);
      yield();
      tft.fillScreen(ILI9341_RED);
      yield();
      tft.fillScreen(ILI9341_GREEN);
      yield();
      tft.fillScreen(ILI9341_BLUE);
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
      return micros() - start;
    }
    
    unsigned long testText() {
      tft.fillScreen(ILI9341_BLACK);
      unsigned long start = micros();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);  tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ILI9341_YELLOW); tft.setTextSize(2);
      tft.println(1234.56);
      tft.setTextColor(ILI9341_RED);    tft.setTextSize(3);
      tft.println(0xDEADBEEF, HEX);
      tft.println();
      tft.setTextColor(ILI9341_GREEN);
      tft.setTextSize(5);
      tft.println("Groop");
      tft.setTextSize(2);
      tft.println("I implore thee,");
      tft.setTextSize(1);
      tft.println("my foonting turlingdromes.");
      tft.println("And hooptiously drangle me");
      tft.println("with crinkly bindlewurdles,");
      tft.println("Or I will rend thee");
      tft.println("in the gobberwarts");
      tft.println("with my blurglecruncheon,");
      tft.println("see if I don't!");
      return micros() - start;
    }
    
    unsigned long testLines(uint16_t color) {
      unsigned long start, t;
      int           x1, y1, x2, y2,
                    w = tft.width(),
                    h = tft.height();
    
      tft.fillScreen(ILI9341_BLACK);
      yield();
      
      x1 = y1 = 0;
      y2    = h - 1;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = w - 1;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
      t     = micros() - start; // fillScreen doesn't count against timing
    
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
    
      x1    = w - 1;
      y1    = 0;
      y2    = h - 1;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = 0;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
      t    += micros() - start;
    
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
    
      x1    = 0;
      y1    = h - 1;
      y2    = 0;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = w - 1;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
      t    += micros() - start;
    
      yield();
      tft.fillScreen(ILI9341_BLACK);
      yield();
    
      x1    = w - 1;
      y1    = h - 1;
      y2    = 0;
      start = micros();
      for(x2=0; x2<w; x2+=6) tft.drawLine(x1, y1, x2, y2, color);
      x2    = 0;
      for(y2=0; y2<h; y2+=6) tft.drawLine(x1, y1, x2, y2, color);
    
      yield();
      return micros() - start;
    }
    
    unsigned long testFastLines(uint16_t color1, uint16_t color2) {
      unsigned long start;
      int           x, y, w = tft.width(), h = tft.height();
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(y=0; y<h; y+=5) tft.drawFastHLine(0, y, w, color1);
      for(x=0; x<w; x+=5) tft.drawFastVLine(x, 0, h, color2);
    
      return micros() - start;
    }
    
    unsigned long testRects(uint16_t color) {
      unsigned long start;
      int           n, i, i2,
                    cx = tft.width()  / 2,
                    cy = tft.height() / 2;
    
      tft.fillScreen(ILI9341_BLACK);
      n     = min(tft.width(), tft.height());
      start = micros();
      for(i=2; i<n; i+=6) {
        i2 = i / 2;
        tft.drawRect(cx-i2, cy-i2, i, i, color);
      }
    
      return micros() - start;
    }
    
    unsigned long testFilledRects(uint16_t color1, uint16_t color2) {
      unsigned long start, t = 0;
      int           n, i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      n = min(tft.width(), tft.height());
      for(i=n; i>0; i-=6) {
        i2    = i / 2;
        start = micros();
        tft.fillRect(cx-i2, cy-i2, i, i, color1);
        t    += micros() - start;
        // Outlines are not included in timing results
        tft.drawRect(cx-i2, cy-i2, i, i, color2);
        yield();
      }
    
      return t;
    }
    
    unsigned long testFilledCircles(uint8_t radius, uint16_t color) {
      unsigned long start;
      int x, y, w = tft.width(), h = tft.height(), r2 = radius * 2;
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(x=radius; x<w; x+=r2) {
        for(y=radius; y<h; y+=r2) {
          tft.fillCircle(x, y, radius, color);
        }
      }
    
      return micros() - start;
    }
    
    unsigned long testCircles(uint8_t radius, uint16_t color) {
      unsigned long start;
      int           x, y, r2 = radius * 2,
                    w = tft.width()  + radius,
                    h = tft.height() + radius;
    
      // Screen is not cleared for this one -- this is
      // intentional and does not affect the reported time.
      start = micros();
      for(x=0; x<w; x+=r2) {
        for(y=0; y<h; y+=r2) {
          tft.drawCircle(x, y, radius, color);
        }
      }
    
      return micros() - start;
    }
    
    unsigned long testTriangles() {
      unsigned long start;
      int           n, i, cx = tft.width()  / 2 - 1,
                          cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      n     = min(cx, cy);
      start = micros();
      for(i=0; i<n; i+=5) {
        tft.drawTriangle(
          cx    , cy - i, // peak
          cx - i, cy + i, // bottom left
          cx + i, cy + i, // bottom right
          tft.color565(i, i, i));
      }
    
      return micros() - start;
    }
    
    unsigned long testFilledTriangles() {
      unsigned long start, t = 0;
      int           i, cx = tft.width()  / 2 - 1,
                       cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(i=min(cx,cy); i>10; i-=5) {
        start = micros();
        tft.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
          tft.color565(0, i*10, i*10));
        t += micros() - start;
        tft.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i,
          tft.color565(i*10, i*10, 0));
        yield();
      }
    
      return t;
    }
    
    unsigned long testRoundRects() {
      unsigned long start;
      int           w, i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      w     = min(tft.width(), tft.height());
      start = micros();
      for(i=0; i<w; i+=6) {
        i2 = i / 2;
        tft.drawRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(i, 0, 0));
      }
    
      return micros() - start;
    }
    
    unsigned long testFilledRoundRects() {
      unsigned long start;
      int           i, i2,
                    cx = tft.width()  / 2 - 1,
                    cy = tft.height() / 2 - 1;
    
      tft.fillScreen(ILI9341_BLACK);
      start = micros();
      for(i=min(tft.width(), tft.height()); i>20; i-=6) {
        i2 = i / 2;
        tft.fillRoundRect(cx-i2, cy-i2, i, i, i/8, tft.color565(0, i, 0));
        yield();
      }
    
      return micros() - start;
    }
    the screen does nothing

    any suggestions greatly appreciated

  23. #23
    Junior Member
    Join Date
    Dec 2016
    Posts
    18
    Wire pin Reset to pin 8

  24. #24
    That looks positively primitive compared to Nextion code

  25. #25
    Senior Member
    Join Date
    Apr 2019
    Posts
    147
    Quote Originally Posted by TFTLCDCyg View Post
    Wire pin Reset to pin 8

    it worked - once i had reprogrammed it

    thank you for your help and advice


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •