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

Français • Re: gpio c++

$
0
0
Et voila une version simple qui lit l'identification des capteurs d'un fichier de configuration et ensuite lit à répétition , au 5 secondes environ , les capteurs qui sont envoyés dans une matrice vector "ds_temperature".

J'ai aussi formaté l'affichage pour une précision de 0.5 degrée celsius.

Cela ne devrait pas être trop dur à comprendre. Il restera à modifier le fichier de configuration en json ou xml, je préfère xml, de cette façon tu pourras ajouter tes autres paramètres.

P.S. ne pas oublier de lire le fichier de configuration sur le même répertoire ou simplement modifier "loadDSConfig()" avec le bon chemin du fichier.

voici mon nouveau main.cpp

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>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'indetification 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 afficherDS18B20(){    // afficher les valeurs de températures    // les valeurs sont dans la matrice en vecteur ds_temperature    for(uint loop=0;loop < ds_ID.size();loop++)    {      cout << ds18b20->IdToString(ds_ID[loop]) << " : ";      if(ds_temperature[loop]==(-9999.9))          cout << "-----" << endl;      else          cout << setw(6) << fixed << setprecision(1) <<  (int(ds_temperature[loop]*2))/2.0 << "°C" << endl;    }}int main(void){  /******  ceci est le setup  ******/  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);  // 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  /****** ceci est la loop  *****/  while(1)  {    lireDS18B20();    afficherDS18B20();    // insérer deux lignes    cout << endl << endl;    // Délai de 4.25 secondes environ    usleep(4250000);  } delete ds18b20; return 0;}

Code:

daniel@Pi5:~/gpiod_cpp $ ./test28-270217C1129CFF :   16.0°C28-C40217C1283EFF :   16.0°C28-050117C1747EFF :   17.0°C28-270217C14203FF :   16.5°C28-EC0217C0FCEBFF :   16.5°C28-060117C190E7FF :   17.0°C28-270217C1129CFF :   16.0°C28-C40217C1283EFF :   16.0°C28-050117C1747EFF :   17.0°C28-270217C14203FF :   16.5°C28-EC0217C0FCEBFF :   16.5°C28-060117C190E7FF :   17.0°C

Statistics: Posted by danjperron — Sat Feb 03, 2024 2:35 am



Viewing all articles
Browse latest Browse all 5368

Trending Articles