Hallo!
Ich möchte überprüfen ob im SD Card Shield eine Card steckt oder nicht dafür habe ich folgenden Code, welcher bereits funktioniert:
#include <SPI.h>
#include <SD.h>
Sd2Card card;
const int chipSelect = 53;
int led1 = 22;
int led2 = 40;
void setup() {
Serial.begin(9600);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
}
void loop() {
if (!card.init(SPI_HALF_SPEED, chipSelect)) {
Serial.println("False"); //Karte draußen (Dauert lange zum schalten von Grün -> Rot ???)
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
} else {
Serial.println("True"); //Karte drinnen (Umschalten von Grün zu Rot dauert lange ??)
digitalWrite(led2,LOW);
digitalWrite(led1,HIGH);
}
}
Nur ist es komisch, dass wenn das Programm von "Karte drinnen" auf "Karte draußen" springt so lange braucht. Ich sehe es an den zwei Leuchtdioden Led1 (Drinnen) Led2 (Draußen). Der Abstand beträgt ein paar Sekunden. Aber von Led2 (Draußen) zu Led1 (Drinnen) geht es sofort ohne Abstand.
Was ist hier falsch ?
LG
Hallo,
"chipSelect = 53"
damit kannst Du nicht so einfach prüfen, ob eine SD steckt.
Suche mal nach einen "CD" Pin an dem SD Card Shield.
Haste ne´n Link?
Gruß und Spaß
Andreas
Das ist normal. Bei SdFat ist das auch nicht anders (und die Arduino SD Library ist nur ein Wrapper dafür). Die Library braucht ein paar Sekunden bis sie erkennt dass die Initialisierung nicht möglich ist
Hallo,
Karte erkennen- und initialisieren sind aber doch zwei verschiedene Dinge.
Bekommt er hier (bei gesteckter Karte) einen Fehler, dann wird "Karte nicht gesteckt" gemeldet.
Die Karte steckt aber noch.
Mal sehen, was er möchte.
Gruß und Spaß
Andreas
Ja schon. Aber die Initialisierung schlägt ja auch fehl wenn keine Karte eingesteckt ist. Es geht schon. Aber dauert halt.
Hallo,
das würde aber zur Folge haben, das immer initialisiert wird- egal ob Karte oder nicht.
Mit dem CD-Pin (Card Detect) kann man aber sehr leicht verhindern das die Lib richtig losmaschiert.
Gruß und Spaß
Andreas
Und die Adafruit-Card ist eine von wenigen, die diesen Pin hat.
Ich vermute mal, es gibt Clones davon, die diesen Pin auch haben.
Bei vielen fehlt der einfach.
Edit:
Grad mal gegoogelt, es gibt noch einige mit dem CD-Pin.
Wenn er den CardDetect Pin auf seinem Shield irgendwo hat, ist es wohl das beste den zu verwenden, wenn man noch einen Arduino Pin frei hat, stimmt.
Und init() kann man auch nur machen, wenn keine Datei offen bleiben soll.
Ansonsten dauert es wohl absichtlich 2 sec, bis ein init - Fehler gemeldet wird
/** init timeout ms */
uint16_t const SD_INIT_TIMEOUT = 2000;
utility\SD2card.h
Hallo ich besitze keinen CD Pin auf meinem SD Card Shield.
Was würdet ihr mir hier raten, dass besser zu lösen als mit meinem bereits teils funktionierenden Code?
LG
Da die Teile nicht so teuer sind, besorge dir doch einen mit dem CD-Pin.
Der Sketch sollte weiter funktionieren, evtl mit kleinen Änderungen.
Der eigentliche Kartenhalter auf dem SD Modul hat den Pin. Da kann man einen Draht anlöten ...
Aber die Karten sollte man eh nicht soo oft rein raus nehmen, da kommt es im Zweifelsfall nicht auf ein paar wenige Sekunden an... ( --> Ich würd mich da nicht weiter drum kümmern )
Ich vermute, der ist bei dir nicht rausgeführt.
Im Vergleich dazu: SC Card Adapter
Hallo,
so wie es aussieht, hat der keine "Schalter" für CD.
Wenn Du den von HotColdSystems anschaust dann siehst Du oben eine Blechfeder.
Die hält den Raster für die Karte.
Die Blechfeder darunter ist der Kontakt für CD, der wird geöffnet wenn Karte steckt.
Die Blechfeder darunter ist der Kontakt für CS, der wird geöffnet wenn Karte steckt.
Bei mir ist das so.
Schau doch mal in Dein Datenblatt/Schaltplan.
Gruß und Spaß
Andreas