Genuino 101 mit TFT 1,8" ärgert mich

Hab ein Genuino mit diesen TFT Shield.

In der IDE den Genuino 101 installiert und die Lib von Adafruit geladen.

Will ich ein Beispiel laden:

Gibt es gleich ne Fehlermeldung:

In file included from C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master/Adafruit_GFX.h:5:0,
                 from shieldtest.ino:17:
C:\Users\CarstenTower\AppData\Roaming\Arduino15\packages\Intel\hardware\arc32\1.0.5\cores\arduino/Arduino.h:33:2: error: #error IDE version incompatible with Arduino 101. Please upgrade to version 1.6.7 or newer.
 #error IDE version incompatible with Arduino 101. Please upgrade to version 1.6.7 or newer.
  ^
shieldtest.ino: In function 'void loop()':
shieldtest.ino:112:31: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
shieldtest.ino: In function 'void bmpDraw(char*, uint8_t, uint8_t)':
shieldtest.ino:151:40: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]
Fehler beim Kompilieren.

Was mache ich falsch?? :o

Beipielcode:

/***************************************************
  This is an example sketch for the Adafruit 1.8" TFT shield with joystick
  ----> http://www.adafruit.com/products/802

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 pins are required to
  interface
  One pin is also needed for the joystick, we use analog 3
  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>
#include <Adafruit_ST7735.h>
#include <SD.h>
#include <SPI.h>

#if defined(__SAM3X8E__)
    #undef __FlashStringHelper::F(string_literal)
    #define F(string_literal) string_literal
#endif

// TFT display and SD card will share the hardware SPI interface.
// Hardware SPI pins are specific to the Arduino board type and
// cannot be remapped to alternate pins.  For Arduino Uno,
// Duemilanove, etc., pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK.
#define SD_CS    4  // Chip select line for SD card
#define TFT_CS  10  // Chip select line for TFT display
#define TFT_DC   8  // Data/command line for TFT
#define TFT_RST  -1  // Reset line for TFT (or connect to +5V)

Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

#define BUTTON_NONE 0
#define BUTTON_DOWN 1
#define BUTTON_RIGHT 2
#define BUTTON_SELECT 3
#define BUTTON_UP 4
#define BUTTON_LEFT 5

void setup(void) {
  Serial.begin(9600);

  // Initialize 1.8" TFT
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab

  Serial.println("OK!");
  tft.fillScreen(ST7735_BLACK);
}


uint8_t readButton(void) {
  float a = analogRead(3);
  
  a *= 5.0;
  a /= 1024.0;
  
  Serial.print("Button read analog = ");
  Serial.println(a);
  if (a < 0.2) return BUTTON_DOWN;
  if (a < 1.0) return BUTTON_RIGHT;
  if (a < 1.5) return BUTTON_SELECT;
  if (a < 2.0) return BUTTON_UP;
  if (a < 3.2) return BUTTON_LEFT;
  else return BUTTON_NONE;
}

uint8_t buttonhistory = 0;

void loop() {
  uint8_t b = readButton();
  tft.setTextSize(3);
  if (b == BUTTON_DOWN) {
    tft.setTextColor(ST7735_RED);
    tft.setCursor(0, 10);
    tft.print("Down ");
    buttonhistory |= 1;
  }
  if (b == BUTTON_LEFT) {
    tft.setTextColor(ST7735_YELLOW);
    tft.setCursor(0, 35);
     tft.print("Left ");
    buttonhistory |= 2;
  }
  if (b == BUTTON_UP) {
    tft.setTextColor(ST7735_GREEN);
    tft.setCursor(0, 60);
    tft.print("Up"); 
    buttonhistory |= 4;
  }
  if (b == BUTTON_RIGHT) {
    tft.setTextColor(ST7735_BLUE);
    tft.setCursor(0, 85);
    tft.print("Right");
    buttonhistory |= 8;
  }
  if ((b == BUTTON_SELECT) && (buttonhistory == 0xF)) {
    tft.setTextColor(ST7735_MAGENTA);
    tft.setCursor(0, 110);
    tft.print("SELECT");
    buttonhistory |= 8;
    delay(2000);
    Serial.print("Initializing SD card...");
    if (!SD.begin(SD_CS)) {
      Serial.println("failed!");
      return;
    }
    bmpDraw("parrot.bmp", 0, 0);
    while (1);
  }
  delay(100);
}

// This function opens a Windows Bitmap (BMP) file and
// displays it at the given coordinates.  It's sped up
// by reading many pixels worth of data at a time
// (rather than pixel by pixel).  Increasing the buffer
// size takes more of the Arduino's precious RAM but
// makes loading a little faster.  20 pixels seems a
// good balance.

#define BUFFPIXEL 20

void bmpDraw(char *filename, uint8_t x, uint8_t y) {

  File     bmpFile;
  int      bmpWidth, bmpHeight;   // W+H in pixels
  uint8_t  bmpDepth;              // Bit depth (currently must be 24)
  uint32_t bmpImageoffset;        // Start of image data in file
  uint32_t rowSize;               // Not always = bmpWidth; may have padding
  uint8_t  sdbuffer[3*BUFFPIXEL]; // pixel buffer (R+G+B per pixel)
  uint8_t  buffidx = sizeof(sdbuffer); // Current position in sdbuffer
  boolean  goodBmp = false;       // Set to true on valid header parse
  boolean  flip    = true;        // BMP is stored bottom-to-top
  int      w, h, row, col;
  uint8_t  r, g, b;
  uint32_t pos = 0, startTime = millis();

  if((x >= tft.width()) || (y >= tft.height())) return;

  Serial.println();
  Serial.print("Loading image '");
  Serial.print(filename);
  Serial.println('\'');

  // Open requested file on SD card
  if ((bmpFile = SD.open(filename)) == NULL) {
    Serial.print("File not found");
    return;
  }

  // Parse BMP header
  if(read16(bmpFile) == 0x4D42) { // BMP signature
    Serial.print("File size: "); Serial.println(read32(bmpFile));
    (void)read32(bmpFile); // Read & ignore creator bytes
    bmpImageoffset = read32(bmpFile); // Start of image data
    Serial.print("Image Offset: "); Serial.println(bmpImageoffset, DEC);
    // Read DIB header
    Serial.print("Header size: "); Serial.println(read32(bmpFile));
    bmpWidth  = read32(bmpFile);
    bmpHeight = read32(bmpFile);
    if(read16(bmpFile) == 1) { // # planes -- must be '1'
      bmpDepth = read16(bmpFile); // bits per pixel
      Serial.print("Bit Depth: "); Serial.println(bmpDepth);
      if((bmpDepth == 24) && (read32(bmpFile) == 0)) { // 0 = uncompressed

        goodBmp = true; // Supported BMP format -- proceed!
        Serial.print("Image size: ");
        Serial.print(bmpWidth);
        Serial.print('x');
        Serial.println(bmpHeight);

        // BMP rows are padded (if needed) to 4-byte boundary
        rowSize = (bmpWidth * 3 + 3) & ~3;

        // If bmpHeight is negative, image is in top-down order.
        // This is not canon but has been observed in the wild.
        if(bmpHeight < 0) {
          bmpHeight = -bmpHeight;
          flip      = false;
        }

        // Crop area to be loaded
        w = bmpWidth;
        h = bmpHeight;
        if((x+w-1) >= tft.width())  w = tft.width()  - x;
        if((y+h-1) >= tft.height()) h = tft.height() - y;

        // Set TFT address window to clipped image bounds
        tft.setAddrWindow(x, y, x+w-1, y+h-1);

        for (row=0; row<h; row++) { // For each scanline...

          // Seek to start of scan line.  It might seem labor-
          // intensive to be doing this on every line, but this
          // method covers a lot of gritty details like cropping
          // and scanline padding.  Also, the seek only takes
          // place if the file position actually needs to change
          // (avoids a lot of cluster math in SD library).
          if(flip) // Bitmap is stored bottom-to-top order (normal BMP)
            pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize;
          else     // Bitmap is stored top-to-bottom
            pos = bmpImageoffset + row * rowSize;
          if(bmpFile.position() != pos) { // Need seek?
            bmpFile.seek(pos);
            buffidx = sizeof(sdbuffer); // Force buffer reload
          }

          for (col=0; col<w; col++) { // For each pixel...
            // Time to read more pixel data?
            if (buffidx >= sizeof(sdbuffer)) { // Indeed
              bmpFile.read(sdbuffer, sizeof(sdbuffer));
              buffidx = 0; // Set index to beginning
            }

            // Convert pixel from BMP to TFT format, push to display
            b = sdbuffer[buffidx++];
            g = sdbuffer[buffidx++];
            r = sdbuffer[buffidx++];
            tft.pushColor(tft.Color565(r,g,b));
          } // end pixel
        } // end scanline
        Serial.print("Loaded in ");
        Serial.print(millis() - startTime);
        Serial.println(" ms");
      } // end goodBmp
    }
  }

  bmpFile.close();
  if(!goodBmp) Serial.println("BMP format not recognized.");
}

// These read 16- and 32-bit types from the SD card file.
// BMP data is stored little-endian, Arduino is little-endian too.
// May need to reverse subscript order if porting elsewhere.

uint16_t read16(File f) {
  uint16_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read(); // MSB
  return result;
}

uint32_t read32(File f) {
  uint32_t result;
  ((uint8_t *)&result)[0] = f.read(); // LSB
  ((uint8_t *)&result)[1] = f.read();
  ((uint8_t *)&result)[2] = f.read();
  ((uint8_t *)&result)[3] = f.read(); // MSB
  return result;
}

#error IDE version incompatible with Arduino 101. Please upgrade to version 1.6.7 or newer.
Steht doch da. Er meckert, das deine IDE zu alt ist und er gerne 1.6.7 oder neuer hätte

Nee, wa...

Hab tatsächlich 1.6.5 drauf. :o

Bin wohl ein bisschen bekloppt...

Sollte heute zeitig schlafen gehen... :grin:

Updaten geht wohl nicht. Muß wirklich erst 1.6.5 deinstallieren und dann 1.6.8 neu drauf.
Muß ich dann eigentlich alle Lib's und Boards neu laden?

stoni99:
Nee, wa...

Hab tatsächlich 1.6.5 drauf. :o

Bin wohl ein bisschen bekloppt...

Sollte heute zeitig schlafen gehen... :grin:

Updaten geht wohl nicht. Muß wirklich erst 1.6.5 deinstallieren und dann 1.6.8 neu drauf.
Muß ich dann eigentlich alle Lib's und Boards neu laden?

Nimm die ZIP-Version, die brauchst du nur reinkopieren.

Und die Warnung bekommst du weg wenn du aus:

void bmpDraw(char*, uint8_t, uint8_t)

Das machst:

void bmpDraw(const char*, uint8_t, uint8_t)

String Literale sind const! Es ist großer Unsinn die an einen Zeiger auf nicht-const Daten zu übergeben

Hoppla!

IDE 1.6.8 drauf, void bmpDraw(const char*, uint8_t, uint8_t) verbessert.

Gibt gleich noch mehr Fehlermeldungen. Passen nicht alle hier rein:

C:\Users\CARSTE~1\AppData\Local\Temp\arduino_modified_sketch_326513\shieldtest.ino: In function 'void bmpDraw(const char*, uint8_t, uint8_t)':

C:\Users\CARSTE~1\AppData\Local\Temp\arduino_modified_sketch_326513\shieldtest.ino:151:40: warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]

   if ((bmpFile = SD.open(filename)) == NULL) {

                                        ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'virtual size_t Adafruit_GFX::write(uint8_t)':

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:44:61: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

  #define pgm_read_word(addr) (*(const unsigned short *)(addr))

                                                             ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:45:42: note: in expansion of macro 'pgm_read_word'

  #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:480:42: note: in expansion of macro 'pgm_read_pointer'

         GFXglyph *glyph = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c2]);

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:44:62: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

  #define pgm_read_word(addr) (*(const unsigned short *)(addr))

                                                              ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:45:42: note: in expansion of macro 'pgm_read_word'

  #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:480:42: note: in expansion of macro 'pgm_read_pointer'

         GFXglyph *glyph = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c2]);

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp: In member function 'void Adafruit_GFX::drawChar(int16_t, int16_t, unsigned char, uint16_t, uint16_t, uint8_t)':

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:44:61: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

  #define pgm_read_word(addr) (*(const unsigned short *)(addr))

                                                             ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:45:42: note: in expansion of macro 'pgm_read_word'

  #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:539:39: note: in expansion of macro 'pgm_read_pointer'

     GFXglyph *glyph  = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]);

                                       ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:44:62: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

  #define pgm_read_word(addr) (*(const unsigned short *)(addr))

                                                              ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:45:42: note: in expansion of macro 'pgm_read_word'

  #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:539:39: note: in expansion of macro 'pgm_read_pointer'

     GFXglyph *glyph  = &(((GFXglyph *)pgm_read_pointer(&gfxFont->glyph))[c]);

                                       ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:44:61: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

  #define pgm_read_word(addr) (*(const unsigned short *)(addr))

                                                             ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:45:42: note: in expansion of macro 'pgm_read_word'

  #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))

                                          ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:540:35: note: in expansion of macro 'pgm_read_pointer'

     uint8_t  *bitmap = (uint8_t *)pgm_read_pointer(&gfxFont->bitmap);

                                   ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:44:62: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]

  #define pgm_read_word(addr) (*(const unsigned short *)(addr))

                                                              ^

C:\Users\CarstenTower\Documents\Arduino\libraries\Adafruit-GFX-Library-master\Adafruit_GFX.cpp:45:42: note: in expansion of macro 'pgm_read_word'

  #define pgm_read_pointer(addr) ((void *)pgm_read_word(addr))

                                          ^

...
...
...
...
...

Das sind Warnungen. Nicht Fehler!

Alles Sachen wo etwas leichtfertig mit Datentypen und Zeigern umgegangen wird. C++ Casts (statt die einfachen C Casts) könnten hier Abhilfe schaffen.

Aber das sind Warnungen in den Libraries selbst. Nicht in deinem eigenen Code. Ich habe festgestellt, dass die meistens nur einmal am Anfang kommen, und dann aus irgendeinem Grund nicht mehr angezeigt werden.

Hast Du kontrolliert ob die Bibliothek überhaupt mit dem Genuino 101 kompatibel ist?
Grüße Uwe

uwefed:
Hast Du kontrolliert ob die Bibliothek überhaupt mit dem Genuino 101 kompatibel ist?
Grüße Uwe

Nö, natürlich nicht!

Trau mich kaum - muss unbedingt kompatibel sein...

Serenifly:
Das sind Warnungen. Nicht Fehler!

Nö, nö, IDE bricht Übertragung zum Board ab.

stoni99:
Nö, natürlich nicht!

Trau mich kaum - muss unbedingt kompatibel sein...

Beim Ada-Früchtchen steht nix zur Kompatibilität drin, bei der Lib kann ich dazu auch nix finden.

Hab aber mal den gleichen Test-Sketch mit der Uno-Board-Einstellung kompiliert - da kommt keine Fehlermeldung.

Grrr, dann wird es wohl inkompatibel mit dem Genuino 101 sein. >:( Heul & an die Wand schmeiß... :kissing:

Der 101 hat einen anderen Kontroller als der UNO. Darum sind inkompatibilitäten von Bibliotheken sicher solange sie nicht auf den 101 angepaßt wurden (also alle nicht offizielle Arduino-IDE-Bibliotheken)
grüße Uwe

Hmm, lässt sich zwar auf den Uno laden aber bringt nur weißen Bildschirm.

Muss ich hier Einstellungen anpassen?:

/***************************************************
  This is an example sketch for the Adafruit 1.8" TFT shield with joystick
  ----> http://www.adafruit.com/products/802

  Check out the links above for our tutorials and wiring diagrams
  These displays use SPI to communicate, 4 pins are required to
  interface
  One pin is also needed for the joystick, we use analog 3
  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>
#include <Adafruit_ST7735.h>
#include <SD.h>
#include <SPI.h>

#if defined(__SAM3X8E__)
    #undef __FlashStringHelper::F(string_literal)
    #define F(string_literal) string_literal
#endif

// TFT display and SD card will share the hardware SPI interface.
// Hardware SPI pins are specific to the Arduino board type and
// cannot be remapped to alternate pins.  For Arduino Uno,
// Duemilanove, etc., pin 11 = MOSI, pin 12 = MISO, pin 13 = SCK.
#define SD_CS    4  // Chip select line for SD card
#define TFT_CS  10  // Chip select line for TFT display
#define TFT_DC   8  // Data/command line for TFT
#define TFT_RST  -1  // Reset line for TFT (or connect to +5V)

Hab's nach langem Suchen gefunden:

Kontaktfehler :o

Geht nun mit dem Uno problemlos. Sketch muss nicht angepasst werden. Nur beim Mega, Leonardo, Due muß Code angepasst werden.

Schade, das sich der Genuino 101 so zickig hat. Der klebt jetzt an der Wand... :grin:

stoni99:
Nö, nö, IDE bricht Übertragung zum Board ab.

Kompilieren und Hochladen sind zwei völlig getrennte Schritte. Das hat nichts miteinander zu tun

Ich dachte: Vor dem Hochladen kompiliert die IDE auch noch mal?!

Wo ist der Unterschied zw. dem einzelnen Kompilieren und dem was er vor dem Hochladen macht?

IDE: Datei/Voreinstellungen zwei Häkchen bei "Ausführliche Ausgabe" setzen und Du siehst, was passiert.