Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 3881

Français • Re: gpio c++

$
0
0
donc j'ai fai cela pour la l'ecriture

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);  }}
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 :

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;}
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 ?

Statistics: Posted by ludoraspberry — Mon Mar 04, 2024 5:46 pm



Viewing all articles
Browse latest Browse all 3881

Trending Articles