Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 6 of 6

Thread: Teensy 4.1 with spi display

  1. #1
    Junior Member
    Join Date
    Oct 2021
    Posts
    8

    Teensy 4.1 with spi display

    I would like to connect my spi display with my Teensy 4.1

    Where should I start?
    Is there any tutorial I should follow?

    Thanks

  2. #2
    Senior Member PaulStoffregen's Avatar
    Join Date
    Nov 2012
    Posts
    25,226
    In Arduino, first make sure Teensy 4.1 is selected in Tools > Boards.

    Then click File > Examples > ST7735_t3 > graphicstest

    In the example code, scroll down and look for the defines showing the required connections. Some of the pin names match, so connect those first! For the ones which don't match, "A0" on that display is probably "DC" and "SDA" is probably "MOSI". This display doesn't seem to have any data output, so leave the MISO pin unconnected.

    Exactly how to connect no-name Chinese products can be a bit of a guessing game, since the info published by the Chinese sellers is scant. If you get it working, hope you'll confirm the connection and maybe even share a photo. Might help anyone else who also buys this particular display and also wonders how to make it work.

  3. #3
    Junior Member
    Join Date
    Oct 2021
    Posts
    8
    So I manage using that code nad make my screen work!

    Code:
    /**************************************************************************
      This is a library for several Adafruit displays based on ST77* drivers.
    
      Works with the Adafruit 1.8" TFT Breakout w/SD card
        ----> http://www.adafruit.com/products/358
      The 1.8" TFT shield
        ----> https://www.adafruit.com/product/802
      The 1.44" TFT breakout
        ----> https://www.adafruit.com/product/2088
      The 1.14" TFT breakout
      ----> https://www.adafruit.com/product/4383
      The 1.3" TFT breakout
      ----> https://www.adafruit.com/product/4313
      The 1.54" TFT breakout
        ----> https://www.adafruit.com/product/3787
      The 1.69" TFT breakout
        ----> https://www.adafruit.com/product/5206
      The 2.0" TFT breakout
        ----> https://www.adafruit.com/product/4311
      as well as Adafruit raw 1.8" TFT display
        ----> http://www.adafruit.com/products/618
    
      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
     **************************************************************************/
    
    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
    #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
    #include <SPI.h>
    
    #if defined(ARDUINO_FEATHER_ESP32) // Feather Huzzah32
      #define TFT_CS         14
      #define TFT_RST        15
      #define TFT_DC         32
    
    #elif defined(ESP8266)
      #define TFT_CS         4
      #define TFT_RST        16                                            
      #define TFT_DC         5
    
    #else
      // For the breakout board, you can use any 2 or 3 pins.
      // These pins will also work for the 1.8" TFT shield.
      #define TFT_CS        10
      #define TFT_RST        8 // Or set to -1 and connect to Arduino RESET pin
      #define TFT_DC         9  
    #endif
    
    // OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
    // to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
    // SCLK = pin 13. This is the fastest mode of operation and is required if
    // using the breakout board's microSD card.
    
    // For 1.44" and 1.8" TFT with ST7735 use:
    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
    
    // For 1.14", 1.3", 1.54", 1.69", and 2.0" TFT with ST7789:
    //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
    
    
    // OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
    // tradeoff being that performance is not as fast as hardware SPI above.
    //#define TFT_MOSI 11  // Data out
    //#define TFT_SCLK 13  // Clock out
    
    // For ST7735-based displays, we will use this call
    //Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
    
    // OR for the ST7789-based displays, we will use this call
    //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
    
    
    float p = 3.1415926;
    
    void setup(void) {
      Serial.begin(9600);
      Serial.print(F("Hello! ST77xx TFT Test"));
    
      // Use this initializer if using a 1.8" TFT screen:
      tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
    
      // OR use this initializer if using a 1.8" TFT screen with offset such as WaveShare:
      // tft.initR(INITR_GREENTAB);      // Init ST7735S chip, green tab
    
      // OR use this initializer (uncomment) if using a 1.44" TFT:
      //tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab
    
      // OR use this initializer (uncomment) if using a 0.96" 160x80 TFT:
      //tft.initR(INITR_MINI160x80);  // Init ST7735S mini display
    
      // OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
      //tft.init(240, 240);           // Init ST7789 240x240
    
      // OR use this initializer (uncomment) if using a 1.69" 280x240 TFT:
      //tft.init(240, 280);           // Init ST7789 280x240
    
      // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
      //tft.init(240, 320);           // Init ST7789 320x240
    
      // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
      //tft.init(135, 240);           // Init ST7789 240x135
      
      // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here
      // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you
      // may end up with a black screen some times, or all the time.
      //tft.setSPISpeed(40000000);
    
      Serial.println(F("Initialized"));
    
      uint16_t time = millis();
      tft.fillScreen(ST77XX_BLACK);
      time = millis() - time;
    
      Serial.println(time, DEC);
      delay(500);
    
      // large block of text
      tft.fillScreen(ST77XX_BLACK);
      testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST77XX_WHITE);
      delay(1000);
    
      // tft print function!
      tftPrintTest();
      delay(4000);
    
      // a single pixel
      tft.drawPixel(tft.width()/2, tft.height()/2, ST77XX_GREEN);
      delay(500);
    
      // line draw test
      testlines(ST77XX_YELLOW);
      delay(500);
    
      // optimized lines
      testfastlines(ST77XX_RED, ST77XX_BLUE);
      delay(500);
    
      testdrawrects(ST77XX_GREEN);
      delay(500);
    
      testfillrects(ST77XX_YELLOW, ST77XX_MAGENTA);
      delay(500);
    
      tft.fillScreen(ST77XX_BLACK);
      testfillcircles(10, ST77XX_BLUE);
      testdrawcircles(10, ST77XX_WHITE);
      delay(500);
    
      testroundrects();
      delay(500);
    
      testtriangles();
      delay(500);
    
      mediabuttons();
      delay(500);
    
      Serial.println("done");
      delay(1000);
    }
    
    void loop() {
      tft.invertDisplay(true);
      delay(500);
      tft.invertDisplay(false);
      delay(500);
    }
    
    void testlines(uint16_t color) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(0, 0, x, tft.height()-1, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(0, 0, tft.width()-1, y, color);
        delay(0);
      }
    
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(tft.width()-1, 0, 0, y, color);
        delay(0);
      }
    
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(0, tft.height()-1, x, 0, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
        delay(0);
      }
    
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
        delay(0);
      }
      for (int16_t y=0; y < tft.height(); y+=6) {
        tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
        delay(0);
      }
    }
    
    void testdrawtext(char *text, uint16_t color) {
      tft.setCursor(0, 0);
      tft.setTextColor(color);
      tft.setTextWrap(true);
      tft.print(text);
    }
    
    void testfastlines(uint16_t color1, uint16_t color2) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t y=0; y < tft.height(); y+=5) {
        tft.drawFastHLine(0, y, tft.width(), color1);
      }
      for (int16_t x=0; x < tft.width(); x+=5) {
        tft.drawFastVLine(x, 0, tft.height(), color2);
      }
    }
    
    void testdrawrects(uint16_t color) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=0; x < tft.width(); x+=6) {
        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
      }
    }
    
    void testfillrects(uint16_t color1, uint16_t color2) {
      tft.fillScreen(ST77XX_BLACK);
      for (int16_t x=tft.width()-1; x > 6; x-=6) {
        tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
      }
    }
    
    void testfillcircles(uint8_t radius, uint16_t color) {
      for (int16_t x=radius; x < tft.width(); x+=radius*2) {
        for (int16_t y=radius; y < tft.height(); y+=radius*2) {
          tft.fillCircle(x, y, radius, color);
        }
      }
    }
    
    void testdrawcircles(uint8_t radius, uint16_t color) {
      for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
        for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
          tft.drawCircle(x, y, radius, color);
        }
      }
    }
    
    void testtriangles() {
      tft.fillScreen(ST77XX_BLACK);
      uint16_t color = 0xF800;
      int t;
      int w = tft.width()/2;
      int x = tft.height()-1;
      int y = 0;
      int z = tft.width();
      for(t = 0 ; t <= 15; t++) {
        tft.drawTriangle(w, y, y, x, z, x, color);
        x-=4;
        y+=4;
        z-=4;
        color+=100;
      }
    }
    
    void testroundrects() {
      tft.fillScreen(ST77XX_BLACK);
      uint16_t color = 100;
      int i;
      int t;
      for(t = 0 ; t <= 4; t+=1) {
        int x = 0;
        int y = 0;
        int w = tft.width()-2;
        int h = tft.height()-2;
        for(i = 0 ; i <= 16; i+=1) {
          tft.drawRoundRect(x, y, w, h, 5, color);
          x+=2;
          y+=3;
          w-=4;
          h-=6;
          color+=1100;
        }
        color+=100;
      }
    }
    
    void tftPrintTest() {
      tft.setTextWrap(false);
      tft.fillScreen(ST77XX_BLACK);
      tft.setCursor(0, 30);
      tft.setTextColor(ST77XX_RED);
      tft.setTextSize(1);
      tft.println("Hello World!");
      tft.setTextColor(ST77XX_YELLOW);
      tft.setTextSize(2);
      tft.println("Hello World!");
      tft.setTextColor(ST77XX_GREEN);
      tft.setTextSize(3);
      tft.println("Hello World!");
      tft.setTextColor(ST77XX_BLUE);
      tft.setTextSize(4);
      tft.print(1234.567);
      delay(1500);
      tft.setCursor(0, 0);
      tft.fillScreen(ST77XX_BLACK);
      tft.setTextColor(ST77XX_WHITE);
      tft.setTextSize(0);
      tft.println("Hello World!");
      tft.setTextSize(1);
      tft.setTextColor(ST77XX_GREEN);
      tft.print(p, 6);
      tft.println(" Want pi?");
      tft.println(" ");
      tft.print(8675309, HEX); // print 8,675,309 out in HEX!
      tft.println(" Print HEX!");
      tft.println(" ");
      tft.setTextColor(ST77XX_WHITE);
      tft.println("Sketch has been");
      tft.println("running for: ");
      tft.setTextColor(ST77XX_MAGENTA);
      tft.print(millis() / 1000);
      tft.setTextColor(ST77XX_WHITE);
      tft.print(" seconds.");
    }
    
    void mediabuttons() {
      // play
      tft.fillScreen(ST77XX_BLACK);
      tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
      tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
      delay(500);
      // pause
      tft.fillRoundRect(25, 90, 78, 60, 8, ST77XX_WHITE);
      tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_GREEN);
      tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_GREEN);
      delay(500);
      // play color
      tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
      delay(50);
      // pause color
      tft.fillRoundRect(39, 98, 20, 45, 5, ST77XX_RED);
      tft.fillRoundRect(69, 98, 20, 45, 5, ST77XX_RED);
      // play color
      tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
    }
    How can I simplify it to print only "Hello world" for the moment?

  4. #4
    Junior Member
    Join Date
    Oct 2021
    Posts
    8
    Quote Originally Posted by PaulStoffregen View Post
    In Arduino, first make sure Teensy 4.1 is selected in Tools > Boards.

    Then click File > Examples > ST7735_t3 > graphicstest

    In the example code, scroll down and look for the defines showing the required connections. Some of the pin names match, so connect those first! For the ones which don't match, "A0" on that display is probably "DC" and "SDA" is probably "MOSI". This display doesn't seem to have any data output, so leave the MISO pin unconnected.

    Exactly how to connect no-name Chinese products can be a bit of a guessing game, since the info published by the Chinese sellers is scant. If you get it working, hope you'll confirm the connection and maybe even share a photo. Might help anyone else who also buys this particular display and also wonders how to make it work.
    Here is a picture of the Screen working with Teensy 4.1 Click image for larger version. 

