[Résolu] Problème Shield µSD

Bonjour,

J'ai acheté ce matin, ce shield :

http://www.lextronic.fr/P5912-module-carte-sd-pour-arduino.html

J'ai voulu tester le programme test suivant :

#include "SDuFAT.h"

// define the pin that powers up the SD card
#define MEM_PW 8

// help string to be sent to the serial port
#define HELP "H help\nL file info\nD delete\nP append string\nW init file and write\nR dump to serial\nA append text\n"

// variable used when reading from serial
byte inSerByte = 0;

void setup(void)
{
  // on my MicroSD Module the power comes from a digital pin
  // I activate it at all times
  pinMode(MEM_PW, OUTPUT);
  digitalWrite(MEM_PW, HIGH);
  
  // configure the serial port to command the card and read data
  Serial.begin(19200);
}

void loop(void)
{
  // Arduino expects one of a series of one-byte commands
  // you can get some help by sending an 'H' over the serial port
  if (Serial.available() > 0) {
    int result = 0;
    inSerByte = Serial.read();
    switch (inSerByte) {
    case 'H':
      Serial.println(HELP);
      result = 3; // special output for help message
      break;
    case 'L':
      result = SD.ls("hola.txt");
      break;
    case 'R':
      result = SD.cat("hola.txt");
      break;
    case 'W':
      result = SD.write("hola.txt");
      break;
    case 'A':
      result = SD.append("hola.txt");
      break;
    case 'P':
      result = SD.println("hola.txt","\nhola caracola");
      break;
    case 'D':
      result = SD.del("hola.txt");
      break;
    default:
      result = 2; // value for unknown operation
      break;
    }
    
    // print a status message for the last issued command
    // for help (result == 3) won't print anything
    if (result == 1) SD.printEvent(ERROR, "hola.txt");
    else if (result == 2) SD.printEvent(WARNING, "unknown command");
    else if (result == 0) SD.printEvent(SUCCESS, "hola.txt");
  }
}

