Libelium MicroSD Module 1Gb problemi println

salve a tutti,

ho comprato da poco questo prodotto: Libelium MicroSD Module 1Gb

utilizzo la libreria SDuFAT

il problema nasce in fase di accodamento di informazioni al file, quinidi l'esempio contenuto con il codice

SD.println("hole.txt","testo da agiungere al fondo");

non mi funziona, qualcuno mi aiuta con qualche riga di codice diversa o qualche esempio che non sia la libreria SDuFAT ?

vi spiego il mio progetto è quello di prelevare dei dati dai sensori e salvarli come sorta di file di log sulla sd.

per il resto funziona tutto sia il cat che ls.

grazie mille!

marco

ho trovato dell'altro codice molto utile a questo inidirizzo, questa sera eseguo un test e poi vi faccio sapere.

http://code.google.com/p/arduino-filelogger/

ciao!

Grande Marco, facci sapere anche perchè questa funzionalità penso interessi molti (me compreso :-)

vi consiglio http://code.google.com/p/fat16lib/

ciao,
ho provato questo
http://code.google.com/p/arduino-filelogger/
e mi sembra funzionare al volo.

c’è solo un bachino nell’esempio fornito
create il file hole.txt da pc.

ecco il codice giusto:

//
// Title        : FileLogger library for Arduino, example code
// Author       : Eduardo García (egarcia@stream18.com)
// Date         : April 2009
// Id                  : $Id: FileLoggerDemo.pde 18 2009-04-22 13:57:32Z stream18 $
//
// DISCLAIMER:
// The author is in no way responsible for any problems or damage caused by
// using this code. Use at your own risk.
//
// LICENSE:
// This code is distributed under the GNU Public License
// which can be found at http://www.gnu.org/licenses/gpl.txt
//


#include "FileLogger.h"

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

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

#define MESSAGE "Hello, this is my message. Just testing the FileLogger library.\r\n"
unsigned long length = sizeof(MESSAGE)-1;
byte buffer[] = MESSAGE;

void setup(void) {
  pinMode(MEM_PW, OUTPUT);
  digitalWrite(MEM_PW, HIGH);
  Serial.begin(9600);
}

void loop(void) {
  char command = '0';
  unsigned long t1, t2;

  // Arduino expects one of a series of one-byte commands
  if (Serial.available() > 0) {
    int result;
    inSerByte = Serial.read();
    switch (inSerByte) {
      case 'W':
        result = FileLogger::append("hola.txt", buffer, length);
        Serial.print(" Result: ");
        if( result == 0) {
          Serial.println("OK");
        } else if( result == 1) {
          Serial.println("Fail initializing");
        } else if( result == 2) {
          Serial.println("Fail appending");
        }
      break;
    case 'T':
        for(int i=0; i<10; i++) {
            result = FileLogger::append("hola.txt", buffer, length);
              Serial.print(" Result: ");
              if( result == 0) {
                Serial.println("OK");
              } else if( result == 1) {
                Serial.println("Fail initializing");
              } else if( result == 2) {
                Serial.println("Fail appending");
              }
        }
          Serial.print("Done");
      break;
    }
  }
}

sono alle prese con del codice di integrazione con il progetto sopra descritto, ho un problema nel creare una funzione esterna per salvare la mia riga nel file di log, qualcuno può aiutarmi?

mi spiego:

ho questo blocco di codie nel loop:

void loop(){
long length = sizeof("Hello, this is my message. Just testing the FileLogger library.\r\n")-1;
byte buffer[] = "Hello, this is my message. Just testing the FileLogger library.\r\n";

  FileLogger::append(FILE_LOG, buffer, length);
}

che vorrei portare in una funzione esterna del tipo:

void write_log(char msg[]){
long length = sizeof(msg)-1;
byte buffer[] = msg;
FileLogger::append(FILE_LOG, buffer, length);
}

in modo da richiamare nel loop solo la funzione

write_log("prova messaggio di log");

il problema è che mi da errore in fase di compilazione dicendo non riesce a determinare la size del buffer. Ho provato a farmi visualizzare la size del buffer con la funzione sizeof() ma mi dice che il buffer è grande 2 dove la mia stringa passata è molto più lunga!!!

qualcuno sa aiutarmi?

grazie!

marco

qualcuno mi da una mano??? vi prego!!!! :'( :'( :'( :'( :'( :'(

Prova cosi:

void write_log(char msg[]) {

  long length = sizeof(msg)-1; // Come mai long ? hai stringhe cosi lunghe ?

  byte buffer[sizeof(msg)] // non uso lenght in quanto e' un long

  buffer = msg;

  FileLogger::append(FILE_LOG, buffer, length);

  }


Altrimenti se non ti serve il long:

void write_log(char msg[]){
  int length = sizeof(msg)-1;
  byte buffer[lenght]
  buffer = msg;
  FileLogger::append(FILE_LOG, buffer, length);
  }

grazie mille del tuo aiuto:

la prima:

void write_log(char msg[]) {
  long length = sizeof(msg)-1; 
  //Serial.print(length);
  byte buffer[sizeof(msg)]; 
  buffer = msg;
  FileLogger::append(FILE_LOG, buffer, length);
  }

mi da quest errore:

 In function 'void write_log(char*)':
error: incompatible types in assignment of 'char*' to 'byte [1]

la seconda

void write_log(char msg[]){
  int length = sizeof(msg)-1;
  byte buffer[length];
  //Serial.print(length);
  buffer = msg;
  FileLogger::append(FILE_LOG, buffer, length);
  }

mi da questo errore

In function 'void write_log(char*)':
error: incompatible types in assignment of 'char*' to 'byte [(((unsigned int)(((int)length) + -0x000000001)) + 1)]

nel loop la richiamo così

void loop() {
write_log("testo di prova, testo di prova");
}

la cosa strana è che quando eseguo

void write_log(char msg[]) {

  long length = sizeof(msg)-1; 
  Serial.print(length);
  //byte buffer[sizeof(msg)]; 
  //buffer = msg;
  //FileLogger::append(FILE_LOG, buffer, length);

  }

il print mi da 1 (di length) quando invece la stringa passata nel richiamo della funzione del loop è molto più lunga.

ti ringrazio molto se mi puoi dare una mano! (java è più flessibile ;) )

grazie!

Marco!!!

Prova cosi.

 void write_log(char msg[]){
 unsigned int length = (strlen(msg)+1);
  byte buffer[length];
  //Serial.print(length);
  buffer = msg;
  FileLogger::append(FILE_LOG, buffer, length);
  }

ti ringrazio ma il tuo codice continua a darmi errore:

 In function 'void write_log(char*)':
error: incompatible types in assignment of 'char*' to 'byte [(((unsigned int)(((int)length) + -0x000000001)) + 1)]

alla riga

buffer = msg;

grazie mille!!!

se puo aiutare la riga:

Serial.print(length)

mi ritorna sempre 1 quando invece la stringa passata è molto più lunga!

grazie a tutti!

void write_log(byte msg[]){
  int length = (strlen(msg)+1);
  byte buffer[length];
  Serial.print(length, DEC);
  buffer = msg;
  FileLogger::append(FILE_LOG, buffer, length);
  }

grazie,

ma il problema che rimane è sempre legato a questa riga

buffer = msg;

come se non riuscisse ad inserire il msg nel buffer!

grazie dell'aiuto!

risolto grazie ad il forum int:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1240704747/15

void write_log(char msg[]){
 unsigned int length = (strlen(msg)+1);
  byte buffer[length];
  Serial.print(length);
  for(int i=0; i<length;i++)
    buffer[i] = msg[i];
  FileLogger::append(FILE_LOG, buffer, length);
  }