Hallo zusammen
Ich habe an einen Arduino Nano ein 2,4" TFT (ILI9341) und ein SD-Modul angeschlossen. Das auf dem Display angebrachte SD-Modul ist leider später nicht erreichbar, daher ein "externes".
Wenn ich das richtig verstanden habe, müssten beide Module doch funktionieren. Der CS-Pin sollte doch sagen wer gerade "gemeint ist".
Ich habe nun folgenden Code:
#include <SPI.h>
#include <SD.h>
#define CS_PIN_SD 5
File myFile;
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#define TFT_DC 9
#define TFT_CS 10
#define TFT_RST 8
#define TFT_MISO 12
#define TFT_MOSI 11
#define TFT_CLK 13
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);
void setup() {
Serial.begin(115200);
tft.begin();
//## TFT Test 1 ##
tft.fillScreen(ILI9341_BLACK);
tft.setCursor(0, random(1,300));
tft.setTextColor(ILI9341_RED);
tft.setTextSize(1);
tft.println("Hello World! (Test 1)");
//## TFT Test 1 ##
// //SD-Karte Checken/Initialisieren
// Serial.println("SD-Karte..");
// if (!SD.begin(CS_PIN_SD)) {
// Serial.println(" --> fehlgeschlagen! \n");
// while (1);
// }
// else
// Serial.println(" --> erfolgreich! \n");
//
// myFile = SD.open("test.txt", FILE_WRITE);
//
// if (myFile) {
// Serial.print("Writing to test.txt...");
// myFile.print("testing 1, 2, 3. --> ");
// myFile.println(random(1,100));
// myFile.close();
// Serial.println("done.");
// }
// else {
// Serial.println("error opening test.txt");
// }
//## TFT Test 2 ##
tft.setCursor(0, random(1,300));
tft.setTextColor(ILI9341_RED);
tft.setTextSize(1);
tft.println("Hello World! (Test 2)");
//## TFT Test 2 ##
}
void loop() {
//## TFT Test 3 ##
tft.setCursor(0, random(1,300));
tft.setTextColor(ILI9341_RED);
tft.setTextSize(1);
tft.println("Hello World! (Test 3)");
//## TFT Test 3 ##
delay(1000);
}
In diesem Fall funktionier das Display und alle 3 Beispiel-Texte werden angezeigt.
Sobald ich aber den auskommentierten Code für die SD-Karte verwende, wird zwar erfolgreich die Datei auf die SD-Karte geschrieben, danach tut das Display aber nichts mehr. Es werden keine Befehle mehr verarbeitet.
Habe ich da einen Denkfehler drin oder kann ich irgendwie die SD-Karte wieder "abmelden". Die wird ja nur kurz benötigt (später im Programm durch einen Klick auf einen Button). Da könnte die dann ja initialisiert und dann wieder "abgemeldet" werden. Ich hatte auch versucht nachdem die Karte fertig ist ein SD.end(); zu verwenden. In der Bibliothek sieht das aber danach aus, dass das nicht das Gegenteil von SD.begin(PIN); ist.
Ich hatte auch versucht zuerst den SD-Teil und danach erst das Display mit tft.begin(); zu starten, hat ebenfalls nicht funktioniert.
Schaltung habe ich angehängt.