D'après ce que j'ai lu ici (http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-micro-sd#intro), on doit mettre un fichier nommé hola.txt sur la carte, puis on envoi simplement des commandes à travers la liaison série avec le serial monitor.

Quand j’envoie la lettre R ou W par exemple, il me renvoi :

[hola.txt] - file content
[hola.txt] - ..error!

[unknown command] - ..warning!

Sérieux je pige rien là =( =(, quelqu'un à une idée du problème ?

J'ai changé la µSD, c'est pareil.

[unknown command] - ..warning!

d'après le code, ce serait le caractère reçu qui n'est pas reconnu. Est-ce qu'en envoyant "H" l'aide est affiché ?
Tu peux vérifier ce qui est reçu en renvoyant par un serial.print les caractères reçus. Tu seras fixé sur ce qui est reçu par l'arduino (peut-être qu'il recoit 2 caractères au lieu d'un seul).

Gromain

Merci d'avoir rép :smiley:

J'ai fait ce que tu m'as dit, il recoit bien le caractère transmis.

Il affiche bien l'aide avec la commande H.

Même en affichant l'aide, il me mets à la fin

[unknown command] - ..warning!

Bizarre, ce soir il n'y a rien qui marche chez moi. Ma shield µSD marche pas pour l'instant, mon µLCD-144 de chez 4D Systems non plus, truc de fou lol ^^

Bonsoir

Pour moi il y a bien il y a quelque chose qui me parle.
la déclaration de la variable "inSerByte" me pose une reflection ??
je verais plus un truc comme ça.

// variable used when reading from serial
char inSerByte = '0';

La variables bytes et un chiffre pas un caractere non.
Cordialement

Salut

Merci pour ta réponse.

J'ai essayé, et ça ne fonctionne pas.

Salut

je regarde le code et je te fais signe plus tard.
Cordialement

bonsoir

tu a bien verifier que le caratére arrive bien l'arduino, d'aprés le code libréry ce n'est pas un caractére ????.
fait moi une copie du serial monitor.

#include "SDuFAT.h"

// define the pin that powers up the SD card
#define MEM_PW 8

// help string to be sent to the serial port
#define HELP "H help\nL file info\nD delete\nP append string\nW init file and write\nR dump to serial\nA append text\n"

// variable used when reading from serial
byte inSerByte = 0;

void setup(void)
{
  // on my MicroSD Module the power comes from a digital pin
  // I activate it at all times
  pinMode(MEM_PW, OUTPUT);
  digitalWrite(MEM_PW, HIGH);
  
  // configure the serial port to command the card and read data
  Serial.begin(19200);
}

void loop(void)
{
  // Arduino expects one of a series of one-byte commands
  // you can get some help by sending an 'H' over the serial port
  if (Serial.available() > 0) {
    int result = 0;
    inSerByte = Serial.read();
    //*********** a modifier
    Serial.print(inSerByte); // normalement
    Serial.println("--------------------");
    //********************************************
    switch (inSerByte) {
    case 'H':
      Serial.println(HELP);
      result = 3; // special output for help message
      break;
    case 'L':
      result = SD.ls("hola.txt");
      break;
    case 'R':
      result = SD.cat("hola.txt");
      break;
    case 'W':
      result = SD.write("hola.txt");
      break;
    case 'A':
      result = SD.append("hola.txt");
      break;
    case 'P':
      result = SD.println("hola.txt","\nhola caracola");
      break;
    case 'D':
      result = SD.del("hola.txt");
      break;
    default:
      result = 2; // value for unknown operation
      break;
    }
    
    // print a status message for the last issued command
    // for help (result == 3) won't print anything
    if (result == 1) SD.printEvent(ERROR, "hola.txt");
    else if (result == 2) SD.printEvent(WARNING, "unknown command");
    else if (result == 0) SD.printEvent(SUCCESS, "hola.txt");
  }
}

Même en affichant l'aide, il me mets à la fin [unknown command] - ..warning!

C'est probablement que lorsque tu envois un caractère par le Serial Monitor, un caractère de fin est envoyé (caractère nul il me semble). Ajoute donc:

Serial.print("inSerByte = ");
Serial.println(inSerByte)"

juste après

   inSerByte = Serial.read();

(comme le suggère powerpack dans le code qu'il te demande de tester)

Question: quel type d'arduino utilises-tu ? car selon que c'est une Mega ou non, les pins pour l'ISP et le SS ne sont pas au même endroit.

Gromain

Salut tt le monde

powerpack:
bonsoir

tu a bien verifier que le caratére arrive bien l'arduino, d'aprés le code libréry ce n'est pas un caractére ????.
fait moi une copie du serial monitor.

Voilà ce que mets le serial monitor :

Vous aviez raison Gromain59 et powerpack, j'ai mis "no line ending" sur le Serial Monitor. Avant il était sur "Newline", c'est pour ça qu'il affichait toujours "[unknown command] - ..warning!".

Désolé les gars, hier j'ai pas fait gaffe au retour à la ligne.

Gromain59:
Question: quel type d'arduino utilises-tu ? car selon que c'est une Mega ou non, les pins pour l'ISP et le SS ne sont pas au même endroit.

Arduino Uno.

Merci.

Question bête: as-tu correctement formaté la carte SD en FAT16 ?
Sous linux par exemple, le format par défaut est ext4.

J'utilise le lecteur de carte SD du shield Ethernet officiel, et au début j'ai eu ce genre de soucis de carte non reconnue.
Tu devrais peut-être tester tout simplement la bibliothèque officielle, il y a des exemples fournis.

Gromain

Bonsoir

Oui, ça j'ai vérifier dès le départ, c'est bien en FAT .

Un truc que je n'avais pas fait, c'était un scan anti-virus au cas où.

Et bien, y'avait un virus sur ma micro-sd :disappointed_relieved: :disappointed_relieved:

Après mise en quarantaine, deux formatages, tout est rentré dans l'ordre, plus d'erreur. Merci bien les gars. XD XD

Vraiment bizarre n'empêche cette histoire de virus.

sous linux, tu aurais eu certainement des problèmes, mais pas celui là :stuck_out_tongue:

Tant mieux si ça marche maintenant.

Gromain

Après ça, c'est vrai que je me suis demandé si je devrai pas passer sur Linux.

Le pire, c'est que j'ai Ubuntu installé avec IDE Arduino etc...