Loading...
Pages: [1]   Go Down
Author Topic: elenco dei file su sdcard che sparisce  (Read 357 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima cosa un saluto a tutti.
Da un po' di tempo uso Arduino e grazie all'ottima documentazione e topic esistenti sul forum ho risolto tutti i problemi che sorgevano.
Ora però non so che fare.

Ho caricato l'esempio "listfiles" della libreria SD per leggere i file presenti sulla scheda SD e funziona infatti vedo l'elenco dei file (2 file).
Poi ho modificato tale esempio per fare un refresh ogni secondo. Il tutto funziona e mi fa vedere l'elenco dei file per 8 volte ma dalla nona in poi non mi da alcun risultato.
Ho provato col comando "rewindDirectory()" ma niente da fare.

Qualcuno ha idea del perchè di questa cosa?

Grazie tante

ilpaso
Logged

Online Online
Edison Member
*
Karma: 16
Posts: 1801
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

prova a postare lo sketch molto probabilmente mandi in saturazione la memoria di arduino e quindi il codice non viene eseguito più
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ecco il codice:
(uso l'ethernet shield)

Code:
/*
  SD card basic file example
 
 This example shows how to create and destroy an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created   Nov 2010
 by David A. Mellis
 updated 2 Dec 2010
 by Tom Igoe
 
 This example code is in the public domain.
 
 */
#include <SD.h>

File root;

void setup()
{
  Serial.begin(9600);
  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

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

  root = SD.open("/");
}

void loop()
{
  printDirectory(root, 0);
  Serial.println("done!");
  root.rewindDirectory();
  delay(1000);
}

void printDirectory(File dir, int numTabs) {
   while(true) {
     
     File entry =  dir.openNextFile();
     if (! entry) {
       // no more files
       //Serial.println("**nomorefiles**");
       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);
     }
   }
}


Grazie
Logged

Genova
Offline Offline
Edison Member
*
Karma: 14
Posts: 2444
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

from http://arduino.cc/forum/index.php/topic,91560.0.html
Quote
5 ) per aiutare chi vi vuole aiutare descrivere:
  a ) l'hardware utilizzato nel dettaglio: il tipo di Arduino, i componenti usati
  b ) il sistema operativo usato: spesso le cose cambiano da SO a SO, inoltre già si può ricevere aiuto da chi ha lo stesso SO
  c ) nel caso di un programma che non funziona, includere sempre lo sketch con i tag specifici (l'icona "#")
  d ) nel caso di collegamenti elettrici, riportare sempre lo schema preferibilmente disegnato con Eagle o Kicad, evitare schizzi a mano o Fritzing (va bene per i blog, non va bene per chiedere aiuto)
  e ) descrivere bene cos'è che non va e cosa dovrebbe invece accadere. Dire "la seriale non funziona" non significa nulla, bisogna dire cosa si sta facenda con la seriale (spedire un carattere, aspettare un input), cosa succede e cosa invece dovrebbe succedere

Stai usando uno shield SD, una ethernet con SD, IDE 1.0.1 ?

ciao
« Last Edit: October 01, 2012, 10:44:49 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Innanzitutto buongiorno a tutti e grazie dell' eventuale aiuto che mi vorrete fornire smiley,

sono decisamente nuovo del forum e ho cercato di seguire le regole indicate in http://arduino.cc/forum/index.php/topic,149014.0.html, quindi credo che sia meglio aggiungere il mio problema qui visto che e' uguale a quello descritto in questo topic.
In pratica, dopo il 3' ciclo di esecuzione del programma l'elenco dei files visualizzato si accorcia man mano fino ad azzerarsi.
Ho installato prorpio ieri la versione 1.04 e sto lavorando con un Arduino1 rev 3 e una SD shield (http://www.futurashop.it/allegato/8190-SDCARDSHIELD.asp?L2=SHIELD%20E%20ACCESSORI%20ARDUINO&L1=SOFTWARE%20E%20SISTEMI%20DI%20SVILUPPO&L3=&cd=8190-SDCARDSHIELD&nVt=&d=12,00)
presa in un negozio qui vicino, il tutto gira su windows XP.
Il programma, preso dall' esempio indicato nelle librerie SD per openNextFile(), e' il seguente :

------------------------------------------------------------------------------------------------------------------
Code:
#include <SD.h>
#include <avr/pgmspace.h>
#include "Tlc5940.h"
#include "showarray.h"

File root;

void setup() {
  // You can optionally pass an initial PWM value (0 - 4095) for all channels.
  Tlc.init();
  // Open serial communications for DEBUG
  Serial.begin(9600);
  
  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

  // utilizzo il pin 8 x evitare problemi in quanto il pin 10 e' usato dal TLC5940.
  // Sulla mia SD shield CS e' selezionabile tramite jumper
  if (!SD.begin(8)) {
    // inserire segnalazione errore n. 1
    Serial.println("initialization failed!");
    return;
  }
  Serial.println(" done.");

  root = SD.open("/");  
}

void printDirectory(File dir, int numTabs) {
  while(true) {
    File entry =  dir.openNextFile();
    if (! entry) {
      // no more files
      Serial.println("**nomorefiles**");
      //mancava azzeramento contatore files nell'esempio, preso da versione 1.04,
      //necessario visto che printDirectory viene eseguito + volte
      [color=red]dir.rewindDirectory();[/color]
      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);
    }
  }
}

