dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Wed Feb 14, 2024 5:07 pm

ludoraspberry wrote:
Wed Feb 14, 2024 4:35 pm
salut les ceupins , j'ai trouver un truc sympa pour mon projets c'est MagicMirror !
je l'ai installer franchement c'est pas mal du tous
https://magicmirror.builders/


qu'est ce que vous en pensez ??
Que vous n'avez plus qu'à lire la doc de MagickMirror pour greffer vos codes à leur structure ... Si cette doc est compliquée, essayez de ne pas trop vous disperser....
Si votre projet s'y greffe tout seul, n'hesitez pas à expliquer comment... (FYI j'ai 5 ou 6 gestionnaires de projets -dont un en état douteux (non maintenu) - en attente de lecture.... Ils osnt tous hypercools...) Edité selon viewtopic.php?t=360981#p2165590 (un post récent) vous aurez de l'aide ... ou pas

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Thu Feb 15, 2024 7:08 am

avant toute chose faut que je creer des modules pour separer la lecture des sondes de mon code
ci desfois vous auriez des exemples de la maniere de faire ?

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Thu Feb 15, 2024 9:38 am

Il faut que vous fassiez la liste de tout ce qui sert à communiquer entre la partie qui lit les termomètres et les parties (visualisation, machine d'état) qui exploitent ces valeurs.

Une façon de faire (vers le 20 - 25 janvier, danjperron envisageait de faire, soit du xml, soit du yaml -les deux sont très bien- ) est de faire des csv, plus sfacile à écrire (j'ai utilisé le manuel de fopen pour le faire, livré avec bookworm) ...
Il faudrait déjà que **vous decidiez** quel format...
les csv sont très facile à lire (et les yaml sont encore plus faciles; les xml un peu plus durs) pour un oeil ...)


De mémoire -je le retouverai ce week end - , j'ai fait un bout de code marchant sur RPi pour des nombres, et stockant dans un fichier (problème, comment le nommer et le retrouver, ce fichier? Son nom sera-t-il gravé dans le code, passé en paramètre d'appel du/des main.s. -je vous ai montré comment il ya une dizaine de posts - ou ???). Il peut fonctionner aussi sur un Arduinomega, muni d'un lecteur de cartes SD IIRC - je prèfère me tourner vers une bibliothèque C dans le monde Arduino- ))

Code: Select all

   // fait de memoire, avec l'aide de https://cplusplus.com/reference/cstdio/fopen/
   FILE * ecritTemp = fopen("LE CHEMIN COMPLET DU FICHIER OU ON ECRIT",  "w"); // "a" si on fait du datalogging
   if (NULL != ecritTemp) {
   char  buf[80]; // ligne de 80 caracteres, lisible partout
   Edité ne pas oubleir de separer chaque champ par une virgule -pour le csv-
   snprintf(bufTemp, sizeof(bufTemp, "%f, %d\n", parametre_reel_a_ecrire, parametre_entier_a_ecrire); // a adapater, evidemment
   } else {
      printf("Eriture fichier tempes impossible\n"); // ou autre traitement
      exit 99;
  }
  fclose(ecritTemp);
A noter que, si vous faites une decoupe de votre logiciel en trois, il faudra ... un quatrieme morceau, pour gerer les morceauxx communs (et par exemple, si on lit dans un fichier, avoir dans le même bloc de code ce qui permet d'écrire est assez confortable)

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Thu Feb 15, 2024 4:55 pm

pour la methode csv faut que je refait ma machine a etat ?? comme :
https://julien-blanc.developpez.com/tut ... e-csv-c++/

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Thu Feb 15, 2024 7:11 pm

Merci pour le lien, qui est très bien.
Je pensais à quelque chode de beaucoup plus simple, qui aurait comme avantage de fonctionner aussi sur Arduino, en se limitant à des données numeriques (des chiffres, -, et le point decimal -separateur de virgules- anglosaxon)
Votre lien est excellent, car il traite le cas général (mais vous n'en avez pas besoin a priori, si j'ai bien lu).
Je m'en occupperai ce weekend... après mêtre assuré que le format csv (utilisé souvent par excel) est utile (danjperron pensait à d'autres formats, laissez moi le temps de naviguer dans ce fil de forum...)

Edité : le tuto que vous citez utilise, pour ses propres besoins, une machine à états. qui est totalement independante de la vôtre...
les deux peuvent coexister. Je m'en tiendai cependant à des bouts de code plus simples, -mais je peux me tromper-. Merci pour cette lecture, ....

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Wed Feb 21, 2024 4:34 pm

salut les gars ! au secour au secour !!!!
ma carte SD ne demarre plus , ilisible sur un autre ordinateur ! donc j'ai tous formater !
j'avais une autre carte SD raspberry blueseye toute neuve , mais la je rencontre des erreurs , quand j'installe la bibliotheque de daniel .

le test fonctionne bien ,

quand je mais ce code

Code: Select all

#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 ds18b20
std::vector<double> ds_temperature;      //vector qui va contenir les températures des ds18b20

void 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;
}
la c'est le drame

g++ -Wall -g -c BB_DS18B20.cpp
g++ -Wall -g -c gpioPin.cpp
g++ -Wall -g -c main.cpp
In file included from /usr/include/c++/10/vector:67,
from main.cpp:12:
/usr/include/c++/10/bits/stl_vector.h: In member function 'void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = long long unsigned int; _Alloc = std::allocator<long long unsigned int>]':
/usr/include/c++/10/bits/stl_vector.h:1198:21: note: parameter passing for argument of type '__gnu_cxx::__normal_iterator<long long unsigned int*, std::vector<long long unsigned int> >' changed in GCC 7.1


c'est pas due as une mise a jour ou car je n'ai pas installer wiringpi avant???

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Wed Feb 21, 2024 5:09 pm

j'avais une autre carte SD raspberry blueseye toute neuve
Bon, je n'ai jamais eu le moindre problème avec les bibliothèques de danjperron et Bull's Eyeye (je préfère rester sous Oeil de Taure, Mite à Livres étant un peu jeune à mon goût).
car je n'ai pas installer wiringpi avant?
Il n'y a pas à installer wiringpi -qui est obsolète/obsolescente : son arrêt de mort a déjà 5 ans... https://www.framboise314.fr/installer-l ... n-buster/- . Mais gpiod / libgpiod

Je mets très régulièrement à jour Bullseye et ça n'a jamais déclenché le moindre problème pour moi(les très éventuels défauts appraissant lors d'une mise à jour se produisent -rarement- comme des défauts de jeunesse. Ce n'est pas le cas de BullsEye.)
En suivant scrupuleusement les consignes du github de danjperron
N.B. you need libgpiod
sudo apt-get install gpiod libgpiod-dev libgpiod-doc
(et avant, faire sudo apt update && sudo apt upgrade bien sûr)
je n'ai pas eu le moindre problème.

comme vous êtes sous github, il serait assez sympa d'indiquer dans quel dépôt vous allez piocher pour rencontrer votre souci?
Parce que danjperron a plus de 5 douzaines de dépôts, à ce jour, plus ludoiphone/gainable... Si on se remet dans le coup tous les week ends, c'est un peu ... compliqué...

Edité : les messages que vous postez empêchent ils la génération d'éxécutables (parce que vous pouvez avoir des warnings de g++ : comme le Makefile n'a pas des options d'arret en cas de warning -c'est à faire si on est vraiment très puriste- , il peut continuer à compiler et à faire des executables....). Sans une copie disant si c'est une erreur ou un warning, j'en suis réduit, loin de mon RPi, à spéculer...
Edité : une recherche goggle sur le message indiquerait que c'est un warning, qui peut être ignoré https://stackoverflow.com/questions/481 ... -gcc-7-1-m
Last edited by dbrion1 on Wed Feb 21, 2024 5:27 pm, edited 1 time in total.

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Wed Feb 21, 2024 5:18 pm

j'ai juste installer :
je suis déprimer !


Code: Select all

sudo apt-get install gpiod libgpiod-dev libgpiod-doc
cloner le github
Code: Select all

git clone https://github.com/danjperron/gpiod_cpp.git
et compiler l'exemple
Code: Select all

cd gpiod_cpp
make
et enfin le rouler
Code: Select all

./test

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Wed Feb 21, 2024 5:33 pm

Je pourrai voir sous bullseye demain ou après demain.
Je ne crois pas que ce soit une erreur, juste un avertissement... Pas de quoi déprimer...

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Wed Feb 21, 2024 5:35 pm

ok merci

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Thu Feb 22, 2024 8:46 am

salut en faite c'etait du fais que j'etait sur une version 32bits
tous est bon au final , je me fais une autre carte sd de sauvgarde au cas ou ca recommence.

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Fri Feb 23, 2024 8:13 am

salut les ami !
j'ai un petit souci d'affichage terminal
ds_temperature[0] // temperatureExt = 25 °C
ds_temperature[1] // temperatureUnitéExt = 14.5 °C
ds_temperature[2] // temperatureEchangeurExt = 22 °C
ds_temperature[3] // temperatureUnitéInt = 19.5 °C
ds_temperature[4] // temperatureEchangeurInt = 21.5 °C
consigne Canicule Interieur = 19 °C
consigne Ventilateur interieur Canicule = 21 °C

