Arduino Forum

International => Deutsch => Topic started by: Hobo_D on Jul 11, 2016, 08:36 pm

Title: ADAFRUIT GFX LIBRARY
Post by: Hobo_D on Jul 11, 2016, 08:36 pm
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?
Title: Re: ADAFRUIT GFX LIBRARY
Post by: agmue on Jul 11, 2016, 09:38 pm
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)
Title: Re: ADAFRUIT GFX LIBRARY
Post by: Hobo_D on Jul 11, 2016, 10:13 pm
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"};
Title: Re: ADAFRUIT GFX LIBRARY
Post by: Serenifly on Jul 11, 2016, 10:43 pm
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 (https://www.arduino.cc/en/Reference/CStr)

Eine Alternative rein mit C Strings ist sprintf(), aber das wird dich wahrscheinlich zu sehr verwirren
Title: Re: ADAFRUIT GFX LIBRARY
Post by: Whandall on Jul 12, 2016, 12:27 am
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
Title: Re: ADAFRUIT GFX LIBRARY
Post by: michael_x on Jul 12, 2016, 03:11 pm
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
Title: Re: ADAFRUIT GFX LIBRARY
Post by: Hobo_D on Jul 12, 2016, 09:42 pm
Super.
Es funktioniert.
Vielen Dank an Alle die sich die Mühe gemacht haben zu antworten.