Name:	spi display.jpg 
Views:	15 
Size:	146.4 KB 
ID:	26477

    and here is the code I'm using:

    Code:
    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
    #include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
    #include <SPI.h>
    
      #define TFT_CS        10
      #define TFT_RST        8 // Or set to -1 and connect to Arduino RESET pin
      #define TFT_DC         9  
    
    
    // OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
    // to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
    // SCLK = pin 13. This is the fastest mode of operation and is required if
    // using the breakout board's microSD card.
    
    // For 1.44" and 1.8" TFT with ST7735 use:
    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
    
    // For 1.14", 1.3", 1.54", 1.69", and 2.0" TFT with ST7789:
    //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
    
    
    // OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
    // tradeoff being that performance is not as fast as hardware SPI above.
    //#define TFT_MOSI 11  // Data out
    //#define TFT_SCLK 13  // Clock out
    
    // For ST7735-based displays, we will use this call
    //Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
    
    // OR for the ST7789-based displays, we will use this call
    //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
    
    
    float p = 3.1415926;
    
    void setup(void) {
      Serial.begin(9600);
      Serial.print(F("Hello! ST77xx TFT Test"));
    
      // Use this initializer if using a 1.8" TFT screen:
      tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
    
      // OR use this initializer if using a 1.8" TFT screen with offset such as WaveShare:
      // tft.initR(INITR_GREENTAB);      // Init ST7735S chip, green tab
    
      // OR use this initializer (uncomment) if using a 1.44" TFT:
      //tft.initR(INITR_144GREENTAB); // Init ST7735R chip, green tab
    
      // OR use this initializer (uncomment) if using a 0.96" 160x80 TFT:
      //tft.initR(INITR_MINI160x80);  // Init ST7735S mini display
    
      // OR use this initializer (uncomment) if using a 1.3" or 1.54" 240x240 TFT:
      //tft.init(240, 240);           // Init ST7789 240x240
    
      // OR use this initializer (uncomment) if using a 1.69" 280x240 TFT:
      //tft.init(240, 280);           // Init ST7789 280x240
    
      // OR use this initializer (uncomment) if using a 2.0" 320x240 TFT:
      //tft.init(240, 320);           // Init ST7789 320x240
    
      // OR use this initializer (uncomment) if using a 1.14" 240x135 TFT:
      //tft.init(135, 240);           // Init ST7789 240x135
      
      // SPI speed defaults to SPI_DEFAULT_FREQ defined in the library, you can override it here
      // Note that speed allowable depends on chip and quality of wiring, if you go too fast, you
      // may end up with a black screen some times, or all the time.
      //tft.setSPISpeed(40000000);
    
      Serial.println(F("Initialized"));
    
      uint16_t time = millis();
      tft.fillScreen(ST77XX_BLACK);
      time = millis() - time;
    
      Serial.println(time, DEC);
      delay(500);
    
      // large block of text
      tft.fillScreen(ST77XX_BLACK);
      testdrawtext("Hello World ", ST77XX_WHITE);
      delay(1000);
    }
    
    void loop() {
    //  tft.invertDisplay(true);
    //  delay(500);
    //  tft.invertDisplay(false);
    //  delay(500);
    }
    
    
    
    void testdrawtext(char *text, uint16_t color) {
      tft.setCursor(0, 0);
      tft.setTextColor(color);
      tft.setTextWrap(true);
      tft.print(text);
    }

  5. #5
    Junior Member
    Join Date
    Oct 2021
    Posts
    8
    So I have this code that can open a text file from sd card:

    Code:
     #include <SD.h>
    #include <SPI.h>
    
    File myFile;
    
    // Teensy 3.5 & 3.6 & 4.1 on-board: BUILTIN_SDCARD
    const int chipSelect = BUILTIN_SDCARD;
    
    
    char scaleName;
    char scaleDescription;
    uint8_t numOfNotes;
    uint16_t scaleData;
    
    void setup()
    {
     //UNCOMMENT THESE TWO LINES FOR TEENSY AUDIO BOARD:
     //SPI.setMOSI(7);  // Audio shield has MOSI on pin 7
     //SPI.setSCK(14);  // Audio shield has SCK on pin 14
      
     // Open serial communications and wait for port to open:
      Serial.begin(9600);
       while (!Serial) {
        ; // wait for serial port to connect.
      }
    
    
      Serial.print("Initializing SD card...");
    
      if (!SD.begin(chipSelect)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
      
     //open the file for reading:
      myFile = SD.open("avicenna_diat.scl");
      if (myFile) {
        Serial.println("File Data: ");
        
        // read from the file until there's nothing else in it:
        while (myFile.available()) {
          Serial.write(myFile.read());
        }
        // close the file:
        myFile.close();
      } else {
        // if the file didn't open, print an error:
        Serial.println("error opening test.txt");
      }
    }
    
    void loop()
    {
    }
    and that code for using the display:

    Code:
    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
    #include <SPI.h>
    
      #define TFT_CS 10
      #define TFT_RST 8 
      #define TFT_DC  9  
    
    
    
    // For 1.44" and 1.8" TFT with ST7735 use:
    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
    
    
    void setup(void) {
      Serial.begin(9600);
      Serial.print(F("Hello! ST77xx TFT Test"));
    
      // Use this initializer if using a 1.8" TFT screen:
      tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
    
    
      Serial.println(F("Initialized"));
    
      uint16_t time = millis();
      tft.fillScreen(ST77XX_BLACK);
      time = millis() - time;
    
      Serial.println(time, DEC);
      delay(500);
    
      // large block of text
      tft.fillScreen(ST77XX_BLACK);
      testdrawtext("Hello World ", ST77XX_WHITE);
      delay(1000);
    }
    
    void loop() {
    
    }
    
    
    
    void testdrawtext(char *text, uint16_t color) {
      tft.setCursor(0, 0);
      tft.setTextColor(color);
      tft.setTextWrap(true);
      tft.print(text);
    }
    At first I would like to print the text file from the first code into the display.
    How can I do so?

  6. #6
    Senior Member
    Join Date
    Nov 2012
    Posts
    1,768
    This is a quick and dirty way to write the text to the screen. It would need to be modified if the text file contains more lines than will fit on the screen, or if the lines are too long.

    Code:
    //>>>
    #include <SD.h>
    File myFile;
    const int chipSelect = BUILTIN_SDCARD;
    
    #include <Adafruit_GFX.h>    // Core graphics library
    #include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
    #include <SPI.h>
    
      #define TFT_CS 10
      #define TFT_RST 8 
      #define TFT_DC  9  
    
    // For 1.44" and 1.8" TFT with ST7735 use:
    Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
    
    
    void setup(void) {
      Serial.begin(9600);
      Serial.print(F("Hello! ST77xx TFT Test"));
    
      // Use this initializer if using a 1.8" TFT screen:
      tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
    
      Serial.println(F("Initialized"));
    
      uint16_t time = millis();
      tft.fillScreen(ST77XX_BLACK);
      time = millis() - time;
    
      Serial.println(time, DEC);
      delay(500);
    
      // large block of text
      tft.fillScreen(ST77XX_BLACK);
      
    //  testdrawtext("Hello World ", ST77XX_WHITE);
    //  delay(1000);
    //>>>
      // This orients my display so that the text is written
      // along the 160 pixel wide width
      // Valid values are 0, 1, 2 and 3
      tft.setRotation(1);
      // This will truncate long lines
      tft.setTextWrap(false);
      Serial.print("Initializing SD card...");
    
      if (!SD.begin(chipSelect)) {
        Serial.println("initialization failed!");
        return;
      }
      Serial.println("initialization done.");
      int y_posn = 0;
      int x_posn = 0;
     //open the file for reading:
      char *fname = "avicenna_diat.scl";
      myFile = SD.open(fname);
      if (myFile) {
       
        // read from the file until there's nothing else in it:
        while (myFile.available()) {
          char c = myFile.read();
          // handle newline.
          if(c == '\n') {
            y_posn += 8;
            x_posn = 0;
            continue;
          }
          // Ignore carriage return characters
          if(c == '\r')continue;
          testdrawchar(c, x_posn, y_posn,ST77XX_WHITE);
          x_posn += 6;
        }
        // close the file:
        myFile.close();
      } else {
        // if the file didn't open, print an error:
        Serial.printf("error opening %s\n",fname);
      }
    }
    
    void loop() {
    
    }
    
    //>>>
    // NOTE that the coordinates are in pixels - not characters.
    // This is why y is incremented by 8 and x is incremented by 6
    void testdrawchar(char c, int x_posn, int y_posn,uint16_t color) {
      tft.setCursor(x_posn, y_posn);
      tft.setTextColor(color);
      tft.print(c);
    }
    
    void testdrawtext(char *text, uint16_t color) {
      tft.setCursor(0, 0);
      tft.setTextColor(color);
      tft.setTextWrap(true);
      tft.print(text);
    }
    Pete

Posting Permissions

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