void loop() {
  unsigned int numframe;
  unsigned int channel;
  unsigned int temp;
  
  [color=red]printDirectory(root, 0)[/color];
  
  for ( numframe = 0; numframe < SHOW_FRAMES; numframe++ ) {
    #ifdef DEBUG
    Serial.println( );
    Serial.print( numframe );
    Serial.print( "-" );
    #endif
    for ( channel = 0; channel < 16; channel++ ) {
      temp = pgm_read_byte_near( showarray + numframe * 16 + channel );
      Tlc.set ( channel, 16 * temp );
      #ifdef DEBUG      
      Serial.print( temp );
      #endif
    }
    Tlc.update();
    int ritardo = analogRead(0);
    delay(ritardo);
  }
}
--------------------------------------------------------------------------------------------------------------------

L'output del programma su seriale e' il seguente :

---------------------------------------------------------------------------------------------------------------------
Code:
Initializing SD card... done.
EFFETTI/
CINQUE.005 20164
EFFETDUE.001 6762
EFFETUNO.001 4085
QUATTRO.003 20164
TRE.002 8408
EFFETTI/
CINQUE.005 20164
EFFETDUE.001 6762
EFFETUNO.001 4085
QUATTRO.003 20164
TRE.002 8408
EFFETTI/
CINQUE.005 20164
EFFETDUE.001 6762
EFFETUNO.001 4085
QUATTRO.003 20164
TRE.002 8408
EFFETTI/
CINQUE.005 20164
EFFETTI/
EFFETTI/
EFFETTI/
----------------------------------------------------------------------------------------------------------------

Spero che non si tratti di interferenze con le librerie "TLC5940" perche' non saprei proprio come fare senza di esse, ma visto che succedeva anche all' utente di questo post che non le usava, direi proprio di no.
In attesa di una vostra risposta, cordialmente, Andrea Molteni
« Last Edit: March 19, 2013, 11:17:26 am by leo72 » Logged

Genova
Offline Offline
Edison Member
*
Karma: 14
Posts: 2444
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

a me sembra che nell'esempio ci sia

Code:
#include <SPI.h>
entry.close();

dove sono finite?

stessa cosa nel post di ilpaso
« Last Edit: March 19, 2013, 01:32:17 pm by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao Pablos e grazie x la risposta,

ho guardato nell' esempio (http://arduino.cc/en/Reference/FileOpenNextFile) e quelle due righe non le vedo... Comunque, ho provato lo stesso ad aggiungerle nel codice dove + mi sembrava logico e la cosa non e' cambiata.
Ho riscritto il codice comprendendo solo l'esempio e le librerie x Tlc :
-----------------------------------------------------------------------------------------------------------------------------
Code:
#include <SD.h>
#include "Tlc5940.h"
#include <SPI.h>

File root;

void setup() {
  // You can optionally pass an initial PWM value (0 - 4095) for all channels.
  Tlc.init();
  // Open serial communications for DEBUG
  Serial.begin(9600);
  
  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(10, OUTPUT);

  // utilizzo il pin 8 x evitare problemi in quanto il pin 10 e' usato dal TLC5940.
  // Sulla mia SD shield CS e' selezionabile tramite jumper
  if (!SD.begin(8)) {
    // inserire segnalazione errore n. 1
    Serial.println("initialization failed!");
    return;
  }
  Serial.println(" done.");

  root = SD.open("/");  
}

void printDirectory(File dir, int numTabs) {
  while(true) {
    File entry =  dir.openNextFile();
    if (! entry) {
      // no more files
      Serial.println("**nomorefiles**");
      //mancava azzeramento contatore files nell'esempio, preso da versione 1.04,
      //necessario visto che printDirectory viene eseguito + volte
      dir.rewindDirectory();
      entry.close();
      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);
    }
  }
}

