C++ Arduino error "stray '\221' in program"

-1

I am trying to interface TFT display with an Arduino board

I am using this 2.8’ TFT display https://robu.in/product/2-8-inch-spi-touch-screen-module-tft-interface-240320/. It has ILI9341 driver IC.

I am getting following error while compiling the code

Not used: C:\Program Files (x86)\Arduino\libraries\SPI
exit status 1 stray '\221' in program

I am using the following 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
     ****************************************************/


    #include "SPI.h"
    #include "Adafruit_GFX.h"
    #include "Adafruit_ILI9341.h"

    // For the Adafruit shield, these are the default.
    #define TFT_DC 9
    #define TFT_CS 10

    // 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'); 

      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) {
      for(uint8_t rotation=0; rotation<4; rotation++) {
        tft.setRotation(rotation);
        testText();
        delay(1000);
      }
    }

    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;
    }

I am in middle of college project any quick help would be really appreciated.

c++
arduino
tftp
asked on Stack Overflow May 15, 2020 by Vishal Shinde • edited May 15, 2020 by JohnFilleau

2 Answers

1

This line

Serial.println(‘ILI9341');

has an illegal character: which is one of those fancy quotation marks that a program like MS Word autocompletes when you try to type '.

After you fix that, note that in C++ ' is used around characters, not string literals. A multi-character literal like you have has implementation-defined behavior. I.e., I have no idea what it would do in this case.

Your probably want

Serial.println("ILI9341");

or better yet

Serial.println(F("ILI9341"));

to read the string literal from flash (instead of storing it in SRAM). You lose time because of the flash read operation, but generally these embedded devices that interact with people are limited by button presses more than flash access. Also all of your other string literals are designated to be read from flash, so I think it looks nicer.


If that still doesn't fix it, then you likely have some other hidden characters in your text editor that aren't being copied to this site when you're posting your question.

Copy the offending line (and the one above and below for good measure) DIRECTLY FROM YOUR IDE, and paste it to a site like https://www.soscisurvey.de/tools/view-chars.php. Mouse over each character to see what it is.

answered on Stack Overflow May 15, 2020 by JohnFilleau • edited May 15, 2020 by JohnFilleau
-1

In the line highlighted in the error, the opening and closing characters are different.

answered on Stack Overflow May 15, 2020 by John Greenwood

User contributions licensed under CC BY-SA 3.0