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

Français • Re: gpio c++

$
0
0
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:

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

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



Viewing all articles
Browse latest Browse all 4983

Trending Articles