donc j'ai fai cela pour la l'ecriture
ce qui donne dans mon fichier
22.062, 22.000, 22.250, 21.688, 22.062
donc en faite on creer ce programme pour qu'il ecrit les temperature dans un fichier text et qu'il tourne tous seul de sont coter avec le programme de lecture des ds18B20 qui a besoin du fichier des id des sondes .
ce qui donne et qui fonctionne tres rapidement :
en sortie
t0: 22.0625 t1: 22 t2: 22.25 t3: 21.6875 t4: 22.0625
Ecriture Ok !
ds_temperature[0] // temperatureExt = 22 C
ds_temperature[1] // temperatureUniteExt = 22 C
ds_temperature[2] // temperatureEchangeurExt = 22 C
ds_temperature[3] // temperatureUniteInt = 21.5 C
ds_temperature[4] // temperatureEchangeurInt = 22 C
date, heure, annee -> Mon Mar 4 18:46:02 2024
et de creer le code de lecture qui lit le fichier creer sur le programme gainable ?
Code:
void ecritTemps () { FILE * nomFich; float t0 = ds_temperature[0]; float t1 = ds_temperature[1]; float t2 = ds_temperature[2]; float t3 = ds_temperature[3]; float t4 = ds_temperature[4]; nomFich = fopen ("temperaturesLue.txt", "wt"); if (nomFich == NULL) { cout << "Impossible d'ouvrir le fichier en ecriture !" << endl; } else { fprintf (nomFich, "%8.3f, %8.3f, %8.3f, %8.3f, %8.3f", t0, t1, t2, t3, t4); cout << "t0: " << t0 << " t1: " << t1 << " t2: " << t2 << " t3: " << t3 << " t4: " << t4 << endl; cout << "Ecriture Ok !" << endl << endl; fclose (nomFich); }}
22.062, 22.000, 22.250, 21.688, 22.062
donc en faite on creer ce programme pour qu'il ecrit les temperature dans un fichier text et qu'il tourne tous seul de sont coter avec le programme de lecture des ds18B20 qui a besoin du fichier des id des sondes .
ce qui donne et qui fonctionne tres rapidement :
Code:
#include <string>#include <algorithm>#include <iostream>#include <fstream>#include <iomanip>#include "gpioPin.hpp"#include <unistd.h>#include <signal.h>#include <math.h>#include <array>#include "BB_DS18B20.hpp"#include <vector>#include <ctime>#include <stdio.h>using namespace std;BB_DS18B20 * ds18b20;std::vector < unsigned long long> ds_ID; //vector contenant l'ID des ds18b20std::vector < double > ds_temperature; //vector qui va contenir les températures des ds18b20void loadDSConfig (string filename, std::vector < unsigned long long > & array) { unsigned long long ds_ID; stringstream ss; ifstream file (filename); if (file.is_open() ) { string line; while (getline (file, line) ) { // enleve espace line.erase (remove (line.begin(), line.end(), ' '), line.end() ); // avons-nous au moins 17 caracteres if (line.size() == 17) { // ok avons-nous 28- if (line.substr (0, 3) == "28-") { stringstream ss (line.substr (3, -1) ); ss >> hex >> ds_ID; ds_ID = (ds_ID << 8) | 0x28; array.push_back ( ds_ID); // valide donc insère ce capteur dans la matrice vector ds_ID } } } file.close(); }}void lireDS18B20() { // partir une conversion ds18b20 -> GlobalStartConversion(); // lire les capteurs // l'indentification des DS18B20 sont dans ds_ID for (uint loop = 0; loop < ds_ID.size(); loop++) { if (ds18b20 -> ReadSensor (ds_ID[loop]) ) { // valeur valide ds_temperature[loop] = ds18b20 -> temperature; } else ds_temperature[loop] = -9999.9; }}void ecritTemps () { FILE * nomFich; float t0 = ds_temperature[0]; float t1 = ds_temperature[1]; float t2 = ds_temperature[2]; float t3 = ds_temperature[3]; float t4 = ds_temperature[4]; nomFich = fopen ("temperaturesLue.txt", "wt"); if (nomFich == NULL) { cout << "Impossible d'ouvrir le fichier en ecriture !" << endl; } else { fprintf (nomFich, "%8.3f, %8.3f, %8.3f, %8.3f, %8.3f", t0, t1, t2, t3, t4); cout << "t0: " << t0 << " t1: " << t1 << " t2: " << t2 << " t3: " << t3 << " t4: " << t4 << endl; cout << "Ecriture Ok !" << endl << endl; fclose (nomFich); }}void my_ctrl_c_handler (int s) { delete ds18b20; release_gpiod(); exit (0);}int main (void) { int DS_PIN = 4; pinMode (DS_PIN, OPENDRAIN_PULLUP); ds18b20 = new BB_DS18B20 (gpioline[DS_PIN]); // charge info sur les ds18b20 loadDSConfig ("DS18B20.conf", ds_ID); // charge info sur les ds18b20 char ficConf[654] = "DS18B20.conf"; FILE * confHan = fopen(ficConf, "r"); if (NULL == confHan) { std::cout << "Le fichier de configuration \n" << ficConf << "\n doit exister\n"; return (111); } fclose(confHan); loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent std::cout << "\n configure\n"; if (ds_ID.size() < 2) { std::cout << "\nVous devez avoir au moins un thermomètre\n"; return(112); } // créer le vecteur contenant la température des DS18b20 for (uint loop = 0; loop < ds_ID.size(); loop++) { ds_temperature.push_back (-9999.9); // enregistre une information invalide pour commencer } while (1) { time_t rawtime; time ( & rawtime); cout << "date, heure, annee -> " << ctime ( & rawtime) << endl; lireDS18B20(); ecritTemps(); cout << "ds_temperature[0] // temperatureExt = " << (int (ds_temperature[0] * 2) ) / 2.0 << " C " << endl; // sonde NORD cout << "ds_temperature[1] // temperatureUniteExt = " << (int (ds_temperature[1] * 2) ) / 2.0 << " C " << endl; cout << "ds_temperature[2] // temperatureEchangeurExt = " << (int (ds_temperature[2] * 2) ) / 2.0 << " C " << endl; cout << "ds_temperature[3] // temperatureUniteInt = " << (int (ds_temperature[3] * 2) ) / 2.0 << " C " << endl; cout << "ds_temperature[4] // temperatureEchangeurInt = " << (int (ds_temperature[4] * 2) ) / 2.0 << " C " << endl; signal (SIGINT, my_ctrl_c_handler); } return 0;}
t0: 22.0625 t1: 22 t2: 22.25 t3: 21.6875 t4: 22.0625
Ecriture Ok !
ds_temperature[0] // temperatureExt = 22 C
ds_temperature[1] // temperatureUniteExt = 22 C
ds_temperature[2] // temperatureEchangeurExt = 22 C
ds_temperature[3] // temperatureUniteInt = 21.5 C
ds_temperature[4] // temperatureEchangeurInt = 22 C
date, heure, annee -> Mon Mar 4 18:46:02 2024
et de creer le code de lecture qui lit le fichier creer sur le programme gainable ?
Statistics: Posted by ludoraspberry — Mon Mar 04, 2024 5:46 pm