ADAFRUIT GFX LIBRARY

Hallo Zusammen,

ich bräuchte Mal etwas Hilfe.
Irgendwie stehe ich auf dem Schlauch und komme nicht weiter.

Ich habe ein Adafruit TFT-Touch und alles funktioniert einwandfrei.
Ich nutze die ADAFRUIT GFX LIBRARY
Jetzt möchte ich ein Bild mit dem Befehl bmpDraw("1.bmp", 0, 0); laden
Bild wird angezeigt.
Ebenso ist es logischerweise möglich ein anderes Bild mit dem Befehl bmpDraw("2.bmp", 0, 0); zu laden
Ich möchte den Namen nun durch eine Variable ersetzen.
Dies gelingt mir aber nicht.
zB:
String picture = String(oldUID + String(".bmp"));
Serial.println(picture); // der String zeigt es korrekt an
bmpDraw(picture, 10, 1);

Es funktioniert aber nicht.
Ich habe im Netz immer nur Beispiele gefunden wo der Dateiname komplett angegeben wird.
Leider kein Beispiel mit Variabelen.

Wie muß ich es wandeln damit es funktioniert?

Die Funktion bmpDraw möchte einen Zeiger auf char, nicht String. So funktioniert das bei mir:

 char picture[]={"woof.bmp"};
  bmpDraw(picture, 0, 0);

(Beispiel tftbmp der Bibliothek Adafruit_TFTLCD)

Danke für die schnelle Antwort.
Aber leider komme ich damit nicht weiter.
Jetzt steht der Dateiname nach dem char.
Mein Ziel ist es an eine Integer Variable das .bmp dran zu hängen und diese Bild anzuzeigen.
Und zwar möchte ich per RFID eine Schlüsselkarte auslesen und entsprechend der Nummer ein Bild laden.
Also praktisch so:
char picture[] = {Nummer + ".bmp"};

Lerne den Unterschied zwischen C Strings und der Arduino String Klasse. Sonst wird das nichts. C Strings kannst du nicht mit + konkatenieren!

Mit c_str() kommst du an das interne char Array eines String Objekts:

Eine Alternative rein mit C Strings ist sprintf(), aber das wird dich wahrscheinlich zu sehr verwirren

void setup() {
  char fName[13];
  Serial.begin(115200);
  for (int nummer = 0; nummer < 25; nummer++) {
    itoa(nummer, fName, 10);
    strcat(fName, ".bmp");
    Serial.println(fName);
  }
}
void loop() {}
0.bmp
1.bmp
2.bmp
3.bmp
4.bmp
5.bmp
6.bmp
7.bmp
8.bmp
9.bmp
10.bmp
11.bmp
12.bmp
13.bmp
14.bmp
15.bmp
16.bmp
17.bmp
18.bmp
19.bmp
20.bmp
21.bmp
22.bmp
23.bmp
24.bmp

Wenn man ein bisschen Flash-Speicher für den sprintf - Overhead übrig hat, ist dies auch recht nett:

void setup() {
  char fName[13];
  Serial.begin(115200);
  for (int nummer = 0; nummer < 25; nummer++) {
    sprintf("TEST%04d.bmp", nummer);
    Serial.println(fName);
  }
}
void loop() {}
TEST0001.bmp
TEST0002.bmp
[ ... ]
TEST0024.bmp

besser als mit String Objekten allemal

Super.
Es funktioniert.
Vielen Dank an Alle die sich die Mühe gemacht haben zu antworten.