Carte SD sur ethernet shield ne fonctionne pas [Resolu]

Bonjour à tous

J’ai découvert il n’y a pas longtemps les cartes arduino, et je trouve ca génial.

Je possede un arduino uno, un mega et un shield ethernet. ma carte arduino fonctionne sans probleme, et la carte ethernet semble bien fonctionner aussi (j’ai pu faire fonctionner sans aucun problème la connexion ethernet).

Mais je but sur un truc : Impossible de faire fonctionner les exemples fournis qui permettent d’utiliser une carte SD. A chaque fois, SD.begin(4) me renvoie false, et je ne sais pas pourquoi.

J’ai farfouillé, et j’ai trouvé un code utilisant une autre bibliothèque SdFat.h. Le code fonctionne (ecriture d’un fichier sur la sd), mais est nettement moins simple. Il semble donc logique que mon matériel soit ok, et que ce soit un probleme logiciel. Soit ma bibliotheque SD.h qui débloque, soit c’est moi qui ne sait pas l’utiliser. Je penche pour la deuxième solution.

Ce que je ne pige pas, c’est que ça semble simple, que tous les autres exemples marchent directement (lcd, ethernet, tft, …) et pas celui la. Et j’ai pas spécialement trouvé d’exemple de personnes qui butent comme moi. C’est rageant.

Je suis sous ubuntu.
J’ai arduino 1.8.0

J’ai testé avec un arduino uno veritable, et avec un clone (elego uno)
J’ai testé avec l’arduino mega
J’ai testé avec des shield ethernets différents.

J’utilise bien la broche 4 pour le CS dans SD.begin
J’ai bien mis la patte 10 en sortie et à l’etat haut.

Et c’est toujours pareil

Help !

#include <SPI.h>
#include <SD.h>

File root;

void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

Serial.print(“Initializing SD card…”);

if (!SD.begin(4)) {
Serial.println(“initialization failed!”);
return;
}
Serial.println(“initialization done.”);

root = SD.open("/");

printDirectory(root, 0);

Serial.println(“done!”);
}

void loop() {
// nothing happens after setup finishes.
}

void printDirectory(File dir, int numTabs) {
while (true) {

File entry = dir.openNextFile();
if (! entry) {
// no more files
break;
}
for (uint8_t i = 0; i < numTabs; i++) {
Serial.print(’\t’);
}
Serial.print(entry.name());
if (entry.isDirectory()) {
Serial.println("/");
printDirectory(entry, numTabs + 1);
} else {
// files have sizes, directories do not
Serial.print("\t\t");
Serial.println(entry.size(), DEC);
}
entry.close();
}
}

SDfat sait gérer des cartes formatés avec des noms longs et est plus capable que la librairie standard. Vous avez vérifié le type de format ( FAT16 et FAT32 mais avec la librairie de base utiliser FAT16 si possible)

Merci pour votre réponse, et effectivement, je n'avais pas pensé à la carte SD.

J'en ai donc acheté une autre, 8 Go SDHC comme l'autre et... ca marche !! Cool !

Donc j'ai formaté la premiere en fat32 (windows 10, pas possibilité de formater en fat16 de base), et j'ai mis un nom de 3 lettres, et... ca marche pas avec celle la...

Toutes les cartes SDHC ne sont pas compatibles ?

Cool

Certaines cartes nécessitent parfois plusieurs essais

La librairie SDFat contient un exemple pour formater votre carte SD- essayez avec ça (attention ça efface bien sûr tout ce que vous avez sur la carte)

Dans l'absolu préférez la lib SDFat elle est bcp mieux de manière générale (et n'a pas les quelques bugs de jeunesse de SD.h ; SD.h n'est qu'une interface simple sur une vieille version de SDFat, la nouvelle version a une nouvelle interface et vraiment bcp bcp plus performante)

Merci pour ces infos et pour votre aide.

Je vais utiliser SDFat, c'est moins risqué :wink:

bonne idée :slight_smile: