Go Down

Topic: [Résolu] Problème Shield µSD (Read 1 time) previous topic - next topic

SamoLaw

Mar 26, 2011, 07:29 pm Last Edit: Mar 27, 2011, 09:20 pm by SamoLaw Reason: 1
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 :

Code: [Select]

#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 :

Code: [Select]
[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.

Gromain59

Quote
[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
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

SamoLaw

Merci d'avoir rép :D

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
Code: [Select]
[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 ^^

powerpack

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


Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

SamoLaw

Salut

Merci pour ta réponse.

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


powerpack

Salut

je regarde le code et je te fais signe plus tard.
Cordialement
Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

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.

Code: [Select]


#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");
  }
}

Windows Certif MCSA. Electronicien.
Arduino Mega 2560.
68hc11F1, 68705U3, 68705P3.
Perl,Java,ABAP,VB,VBS,VBnet,Php,Asp,Css,C,C++,C#,MySql,S

Gromain59

Quote
Même en affichant l'aide, il me mets à la fin
Code: [Select]
[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:

Code: [Select]
Serial.print("inSerByte = ");
Serial.println(inSerByte)"

juste après
Code: [Select]
   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
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

SamoLaw

Salut tt le monde


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.


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.

Gromain59

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
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

SamoLaw

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  :smiley-sad-blue: :smiley-sad-blue:

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.

Gromain59

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

Tant mieux si ça marche maintenant.

Gromain
"pour résoudre un gros problème, il est souvent plus facile de le diviser en petits problèmes élémentaires..."

projet domotique xPLDuino
IRC: freenode #xplduino

SamoLaw

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...

Go Up