[conseil] enregistement sur carte SD
bonjour,
je suis totalement novice en matière d'arduino. après plusieurs jours de recherches sur internet j'ai réussi faire les exercices de base. maintenant j'aimerai réaliser le capteur qui m'intéresse. pour cela dans un premier temps j'aimerai enregistrer les mesures de température et d'humidité de mon capteur sur un fichier csv dans une carte sd. écrire comme ça ça parait simple... mais malheureusement pour moi c'est la première de mon instrumentation et elle ne fonctionne pas...
alors voilà le matériel que j'ai acheté : capteur de température et humidité dht11 (dont j'ai trouvé sur un tutorial comment le paramétrer), un schield avec carte sd et une carte arduino uno.
je connecte le tout ensemble et ensuite j'ai injecté le code suivant. au final quand je souhaite lire ma carte sd j'ai un fichier csv qui été créé mais il n'y rien dedans...
j'aurai donc aimé avoir quelques conseils pour comprendre pourquoi cela ne fonctionne pas.
en vous remerciant.
je suis totalement novice en matière d'arduino. après plusieurs jours de recherches sur internet j'ai réussi faire les exercices de base. maintenant j'aimerai réaliser le capteur qui m'intéresse. pour cela dans un premier temps j'aimerai enregistrer les mesures de température et d'humidité de mon capteur sur un fichier csv dans une carte sd. écrire comme ça ça parait simple... mais malheureusement pour moi c'est la première de mon instrumentation et elle ne fonctionne pas...
alors voilà le matériel que j'ai acheté : capteur de température et humidité dht11 (dont j'ai trouvé sur un tutorial comment le paramétrer), un schield avec carte sd et une carte arduino uno.
je connecte le tout ensemble et ensuite j'ai injecté le code suivant. au final quand je souhaite lire ma carte sd j'ai un fichier csv qui été créé mais il n'y rien dedans...
j'aurai donc aimé avoir quelques conseils pour comprendre pourquoi cela ne fonctionne pas.
en vous remerciant.
code: [select]
#include <spi.h> // inclusion de la librairie spi (communications bas niveau)
#include <sd.h> // inclusion de la librairie sd (carte sd en format fat)
#define dht11_pin 0 // capteur temperature et humidite sur le ao
//definition du capteur
byte read_dht11_dat()
{
byte = 0;
byte result=0;
for(i=0; i< 8; i++)
{
while(!(pinc & _bv(dht11_pin))); // wait 50us
delaymicroseconds(30);
if(pinc & _bv(dht11_pin))
result |=(1<<(7-i));
while((pinc & _bv(dht11_pin))); // wait '1' finish
}
return result;
}
//definition du fichier ou on enregistre les donnees
file logfile; // fichier de log
const unsigned long pausebetweenreadings = 900000ul; // 90 000 ms = 90 secondes = 1.5 minutes
void setup()
{
//pour le capteur de temperature et humidite
ddrc |= _bv(dht11_pin);
portc |= _bv(dht11_pin);
//pour initialiser le port serie pour les communications
serial.begin(9600);// initialisation du port série
serial.println("iniciando lectura de datos...");
pinmode(10, output); // ss spi en output
/* initialisation de la carte sd (ss = 4) */
if (!sd.begin(4)) {
serial.println(f("initialisation de la carte sd : echec !"));
for(;;); // boucle infini
}
serial.println(f("initialisation de la carte sd : succes !"));
/* ouverture du fichier de log */
logfile = sd.open("log.csv", file_write);
if (logfile)
serial.print(f("ouverture du fichier de log : succes !"));
else {
serial.println(f("ouverture du fichier de log : echec !"));
for(;;); // boucle infini
logfile.println("numeromesure;humidite; temperature;millis");
}
}
void loop()
{
byte dht11_dat[5];
byte dht11_in;
byte i;
// start condition
// 1. pull-down i/o pin 18ms
portc &= ~_bv(dht11_pin);
delay(18);
portc |= _bv(dht11_pin);
delaymicroseconds(40);
ddrc &= ~_bv(dht11_pin);
delaymicroseconds(40);
dht11_in = pinc & _bv(dht11_pin);
if(dht11_in)
{
serial.println("dht11 start condition 1 not met");
return;
}
delaymicroseconds(80);
dht11_in = pinc & _bv(dht11_pin);
if(!dht11_in)
{
serial.println("dht11 start condition 2 not met");
return;
}
delaymicroseconds(80);
// ready data reception
(i=0; i<5; i++)
dht11_dat[i] = read_dht11_dat();
ddrc |= _bv(dht11_pin);
portc |= _bv(dht11_pin);
byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];
// check check_sum
if(dht11_dat[4]!= dht11_check_sum)
{
serial.println("dht11 checksum error");
}
{
logfile.print(millis() / 1000); // note un affiche de la date/heure via un ds1307 serait plus approprié
logfile.print(';');
logfile.print(dht11_dat[0],dec);
logfile.print(';');
logfile.print(dht11_dat[2],dec);
logfile.println();
// attente avant la prochaine mesure
delay(pausebetweenreadings);
}
}
bonjour,
inspire toi de ce script
http://arduino.cc/en/tutorial/datalogger
edit : tu n'ouvre pas ton fichier pour écrire dedans en plus dans ton loop, donc ca peux pas le faire
inspire toi de ce script
http://arduino.cc/en/tutorial/datalogger
edit : tu n'ouvre pas ton fichier pour écrire dedans en plus dans ton loop, donc ca peux pas le faire
Arduino Forum > International > Français (Moderators: jfs, Snootlab) > [conseil] enregistement sur carte SD
arduino
Comments
Post a Comment