Go Down

Topic: ADAFRUIT GFX LIBRARY (Read 1 time) previous topic - next topic

Hobo_D

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?

agmue

#1
Jul 11, 2016, 09:38 pm Last Edit: Jul 11, 2016, 09:39 pm by agmue
Die Funktion bmpDraw möchte einen Zeiger auf char, nicht String. So funktioniert das bei mir:
Code: [Select]
char picture[]={"woof.bmp"};
  bmpDraw(picture, 0, 0);

(Beispiel tftbmp der Bibliothek Adafruit_TFTLCD)
Wahnsinn und Verstand trennt nur eine dünne Wand. (Daniel Düsentrieb)

Hobo_D

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

Serenifly

#3
Jul 11, 2016, 10:43 pm Last Edit: Jul 11, 2016, 10:45 pm by Serenifly
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:
https://www.arduino.cc/en/Reference/CStr

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

Whandall

Code: [Select]
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() {}
Code: [Select]
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
Ah, this is obviously some strange usage of the word 'safe' that I wasn't previously aware of. (D.Adams)

michael_x

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

Code: [Select]
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() {}

Code: [Select]
TEST0001.bmp
TEST0002.bmp
[ ... ]
TEST0024.bmp
besser als mit String Objekten allemal

Hobo_D

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

Go Up