void loop() {
 
  printDirectory(root, 0);
  delay(1000);
 
}
-----------------------------------------------------------------------------------------------------------------------------
E questo e' l'output sulla seriale :
-----------------------------------------------------------------------------------------------------------------------------
Code:
Initializing SD card... done.
EFFETTI/
CINQUE.005 20164
EFFETDUE.001 6762
EFFETUNO.001 4085
QUATTRO.003 20164
TRE.002 8408
TEST/
**nomorefiles**
**nomorefiles**
**nomorefiles**
EFFETTI/
CINQUE.005 20164
EFFETDUE.001 6762
EFFETUNO.001 4085
QUATTRO.003 20164
TRE.002 8408
TEST/
**nomorefiles**
**nomorefiles**
**nomorefiles**
EFFETTI/
CINQUE.005 20164
EFFETDUE.001 6762
EFFETUNO.001 4085
QUATTRO.003 20164
TRE.002 8408
**nomorefiles**
**nomorefiles**
EFFETTI/
**nomorefiles**
**nomorefiles**
EFFETTI/
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
------------------------------------------------------------------------------------------------------------------------------
Come vedi, non e' cambiato un gran che... Anzi, gia' dal 3' giro e' sparita la sottodirectory "test".
Cordialmente,   Andres

edit by mod: per favore includi il codice usando gli appositi tag. Grazie...
« Last Edit: March 20, 2013, 03:52:46 am by andres26 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
Initializing SD card... done.
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
**nomorefiles**
OK Mod... smiley ho trovato il tasto.
Gia' ke c sono volevo segnalare anke il NON funzionamento del tasto destro del mouse nella finestra Cattura Seriale.
I tasti CTRL+C e CTRL+V invece funzionano regolarmente...
Ciao,   Andres
Logged

Forum Moderator
Italy
Online Online
Brattain Member
*****
Karma: 219
Posts: 16470
Don't know what I do
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gia' ke c sono volevo segnalare anke il NON funzionamento del tasto destro del mouse nella finestra Cattura Seriale.
I tasti CTRL+C e CTRL+V invece funzionano regolarmente...
Ciao,   Andres
Questo si sa, ma non è un bug penso. Siccome il monitor seriale non è un vero terminale ma una semplice finestra, penso che chi ha disegnato quel form semplicemente non ha implementato la gestione dei click del mouse.
Logged


0
Offline Offline
Tesla Member
***
Karma: 82
Posts: 8229
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

è erato l'uso della close();

tu chiudi il file se il file non esiste... ma se non esiste non è mai stato aperto smiley

quindi dove va spostata la close() pechè tutto fuinzioni?



poi per amor di leggibilità cambia il

Code:
while(true) {[...]break;[...]

in

Code:
boolean fileDaLeggere=true;
while(fileDaLeggere) {[...]fileDaLeggere=false;[...]

ci ho messo un pò per capire che quel loop non era infinito....

edit: il fatto che non chiudi il file, vuol dire che la libreria tiene in memoria il descrittore del file. Puoi avevre un numero limitato di descrittori aperti in una volta sola (limitazione che esiste anche nei PC)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Genova
Offline Offline
Edison Member
*
Karma: 14
Posts: 2444
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

questo è l'esempio che si trova nell'ide 152, ho cambiato il pin 10 in 4 per la mia sheld, e ho aggiunto digitalwrite(4,1), l'ho provato e funziona

Code:
/*
  SD card basic file example
 
 This example shows how to create and destroy an SD card file
 The circuit:
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4
 
 created   Nov 2010
 by David A. Mellis
 modified 9 Apr 2012
 by Tom Igoe
 
 This example code is in the public domain.
 
 */
#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 Leonardo only
  }


  Serial.print("Initializing SD card...");
  // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
  // Note that even if it's not used as the CS pin, the hardware SS pin
  // (10 on most Arduino boards, 53 on the Mega) must be left as an output
  // or the SD library functions will not work.
  pinMode(4, OUTPUT);
  digitalWrite(4,1);
  
  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
       //Serial.println("**nomorefiles**");
       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();
   }
}

« Last Edit: March 20, 2013, 06:05:05 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

0
Offline Offline
Tesla Member
***
Karma: 82
Posts: 8229
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

notare la close() al posto giusto... pablos, eliminandola hai lo stssoc omportamento del primo post?

se sì il caso è risolto  smiley-mr-green
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie Pablos smiley
con la close() al posto giusto funziona...

@lesto
Quote
poi per amor di leggibilità cambia il

Code:

while(true) {[...]break;[...]


in

Code:

boolean fileDaLeggere=true;
while(fileDaLeggere) {[...]fileDaLeggere=false;[...]


ci ho messo un pò per capire che quel loop non era infinito....

Guarda che non l'ho mica scritto io il codice...

Come c'e' scritto + sopra nelle reply, e' un esempio che ho preso pari pari dalla pagina (http://arduino.cc/en/Reference/FileOpenNextFile),   cioe' Reference -> Libraries -> SD -> openNextFile().

Un saluto a tutti, Andres smiley
Logged

0
Offline Offline
Tesla Member
***
Karma: 82
Posts: 8229
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

da segnalare nellla giusta sezione del forum...
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Print
 
Jump to: