problema data logger (non scrive i dati su sd)

Salve a tuti,sto creando un Data logger: sto utilizzando :
Arduino UNO
Scheda Ethernet con Slot SD CARD
Sensore temperatura - umidita' DHT 11
Un Modulo DS1307 per la data e l'ora.

A livello circuitale funziona tutto,ho provato anche i vari sketch di prova (per il dht 11,ds1307,e l'sd) e funziona tutto perfettamente.Hocreato cosi' un unico sketch in cui ho unito le varie parti :in pratica dovrebbe leggere i valori del sensore e creare un file TXT sulla sd con i valori di temperatura,umidita' ora e data.Ma non mi crea il file.
Lo sketch viene compilato senza nessun problema.Sto impazzendo,perche' mi sembra che sia tutto apposto!Grazie in anticipo a tutti!Di seguito posto lo sketch in questione:

//Definizione parametri sensore dht

#include "DHT.h"

#define DHTPIN 2     // Qui settiamo il pin del sensore che e' connesso ad arduino


#define DHTTYPE DHT11   // Definisco il tipo si sensore che sto utilizzando,in questo caso DHT 11

//DESCRIZIONE DELLO SCHEMA DI COLLEGAMENTO DEL SENSORE AD ARDUINO

// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

DHT dht(DHTPIN, DHTTYPE);

//Definizione parametri DS1307 RTC
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
#include <SD.h>

File Dati; // La variabile di tipo FIle che useremo per il Log
const int chipselect = 4;  // il pin su cui e' collegato il CS della SD
String Buffer="";// qui ci mettiamo i dati da scrivere per ogni log
byte h = dht.readHumidity();
byte t = dht.readTemperature();
void setup() {
  
  Serial.begin(9600);
  //Configuro il sensore dht11
  Serial.println("DHTxx test!");
 
  dht.begin();
  
  //Configuro l'orologio di sistema RTC
 #ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();

  if (! rtc.isrunning()) {
    Serial.println("RTC NON sta funzionando!");
    // La seguente istruzione setta data e orario,prelevando i valori dall'orologio del pc
    rtc.adjust(DateTime(__DATE__, __TIME__));
  }
  
  Serial.print ("\nSto verificando la presenza della scheda...\n");
  pinMode(10, OUTPUT); // Fa funzionare la SD Lib
  
  if (!SD.begin(chipselect))
   {
     Serial.println("SD CARD NON TROVATA");
     return;
             }
     else
     {
       Serial.println("Scheda inserita e funzionate");
       Serial.println();
                         }
  
      }

void loop() {
   Buffer=""; // Si inizializza ad ogni ciclo
  DateTime now = rtc.now();
  Misura();
    Buffer +=(now.day());
    Buffer +=('/');
    Buffer +=(now.month());
    Buffer +=('/');
    Buffer +=(now.year());
    Buffer +=(' ');
    Buffer +=(now.hour());
    Buffer +=(':');
    Buffer +=(now.minute());
    Buffer +=(':');
    Buffer +=(now.second());
    Buffer +=('\t');  // un tab per separare i campi
    Buffer +=("Temperatura:");
    Buffer +=(t);
    Buffer +=(" *C");
    Buffer +=("Umidita':");
    Buffer +=(h);
    Buffer +=(" %\t");
    
    Dati = SD.open ("datalog.txt", FILE_WRITE); // apriamo il file in scrittura
    
    if (Dati)
    {
      Dati.println(Buffer); // Scriviamo in un sol colpo i dati sul file
      Dati.close(); // chiudiamo e trasferiamo su SD
      Serial.print ("Ho scritto\t");
      Serial.println(Buffer);
                           }
      else
      
      { 
        Serial.println("Errore nell'apertura di datalog.txt");
        }
       delay(10000);// la cadenza di scrittura dei dati
  
}

 void Misura()
{ 
// Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
 
  // check if returns are valid, if they are NaN (not a number) then something went wrong!
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
                  } 
  else {
    
    Serial.print("Humidity: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Temperature: ");
    Serial.print(t);
    Serial.println(" *C");
  }

}
  1. usa i CODE TAGs e non i QUOTE TAGs per far vedere lo sketch.
  2. non puoi mettere delle chiamate a funzioni fuori dal setup() o loop() come
 byte h = dht.readHumidity();
byte t = dht.readTemperature();
  1. scusami nello loop() dove leggi la temperatura?
  2. sei sicuro che la SS della SD é pin 10 e non pin 4 ?
const int chipselect = 4;  // il pin su cui e' collegato il CS della SD
...
pinMode(10, OUTPUT); // Fa funzionare la SD Lib
...
  if (Dati)
    {
      Dati.println(Buffer); // Scriviamo in un sol colpo i dati sul file
      Dati.close(); // chiudiamo e trasferiamo su SD
      Serial.print ("Ho scritto\t");
      Serial.println(Buffer);
                           }
  1. Cosa scrive lo Sketch sull monitor seriale?
    Ciao Uwe

Ciao ti ringrazio ora funziona! :slight_smile: In pratica ho eliminato la void Misura che non mi serviva a nulla,e inserito tutto nel loop.
Una domanda,ma io per postare lo sketch ho utilizzato la funzione "copia per il forum",forse dovrei usare copia in formato html?
Grazie ancora!

mooger:
Una domanda,ma io per postare lo sketch ho utilizzato la funzione "copia per il forum",forse dovrei usare copia in formato html?
Grazie ancora!

Leggi qui, sezione 7, spiega come postare il codice:
http://forum.arduino.cc/index.php?topic=149082.0

L'ho sistemato io.... :expressionless: