Bonjour à tous,
Comme beaucoup, je fais mes premières armes sur Arduino avec un DHT22 dont je veux écriture périodiquement les mesures sur une carte SD. Je possède le duo classique Arduino Uno et shield Datalogger d'Adafruit. Rien de bien compliqué vous allez me dire.
Bref, tout se passe bien quand la carte est connecté au PC : les mesures s'affichent dans le moniteur et "s'écrvient" dans un fichier "datalog.txt" sur la carte SD. Comme prévu.
Mais dans la configuration ou la carte est alimentée par une alimentation extérieure (12 V, 600 mA), plus rien. Aucun fichier n'est crée sur la SD qui reste vide. Cela fait des jours que je cherche, teste, écumant bouquins, forums et sites internet et je ne trouve pas grand chose...
Notamment, purger le code des éléments liés au Serial.print... Mais sans succès : Writing data to an SD card without the Serial Monitor - Project Guidance - Arduino Forum
Je me permet donc de vous solliciter pour jeter un coup d’œil à mon code (il est très détaillé... because j'apprends !)
// BIBLIOTHEQUE
#include <DHT_U.h> // Etablit un dialogue avec le DHT22
#include <RTClib.h> // Etablit un dialogue avec la RTC
#include <Wire.h> //Etablit un dialogue avec le protocole sur 2 fils TWI (appelé aussi I2C) : la RTC communique en I2C
#include <SPI.h>
#include <SD.h>
// DEFINITION DES CONSTANTES
#define DHTPIN 2 // Définition du pin de connection
#define DHTTYPE DHT22 // DHT 22 (AM2302)
DHT dht(DHTPIN, DHTTYPE) ; // dht(numéro de la pin, type de DHT)
RTC_DS1307 rtc;
// DECLARATION DES VARIABLES
String ChaineDonnees ; // Objet contenant les infos à écrire
int id = 0 ; // Compteur de mesure
const int chipSelect = 10 ;
File dataFile ;
///////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{
Serial.begin(9600);
Serial.println("Welcome in the DHT22 tester!");
Serial.print("Initializing SD card...");
dht.begin();
rtc.begin();// Vérification de la RTC
if (!rtc.isrunning()) {
rtc.adjust(DateTime(__DATE__,__TIME__)) ;
return;
}
if (!SD.begin(chipSelect)) { // Vérification de la présence de la SD
Serial.println("Card failed, or not present"); // On arrete là
return;
}
Serial.println("DHT, RTC and SD card initialized");
dataFile = SD.open("datalog.csv", FILE_WRITE) ; // Vérification et parametrage du fichier
if (dataFile) {
dataFile.println("id|unixtime|date|time|temp|hr"); // Ecriture des entetes
dataFile.close(); // Fermeture
Serial.println("id|unixtime|date|time|temp|hr");
}
else
{
Serial.println("Erreur d'ouverture de la SD");
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
float h = dht.readHumidity(); //on lit l'hygrometrie
float t = dht.readTemperature(); //on lit la temperature en celsius (par defaut)
DateTime now = rtc.now() ; // On fait un "top temps"
ChaineDonnees =
String(id)+"|"+
String(now.unixtime(),DEC)+"|"+
String(now.day(),DEC)+"/"+String(now.month(),DEC)+"/"+String(now.year(),DEC)+"|"+ // Construction de la date
String(now.hour(),DEC)+":"+String(now.minute(),DEC)+":"+String(now.second(),DEC)+"|"+ // Construction de l'heure
String(t)+"|"+String(h);
dataFile = SD.open("datalog.csv", FILE_WRITE); // Ouverture du fichier en mode écriture
if (dataFile) {
dataFile.println(ChaineDonnees); // On y écrit les données
dataFile.close(); // On le ferme
Serial.println(ChaineDonnees); // print to the serial port too:
}
else
{
Serial.println("Erreur d'écriture de la SD");
}
id += 1 ;
ChaineDonnees = "" ;
delay (10000) ;
}
Merci pour vos avis, là je sèche et commence un peu désespérer...