j'ai des A bizarre
alors que sur le terminal interne de geany quand je test mon programme tous est bien afficher !
bizarre
ds_temperature[0] // temperatureExt = 26 °C
ds_temperature[1] // temperatureUnitéExt = 14.5 °C
ds_temperature[2] // temperatureEchangeurExt = 21.5 °C
ds_temperature[3] // temperatureUnitéInt = 19.5 °C
ds_temperature[4] // temperatureEchangeurInt = 21 °C
consigne Canicule Interieur = 20 °C
consigne Ventilateur interieur Canicule = 22 °C

date, heure, année -> Fri Feb 23 09:04:37 2024

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Fri Feb 23, 2024 10:26 am

)Votre souci se produit il dans

Code: Select all

 cout << "ds_temperature[0] // temperatureExt = " << (int (
           ds_temperature[0] * 2) ) / 2.0 << " °C " << endl; // sonde NORD
(extrait de https://github.com/ludoiphone/gainable/ ... inable.cpp , vers la ligne 788)

Je ne peux pas reproduire ce souci sur mon RPi (bullesye)

Code: Select all

pi@raspberrypi:~ $ nano t.cpp  # fabrication du bout de code
pi@raspberrypi:~ $ g++ t.cpp # compilation 
pi@raspberrypi:~ $ ./a.out # execution
ds_temperature[0] // temperatureExt = 11 °C 
pi@raspberrypi:~ $ cat t.cpp

#include <iostream>
using namespace std;

int main() {
  float ds_temperature[3] = {11.1, 0, 0};
  cout << "ds_temperature[0] = " << (int (
           ds_temperature[0] * 2) ) / 2.0 << " °C " << endl; // sonde NORD
}


ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Fri Feb 23, 2024 1:30 pm

quand je retire les ° et é

ds_temperature[0] // temperatureExt = 22 C
ds_temperature[1] // temperatureUniteExt = 21.5 C
ds_temperature[2] // temperatureEchangeurExt = 22 C
ds_temperature[3] // temperatureUniteInt = 21 C
ds_temperature[4] // temperatureEchangeurInt = 22 C
consigne Canicule Interieur = 16 C
consigne Ventilateur interieur Canicule = 18 C

date, heure, annee -> Fri Feb 23 14:30:06 2024

c'est peut-etre due a un probleme de caractere speciaux ?

danjperron
Posts: 4743
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: gpio c++

Fri Feb 23, 2024 2:13 pm

quand je retire les ° et é

Il y a de forte chance que geany utilise un "font" non UTF-8.
Regarde si tu peux changer le font de geany pour un font unicode UTF-8.

Tu peux vérifer en changeant le é pour \u00E9 et regarder si cela change quelque chose.

ex:
cout << " temp\u00E9rature 10\u00B0C" << endl;
au lieu de
cout << " température 10°C" << endl;

Si rien ne change c'est alors que le font de geany n'est pas unicode!

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Fri Feb 23, 2024 2:45 pm

donc avec :temperatureUnit\u00E9Int = "
dans le terminal de geany
temperatureUnitéInt =
et dans lxterminal (.local/bin/gainable)
temperatureUnitéInt

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Fri Feb 23, 2024 2:53 pm

tu tombe bien daniel !
que me conseille tu pour l'interface graphique ??

danjperron
Posts: 4743
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: gpio c++

Fri Feb 23, 2024 3:13 pm

donc avec :temperatureUnit\u00E9Int = "
dans le terminal de geany
temperatureUnitéInt =
et dans lxterminal (.local/bin/gainable)
temperatureUnitéInt
Donc le lxterminal c'est celui du Pi ou d'un autre ordinateur?

Si c'est celui du Pi utilise raspi-config, localisation option, Local et ajuste ton "local" pour fr_FR.UTF-8 et met le par défaut.

Pour moi c'est Fr_CA.UTF-8

P.S. il ne faut pas oublier de "rebooter" sinon aucun unicode ne fonctionne.

danjperron
Posts: 4743
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: gpio c++

Fri Feb 23, 2024 3:36 pm

Pour l'interface graphique Hum aucune idée.

Tu vas de tout bord tout coté.

Tout dépend de ce que tu veux.

- Un petit écran sur le mur pour asservir ton système dans une autre pièce.
- un écran ajouté sur le Pi qui te permet de manipuler tes paramètres ou de visualiser l'état de ton système.


Si je te donne l'exemple que j'ai chez moi avec ma serre extérieure, mes deux tours Hydroponiques et mon jardin j'utilise node-red ce qui me permet d'ajuster ou de visualiser sur une page web en utilisant mon mac, mon portable ou ma tablette. Le tout est sous mqtt puisque j'ai plusieurs microprocesseurs Pi, pico,arduino et esp32 sans oublier tout les esp8266 sous tasmota.

Contrôle d'humidité, de température , des pompes et d'arosage.

Donc mon interface graphique est du Web! J'ai seulement deux écrans sur les ESP32.

Mes githubs principaux pour le jardin et mes tours hydroponiques.
https://github.com/danjperron/microserre
https://github.com/danjperron/PicoWSolar

Comme tu vois j'ai pas qu'un seul Pi mais plusieurs systèmes qui fonctionnent avec MQTT et j'utilise node-red pour tout avoir à porter de moi.

Évidemment j'utilise aussi ssh pour ajuster s'il le faut. Par exemple au mois de mars j'ajoute une chaufferette électrique dans ma serre extérieur et que j'enlève en mai.


Daniel
Last edited by danjperron on Fri Feb 23, 2024 5:45 pm, edited 1 time in total.

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Fri Feb 23, 2024 5:04 pm

Je n'ai aucun problème avec les caractères accentués et lxterminal (configuré en monospace regular 15) . j'ai comme option
  • pi@raspberrypi:~ $ echo $LANG
    fr_FR.UTF-8
qui me donne satisfaction (mais je ne sais plus comment je l'ai activée, à ma grande honte).

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Fri Feb 23, 2024 5:08 pm

merci pour tes infos! je va de ce pied regarder
donc pour mon histoire de é et ° j'ai remis mon autre carte sd toute fraiche dessu le rpi et cela fonctionne bien ! j'ai fais exactement les meme etape que sur l'ancienne ! bref
grand merci a toi

ludo

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Fri Feb 23, 2024 6:10 pm

Super GitHub Daniel ! Qu’est-ce que j’aimerais avoir ton expérience !

ludoraspberry
Posts: 160
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Sat Feb 24, 2024 5:56 pm

salut les amis du codage , je sais vraiment pas par ou commencer ! pour avancer sur mon petit projets ! maintenant mon code est pas trop mal
j'aimerais suivre vos conseil pour separer la lecture des sondes ect .. comme vous aviez évoquées


grand merci a vous de repondre a un debutant de chez debutant i hihi

franchement merci

dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sat Feb 24, 2024 7:37 pm

ludoraspberry wrote:
Sat Feb 24, 2024 5:56 pm
salut les amis du codage , je sais vraiment pas par ou commencer ! pour avancer sur mon petit projets ! maintenant mon code est pas trop mal
j'aimerais suivre vos conseil pour separer la lecture des sondes ect .. comme vous aviez évoquées


grand merci a vous de repondre a un debutant de chez debutant i hihi

franchement merci
Bon, votre boucle se compose de trois fonctions

Code: Select all

    lireDS18B20();
    gainable(); // a besoin en entrée des valeurs des thermomètres et des reglages (actuellement avec des boutons poussoirs) issu de fonctionsDivers
    fonctionsDivers(); // affiche les temperatures; exporte les reglages par boutons poussoirs
Je propose de faire cette découpe peteit à petit, la première étape consistant, à l'issue de la lecture des températures, à écrire ces températures dans un fichier, puis ..; à relire le méme fichier.
Le code deviendrait alors

Code: Select all

    lireDS18B20();
    ecireTemperatures(xxxx);
    lireTemperatures (xxxxx);
    gainable(); // a besoin en entrée des valeurs des thermomètres et des reglages (actuellement avec des boutons poussoirs) issu de fonctionsDivers
Ca a l'air idiot, mais le simple fait d'ecire les températures dans un fichier permet à d'autres tâches que votre monolithe de savoir quelles sont les temperaturesUn exemple (avec une simple consultation de fichier)
Pour ecrire, j'ai un exemple très simple (champs séparés par des blances), que je viens de tester

Code: Select all

pi@raspberrypi:~ $ cat ecrit2temperatures.c 
#include <stdio.h>
void ecrit2temp(char * nomFic, float temperature1, float temperature2) {
	FILE * handle =fopen(nomFic, "w");
	fprintf(handle, "%5.2f %5.2f\n", temperature1, temperature2);
	//  impression de controle
	printf("On ecrit \n%5.2f %5.2f\n", temperature1, temperature2); // a supprimer si on est satisfait
        fclose(handle);
}
int main() {
	ecrit2temp("toto", 11.1,  -14.985);
	return 0;
}
pi@raspberrypi:~ $ g++ --pedantic ecrit2temperatures.c  -o ecrit # compilation
ecrit2temperatures.c: In function ‘int main()’:
ecrit2temperatures.c:10:13: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
   10 |  ecrit2temp("toto", 11.1,  -14.985);
      |             ^~~~~~
pi@raspberrypi:~ $ ./ecrit
On ecrit 
11.10 -14.98
pi@raspberrypi:~ $ cat toto # consultation du fichier genere (le nom  gagnerait à etre changé
11.10 -14.98



dbrion1
Posts: 520
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sun Feb 25, 2024 5:12 pm

bon, j'ai oublié de vous faire un code qui ... lit un fichier séparé par des blancs (je vous ai passé un code qui écrit un fichier séparé par des blancs (ou des virgules, c'est tout pareil: il suffit d'écrire par une variante de printf)
Voici donc la lecture de fichier séparé par des blancs (ou des tabulations, ou des virgules voir https://en.cppreference.com/w/cpp/string/byte/strtok

Code: Select all

//   compilation
//  g++ --pedantic lit2t.c -o lit && ./lit
# include <string.h>
# include <stdlib.h>
# include <stdio.h>
int decod_ligne (char * buffer, float *t1, float *t2) {
  char * saveptr;
  printf (" <%s>\n",  buffer);
  const char * delimiters = " ,;\n\t";
  char * token = strtok_r (buffer, delimiters, &saveptr);
  printf ("tok: <%s>", token);
  * t1 = atof (token);
  token = strtok_r (NULL, delimiters, &saveptr);
  printf ("token: <%s>", token);
  * t2 = atof (token);
//      token = strtok (NULL, ",;\n\t");
//      printf ("tok: <%s>val: %f \n", token,  atof (token) );
//      token = strtok (NULL, ",;\n\t");
//      printf ("tok: <%s>val: %f \n", token,  atof (token) );
  return 1;
}
int decod_fic (const char * nomFic, float *t1, float *t2) {
  char buffer[88];
  FILE * handle = fopen (nomFic, "r");
  if (NULL !=  fgets (buffer, sizeof (buffer), handle) ) {
    return decod_ligne (buffer, t1, t2) ;
    printf ("On lit \n%s\n", buffer);
    fclose (handle);
    return(0);
  } else {
    printf ("erreur open %s\n", nomFic);
    return -1;
  }
}
int main() {
  float t1, t2;
  int codret = decod_fic ( (char *) "toto", &t1,  &t2);
  printf ("t1: %f t2:%f\n", t1, t2);
  return codret;
}
A vous de le comprendre et de l'adapter (je décode deux valeurs, mais vous avez dantage de thermomètres à gérer) . S'il y a un point que vous ne comprenez pas, je me ferai un plaisir de vous l'expliquer (noter que j'ai choisi des fonctions existant aussi en C: comme Arduino n'a pas une bibliothèque c++ standard complète -prendrait trop de place-, je suis presque sur -testé sur RPi, pas sur Arduino + carte SD- que c'est récupèrable...)

Return to “Français”