Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Discussions


Index du Forum » Discussions » Problemes Arduino
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Problemes Arduino

Posté le 13/03/2014 22:26

Bon voila j'ai un soucis avec ma Arduino pour la lecture de carte SD via un shield Ethernet pour une mise en réseau des données
J'ai suivis le topic de ladyada mais il ou elle avait du le faire avant la mise a jour de la librairie ... Donc avant de prendre l'ancienne version de la librairie, quelqu’un saurais t'il resoudre l'erreur de compilation dans la fonction ListFiles

Le code
Cliquer pour enrouler
#include <SdFat.h>
#include <SdFatUtil.h>
#include <Ethernet.h>
#include <SPI.h>

//%%**%%%%**%%%%**%%%%**%%%%**%%%%**%% ETHERNET STUFF %%**%%%%**%%%%**%%%%**%%%%**%%%%**%%/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
EthernetServer server(80);

//%%**%%%%**%%%%**%%%%**%%%%**%%%%**%% SDCARD STUFF %%**%%%%**%%%%**%%%%**%%%%**%%%%**%%/
Sd2Card card;
SdVolume volume;
SdFile root;

// store error strings in flash to save RAM
#define error(s) error_P(PSTR(s))

void error_P(const char* str) {
  PgmPrint("error: ");
  SerialPrintln_P(str);
  if (card.errorCode()) {
    PgmPrint("SD error: ");
    Serial.print(card.errorCode(), HEX);
    Serial.print(',');
    Serial.println(card.errorData(), HEX);
  }
  while(1);
}

void setup() {
  Serial.begin(9600);

  PgmPrint("Free RAM: ");
  Serial.println(FreeRam());  

  // initialize the SD card at SPI_HALF_SPEED to avoid bus errors with
  // breadboards.  use SPI_FULL_SPEED for better performance.
  pinMode(10, OUTPUT);                       // set the SS pin as an output (necessary!)
  digitalWrite(10, HIGH);                    // but turn off the W5100 chip!

  if (!card.init(SPI_HALF_SPEED, 4)) error("card.init failed!");

  // initialize a FAT volume
  if (!volume.init(&card)) error("vol.init failed!");

  PgmPrint("Volume is FAT");
  Serial.println(volume.fatType(),DEC);
  Serial.println();

  if (!root.openRoot(&volume)) error("openRoot failed");

  // list file in root with date and size
  PgmPrintln("Files found in root:");
  root.ls(LS_DATE | LS_SIZE);
  Serial.println();

  // Recursive list of all directories
  PgmPrintln("Files found in all dirs:");
  root.ls(LS_R);

  Serial.println();
  PgmPrintln("Done");

  // Debugging complete, we start the server!
  Ethernet.begin(mac, ip);
  server.begin();
}

void loop()
{
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          // print all the files, use a helper to keep it clean
          //ListFiles(client, 0);
          client.println("<h2>Files:</h2>");
          //ListFiles(client, 0);

          break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();
  }
}

void ListFiles(EthernetClient client, uint8_t flags) {
  // This code is just copied from SdFile.cpp in the SDFat library
  // and tweaked to print to the client output in html!
  dir_t p;

  root.rewind();
  while (root.readDir(p) > 0) {
    // done if past last used entry
    if (p.name[0] == DIR_NAME_FREE) break;

    // skip deleted entry and entries for . and  ..
    if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;

    // only list subdirectories and files
    if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;


    // print file name with possible blank fill
    //root.printDirName(*p, flags & (LS_DATE | LS_SIZE) ? 14 : 0);


    for (uint8_t i = 0; i < 11; i++) {
      if (p.name[i] == ' ') continue;
      if (i == 8) {
        client.print('.');
      }
      client.print(p.name[i]);
    }
    if (DIR_IS_SUBDIR(&p)) {
      client.print('/');
    }

    // print modify date/time if requested
    if (flags & LS_DATE) {
       root.printFatDate(p.lastWriteDate);
       client.print(' ');
       root.printFatTime(p.lastWriteTime);
    }
    // print size if requested
    if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) {
      client.print(' ');
      client.print(p.fileSize);
    }
    client.println("<br>");
  }
}


Le retour du compilateur
Cliquer pour enrouler
no matching function for call to 'SdFile::readDir(dir_t&)'

sketch_mar13a.ino: In function 'void ListFiles(EthernetClient, uint8_t)':
sketch_mar13a:116: error: no matching function for call to 'SdFile::readDir(dir_t&)'
C:\Documents and Settings\User\Bureau\User\Arduino\libraries\SdFat/SdBaseFile.h:325: note: candidates are: int8_t SdBaseFile::readDir(dir_t*)



Lephenixnoir En ligne Administrateur Points: 24259 Défis: 170 Message

Citer : Posté le 14/03/2014 18:46 | #


Ça dépend de la plateforme, mais si c'est une carte SD, il est probable que tu n'obtiennes qu'une liste des fichiers et dossiers du répertoire actuel, sans information quant au contenu des sous-dossiers.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 14/03/2014 18:50 | #


Si ca marche impec' dans l'exemple mais quand je l'utilise ca marche plus
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 14/03/2014 18:51 | #


Non, je n'ai pas le contenu mais j'ai le code pour mon écran qui permet de lire des fichiers. Je pourrais l'adapter pour le Serial ou pour l'ethernet comme avec ton prog.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 16/03/2014 15:39 | #


