Arduino Forum

International => Deutsch => Topic started by: Epae on Nov 23, 2014, 11:17 am

Title: SD Image Daten auf's 3.2 TFT
Post by: Epae on Nov 23, 2014, 11:17 am
Habe Schwierigkeiten eine c. Datei von der SD Card auf das 3.2 TFT zubringen.
Als Unterdatei klappt dies Problemlos, nur eben nicht von der SD Card gelesen.
Unten mein (kläglicher) Versuch. Bin halt immer noch Anfänger.

 #include <SD.h>
 #include <UTFT.h>
 #include <avr/pgmspace.h>
 UTFT myGLCD(ITDB32S,38,39,40,41);
 const int chipSelect = 53;
 extern unsigned int bildchen[0x1FA4];
 void setup()
 {
 pinMode(53, OUTPUT);
 File dataFile = SD.open("bildchen.c");
 myGLCD.InitLCD(LANDSCAPE);
 myGLCD.fillScr(255, 255, 255);
 myGLCD.drawBitmap (110, 70, 90, 90, bildchen, 1);
 dataFile.close();
 }   
 void loop() { }

Verwende die UTFT Library.
Würde mich sehr freuen wenn jemand gleich die passenden Änderungen machen könnte.

Die 90x90 Pixel Bildchen fänden Anwendung in einer von mir gemachten Touchscreen
Steuerung. Sie existiert, funktioniert und ist sehr umfangreich. Leider sind meine Touch-Symbole
bisher zu abstrakt, und werden nicht verstanden. Bilder wären besser, leider auch Umfangreicher.

Gruß EPAE 
Title: Re: SD Image Daten auf's 3.2 TFT
Post by: michael_x on Nov 23, 2014, 11:57 am
Quote
extern unsigned int bildchen[0x1FA4];
16200 Byte Ram sind nicht auf jedem Arduino verfügbar, ist nur extern deklariert, und wird auch nie beschrieben.
Quote
Als Unterdatei klappt dies Problemlos
Dann zeig mal wie das aussieht. Vermutlich mit PROGMEM.  ;)

Ausserdem solltest du den Quelltext  bildchen.c in ein binäres Format (.bmp) ändern, damit du es auf dem Arduino leichter mit dem einlesen hast.
SD.open() alleine macht nichts, ausser die Datei auf der SD suchen.

Nachtrag:
Wenn du Platz im RAM hast, musst du dich nur noch um das richtige bitmap (http://en.wikipedia.org/wiki/BMP_file_format#Bitmap_file_header) Format kümmern, damit es zu deiner Funktion myGLCD.drawBitmap  passt. -> Header der .bmp Dateien überlesen, eine Datei für drawBitmap auf mehrere Blöcke verteilen ...


Title: Re: SD Image Daten auf's 3.2 TFT
Post by: Serenifly on Nov 23, 2014, 12:34 pm
16200 Byte Ram sind nicht auf jedem Arduino verfügbar, ist nur extern deklariert, und wird auch nie beschrieben. Dann zeig mal wie das aussieht.
Das kommt auch nicht ins RAM, sondern wird in einer Datei mit PROGMEM deklariert und ins Flash geschrieben.

Dateien von SD zu lesen geht mit UTFT nicht ohne die Library zu modifzieren
Title: Re: SD Image Daten auf's 3.2 TFT
Post by: Epae on Nov 23, 2014, 01:44 pm
Dank an Euch!
Zunächst, SD ist nötig da ich 12 Bildchen brauche. 12 x 16.2KB !!! Verwende den Mega.
Lässt sich nicht vielleicht jeweils ein Bild in den Flash laden und dann mit
   myGLCD.drawBitmap   ausführen und dann wieder löschen oder überschreiben ?
Mein Problem ist, dass ich das nicht hinkriege!
Währt Ihr so nett ein Paar Programmzeilen zu schreiben?
 
Title: Re: SD Image Daten auf's 3.2 TFT
Post by: Serenifly on Nov 23, 2014, 02:08 pm
Quote
Lässt sich nicht vielleicht jeweils ein Bild in den Flash laden und dann mit myGLCD.drawBitmap   ausführen und dann wieder löschen oder überschreiben ?
Nein. Das Flash wird einmal beim Programmieren geschrieben.

Du müsstest die drawBitmap() Methode selbst anpassen!! Wie soll das denn sonst gehen? drawBitmap() liest Daten die im Flash stehen. Das heißt du müsstest eine alternative Version der Methode schreiben, die die Daten von der SD Karte liest.

In der Methode gibt es so Zeilen wie das hier:
Code: [Select]

col=pgm_read_word(&data[tc]);

Das liest einen 16 Bit Wert aus dem Flash aus. Hier müsste man statt dessen von der SD Karte lesen


Das ist machbar, aber übersteigt deine Fähigkeiten sicherlich bei weitem, wenn du nicht mal verstehst, dass du nicht einfach ein Arduino Programm schreiben kannst, wenn die Library nicht das unterstützt was du möchtest.