Problème d'ouverture de fichier

Un log shield sur carte SD avec horloge RTC et zone de prototypage à pastilles carrées

Problème d'ouverture de fichier

Message non lude plujasol » Lun 6 Jan 2014 17:07

Bonjour,

Je m'excuse déjà pour mon français, c'est pas ma langue maternelle, et aussi pour mes questions peut-être assez "débutantes"... :oops: Je n'ai que commencé par utiliser l'arduino et tous ses amis. Je suis en train de construire un régulateur de température pour des abeilles qui aiment voler dans les 35°C ;)

Pour mon code j'ai pris l'exemple de Stéphane "Stockage horodaté de valeurs d'un capteur"(Post dans le forum mémoire) et je l'ai adapté à mon déjà enorme code. La différence la plus grande chez moi, c'est que j'utilise un capteur numérique et pas analogue. Mais ça devrait marcher, car la caption des dates j'ai déjà réussi à les afficher dans le serial Monitor. À ce moment lá je faits indiquer tous les résultat sur un LCD que j'ai mis au-dessus du mémoire. Jusqu'à lá je veux prendre les dates de mon capteur et les afficher sur le LCD et en même temps je veux ecrire ces dates dans un fichier sur la SD-Card.

Le problème c'est que j'arrive pas à ouvrir le fichier, donc "erreur ouverture du fichier durant la configuration". Avec le code de Stéphane ça arrive à écrire dans le fichier et même qu'il y a pas de capteur analogue au pin 0, il fait des valeurs qui change et les écris... c'est un peu de magie pour moi :?
Jusqu'à là personne a repondu a ce post(8. janvier) alors je crois que c'est pas grave si je edite mon code et je le mais "au temps". Le code est maintenant plus petit(j'utilise des int et plus des double) et peutêtre plus compréhensible. Ce que c'est aussi nouveau maintenant c'est que d'abord dans le void setup il arrive a ecrire et donc ouvrir le fichier, alors la phrase "Capture and timestamp of values from the sensor, according to RTC" apparait dans le fichier sur la SD.

Mon code est partagé dans plusieurs tabs et il y a plein de code pour le LCD et le capteur digital, alors j'espère que je ne vais pas déjà vous étouffer avec cette bombe de code... je m'excuse! :oops:
Alors le premier code que je vous mets c'est le "main" alors le void setup et le void loop et tous les includes et defines etc.
À part de ce main j'ai encore 3 tabs avec les fonctions que j'utilise;
Le 1er tab pour capturer la température et l'humidité et les garder dans les variables TempDHTInt/TempDHTDec(Partie avant le coma et aprés le coma) et HumidDHT. (fonctionne)
Le 2ème tab est le plus intéréssant pour vous. Il devrait faire la même chose que fait le loop dans le code de Stéphane, alors écrire les dates de TempDHTInt/TempDHTDec et HumidDHT dans le fichier.
Le 3ème tab est la fonction qui affiche la température et l'humidité sur le LCD à tout temps. (fonctionne)

Code: Tout sélectionner
#include <DHT.h>          // DHT library for DHT44
#include <Wire.h>         // Librariy for RGB-LCD Shield
#include <Adafruit_MCP23017.h>         // Librariy for RGB-LCD Shield
#include <Adafruit_RGBLCDShield.h>   // Library for RGB-LCD Shield
#include <SD.h>          // SD library for data logger
#include <RTClib.h>    // RealTimeClock library for data logger

// Variable and pin definitions for DHT Sensor:
#define DHT44_PIN 3  // DHT44 Temperature & Humidity Sensor (RHT05)
int TempDHTInt;    // Variable to store the values before the comma of the temperature measured by DHT44
int TempDHTDec;  // Variable to store the decimal values after the comma of the temperature measured by DHT44
int HumidDHT;      // Variable to store the humidity measured by DHT44

// Variable definitions for LCD Shield:
Adafruit_RGBLCDShield lcd = Adafruit_RGBLCDShield();
#define YELLOW 0x3

// Variable and pin definitions for DataLogger Mémoire Shield
const char pin_chipSelect = 10;             // pin 10 is used by the shield mémoire for the ChipSelect signal
const unsigned long F_refresh = 5000;   // frequence of refreshment for the sensor, in milliseconds
RTC_DS1307 RTC;
File loggerFile;
String datastring;

void setup()
{
  Serial.begin(9600); // start serial communication at 9600 bits of data per second
 
  // Set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // set backlight color
  lcd.setBacklight(YELLOW);
 
  // DataLogger
  Serial.print("Initialisation of SD-Card...");
  pinMode(pin_chipSelect, OUTPUT);  // set pin to output
  Wire.begin();
  RTC.begin();                           
  if(! RTC.isrunning()){  // if RTC is not configured, compile clock time with compuer values
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  if (!SD.begin(pin_chipSelect)){  // if the SD-Card is not present...
    Serial.println("SD-Card false or not available");
    lcd.print("SD-Card false or");
    lcd.setCursor(0, 1);
    lcd.print("not available");
    delay(3000);
    return;  // exit the execution
    // while(1){};
  }
  Serial.println("SD-Card OK.");
  datastring = "\nCapture and timestamp of values from the sensor, according to RTC\n---------\n ";
  loggerFile = SD.open("log1.txt", FILE_WRITE);  // Open the file in writing mode
  if (loggerFile){    // If the file already exists, on écrira à la suite des données présentes.
    loggerFile.println(datastring);
    loggerFile.close();
    Serial.println(datastring);              // dupliquer la donnée sur port série
  }
  else{    // if fail to open, display the error
    Serial.println("erreur d'ouverture du fichier durant la configuration");
    lcd.print("Failed to open");
    lcd.setCursor(0, 1);
    lcd.print("the file(config)");
    delay(3000);
  }
}

void loop()
{
  DHT44();
  RGBLCDShield();
  DataLogger();
  delay(F_refresh);
}

Ici le tab avec la fonction DataLogger() qui devrait ecrire les dates dans le fichier.
Code: Tout sélectionner
void DataLogger()
{
  DateTime moment = RTC.now();         //Init de l'objet temporel
  datastring=String(moment.day(),DEC);
  datastring+='/';
  datastring+=String(moment.month(),DEC);
  datastring+='/';
  datastring+=String(moment.year(),DEC);
  datastring+=' ';
  datastring+=String(moment.hour(),DEC);
  datastring+=':';
  datastring+=String(moment.minute(),DEC);
  datastring+=':';
  datastring+=String(moment.second(),DEC);
 
  datastring += ("\t Temperature DHT44 = ");            // préalablement remplie avec les données temporelles
  datastring += TempDHTInt;
  datastring += (".");
  datastring += TempDHTDec;
  datastring += ("C\t Humidity DHT44 = ");            // préalablement remplie avec les données temporelles
  datastring += HumidDHT;
  datastring += ("%");
 
  loggerFile = SD.open("log1.txt", FILE_WRITE);
 
  if (loggerFile){
    loggerFile.println(datastring);
    loggerFile.close();
    Serial.println(datastring);                 // dupliquer la donnée sur port série
  }
  else{
    Serial.println("erreur d'ouverture du fichier");
  }
  datastring =0;
}


Et si ça vous aide les deux autres tabs(fonctions):
fonction du capteur DHT44
Code: Tout sélectionner
void DHT44()
{
  dht DHT_Temp;
  Serial.print("Sensor: DHT44, \t status: ");
  int chk = DHT.read22(DHT44_PIN);
  switch (chk){
    case DHTLIB_OK: 
      Serial.print("OK,\n");
      break;
    case DHTLIB_ERROR_CHECKSUM:
      Serial.print("Checksum error,\n");
      break;
    case DHTLIB_ERROR_TIMEOUT:
      Serial.print("Time out error,\n");
      break;
    default:
      Serial.print("Unknown error,\n");
      break;
  }
 
  int TempDummy = DHT.temperature * 10;
  TempDHTInt = TempDummy / 10;
  TempDHTDec = TempDummy % 10;
  HumidDHT = int(DHT.humidity * 10) / 10;
}

LCD Display
Code: Tout sélectionner
void RGBLCDShield()
{
  // display DHT44 temperature and humidity on first line
  lcd.setCursor(0, 0);  // set cursor to (0,0) position
  lcd.print("T:");
  lcd.print(TempDHTInt);
  lcd.print(".");
  lcd.print(TempDHTDec);
  lcd.print("C H:");
  lcd.print(HumidDHT);
  lcd.print("%");
}


J'utilise la version d'IDE Arduino 1.0.5 sur mon Windows 7.

J'espère que quelqu'un peut m'aider!

Merci beaucoup en avance!!
iris

allShields.jpg
l'Arduino avec le mémoire et le LCD Shield au-dessus
allShields.jpg (116.14 Kio) Vu 2898 fois


memoireSetUp.jpg
J'ai enlevé le LCD Shield pour que vous voyez le mémoire et comment j'ai connecté le capteur
memoireSetUp.jpg (161.68 Kio) Vu 2898 fois
plujasol
 
Messages: 2
Inscription: Lun 6 Jan 2014 11:00

Re: Problème d'ouverture de fichier

Message non lude JPh » Dim 9 Nov 2014 14:33

Bonjour,
j'arrive un peu tard sur le forum mais ton problème a-t-il trouvé une solution ?
Sinon je pourrai peut-être t'aider ...
je viens de faire à peu près la même chose avec un DHT 22 ...
JPh.
JPh
 
Messages: 4
Inscription: Dim 9 Nov 2014 07:21
Localisation: Arès (Bassin d'Arcachon - Gironde)


Retourner vers Mémoire

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités

cron