salut donc je comprend pas que ca beug ! vous essayerais ce week-and avec mes codes pour voir ! fin si vous avez le temps!
ecrire:
lire:
ecrire:
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; exit (77); // on s'arrete car il y a un gros problème } else { fprintf (nomFich, "%8.3f, %8.3f, %8.3f, %8.3f, %8.3f", t0, t1, t2, t3, t4); fclose (nomFich); // on ferme le plus vite possible, que l'on puisse lire à tout moment... cout << "t0: " << t0 << " t1: " << t1 << " t2: " << t2 << " t3: " << t3 << " t4: " << t4 << endl; cout << "Ecriture Ok !" << endl << endl; }} 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() < 5) { 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); } delete ds18b20; return 0;}
Code:
# include <cstdlib># include <iostream># include <cstdio># include <unistd.h>using namespace std;float tempExtLue;float tempUnitExtLue;float tempEcExtLue;float tempUnitIntLue;float tempEcIntLue;void lectureTemps () { FILE * nomFich = fopen ("/home/ludo/gpiod_cpp/testFichier/ecrit/temperaturesLue.txt", "r"); if (nomFich == NULL) { cout << "Impossible d'ouvrir le fichier en lecture !" << endl; exit (78); } else { float t0;// = {-9999.9}; float t1;// = {-9999.9}; float t2;// = {-9999.9}; float t3;// = {-9999.9}; float t4;// = {-9999.9}; int nbChamp = {fscanf (nomFich, "%f ,%f ,%f ,%f ,%f", &t0, &t1, &t2, &t3, &t4)}; if (nbChamp < 5) { cout << "erreur decodage" << endl; exit (79); } else { fclose(nomFich); cout << "lecture ok !" << endl; cout << "tO:" << t0 << " t1:" << t1 << " t2:" << t2 << " t3:" << t3 << " t4:" << t4 << endl; tempExtLue = t0; tempUnitExtLue = t1; tempEcExtLue = t2; tempUnitIntLue = t3; tempEcIntLue = t4; } }} int main(void) { while (1) { lectureTemps(); cout << tempExtLue << endl; cout << tempUnitExtLue << endl; cout << tempEcExtLue << endl; cout << tempUnitIntLue << endl; cout << tempEcIntLue << endl; }}
Statistics: Posted by ludoraspberry — Thu Mar 07, 2024 9:21 am