C'est bon j'ai plus ou moins réussi mais je me demandait pourquoi si on recharge la page ça donne une page vide ...
Le code
Cliquer pour enrouler
#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

const int chipSelect = 4;

File root;

EthernetServer server(80);
EthernetClient client;

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  Serial.println("\nEn attente...");
  while(Serial.read()<=0);
  delay(1000);
  
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("Server is at ");
  Serial.println(Ethernet.localIP());
  
  delay(1000);
  
  root = SD.open("/");
  Serial.println(root);
}

void loop()
{
  client = server.available();
  
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
      // client.println("Refresh: 120");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<head>");
          // client.println("<meta charset="utf-8" />");
          client.println("<title>Arduino SD</title>");
          client.println("</head>");
          client.println("<body>");
          client.println("<p><strong>Starting...</strong></p>");
    
          client.println("<p><strong><em>Card OK</em></strong></p>");
          
          // Affichage des fichiers
          client.println("<h3>SD Files:</h3>");
          
          printDirectoryClient(root, 0);
          
          client.println("</body>");
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
  
}

void printDirectoryClient(File dir, int numTabs) {
  Serial.println("Je suis la !");
  client.println("<ul>");
   while(true) {
     File entry =  dir.openNextFile();
     if (! entry) {
       // no more files
       break;
     }
     client.print("<li>");
     for (uint8_t i=0; i<numTabs; i++) {
       client.print("   ");
     }
    
     Serial.print(entry.name());
     if (entry.isDirectory()) {
       client.print(entry.name());
       client.print("/");
       client.println("</li>");
       printDirectoryClient(entry, numTabs+1);
     } else {
       // files have sizes, directories do not
       client.print("<a href=\"");
       client.print(entry.name());
       client.print("\">");
       client.print(entry.name());
       client.print("</a>    ");
       client.print(entry.size(), DEC);
       client.println("</li>");
     }
    
     entry.close();
   }
   client.println("</ul>");
}


Ajouté le 16/03/2014 à 17:20 :
Et aussi quand j'ouvre un lien que j'ai fait avec le nom des fichiers, ça m'ouvre une page 192.168.1.177/fichier.txt . Vous sauriez comment faire pour que ça télécharge au lieu d'ouvrir un onglet ?
Legolas Hors ligne Ancien rédacteur Points: 3266 Défis: 104 Message

Citer : Posté le 11/12/2015 13:18 | #


Salut ! Je n'ai pas envie d'ouvrir un topic juste pour cela, alors je prends celui qui s'y rapproche le plus. Dites-moi si cela dérange. Avec vos histoires d'arnuino et depuis quelques temps, cela m'intéresse et j'aimerais bien m'y lancer. Je voulais donc vous demander ; quel équipement conseilleriez-vous pour un débutant qui a un budget pas génial ? (Et qui est intéressé par les relations sans fil de type infrarouge voire mieux) Merci d'avance !
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 11/12/2015 13:32 | #


Salut,
Tu peux commencer avec des kits de démarrage qui coûtent environ 40-50€, cherche Sainsmart sur amazon, j'en ai pris un comme ça pour démarrer, c'est une autre marque mais qui fonctionne exactement comme une arduino.
Celui que j'ai contient un récepteur infrarouge et une led infrarouge ainsi qu'une petite télécommande, si ça t'amuse. J'ai aussi trouvé deux émetteurs/récepteurs radios pour moins de 10€.
Franchement, même avec un petit budget tu peux trouver des trucs sympas. (cherche pas des FGPA comme ceux qu'on utilise en prépa, c'est plus dur et plus cher :P )
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 11/12/2015 15:42 | #


J'ai commencé par ce que l'on m'a conseillé, c'est à dire ça : lien

Après, tu peux acheter ce pack, constitué d'une Mega et d'un écran LCD tactile : lien

Il faut savoir que les cartes Arduino sont open-hardware, ce qui fait que beaucoup de constructeurs en fabriquent indépendamment. Du coup ça aide à trouver des versions moins chères, et pourtant 99% identiques à l'originale. SainSmart fait partie de ces constructeurs.

Edit :
De ce que je sais, Lephe a aussi commencé avec ces deux packs, comme quoi, PC a une influence non-négligeable sur notre consommation
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 11/12/2015 16:00 | #


Étrangement j'ai aussi ces deux packs
Lephenixnoir En ligne Administrateur Points: 24259 Défis: 170 Message

Citer : Posté le 11/12/2015 17:21 | #


Dark Storm a écrit :
De ce que je sais, Lephe a aussi commencé avec ces deux packs, comme quoi, PC a une influence non-négligeable sur notre consommation

Pack que tu m'as conseillé après l'avoir acheté parce que quelqu'un te l'avait conseillé, et que j'ai conseillé à plusieurs autres personnes, bref, je ne me sens pas particulièrement responsable
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 11/12/2015 17:28 | #


C'est bien ce que je dis
C'est sur PC qu'on m'a conseillé ça
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Legolas Hors ligne Ancien rédacteur Points: 3266 Défis: 104 Message

Citer : Posté le 11/12/2015 18:12 | #


Merci de vos réponses, je vais me renseigner et le père Noël aidera.
Mes programmes
Cacher les programmes
Mes défis
Cacher les défis



Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 11/12/2015 18:44 | #


Je crois que l'écran tactile c'est partit de moi mais pour le pack, c'est un autre

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 50 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd