IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Aide pour lire fichier DS18B20 sur rpi4 en c++


Sujet :

Raspberry Pi

  1. #1
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut Aide pour lire fichier DS18B20 sur rpi4 en c++
    Salut à tous.
    J'aimerai une variable pour chacune de mes sondes qui sont extraites du fichier txt du dossier device (W1) des sondes DS18B20
    j'ai commencé à &crire un bout de code en c++ pour obtenir ces variables pour chaque sonds, j'obtiens bien chaque id .
    je n'arrive pas à donner un petit nom pour chacune d'entre elles et d'afficher leur température .
    en sachant que le dossier se compose comme tel : /sys/bus/w1/devices/28-3ce1e3805e9f/temperature ,/sys/bus/w1/devices/28-3ce1e38060ec/temperature ect.

    et mon code :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <stdio.h>
    #include <dirent.h>
    #include <string.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    int main (void) {
        DIR *dir;
        struct dirent *dirent;
        char dev[16];      // Dev ID
        char devPath[128]; // Path to device
        char buf[256];     // Data from device
        char tmpData[6];   // TempA * 1000 reported by device
        char path[] = "/sys/bus/w1/devices";
     
        //ssize_t numRead;
     
        dir = opendir (path);
     
        if (dir != NULL) {
    	while ((dirent = readdir (dir)))
     
    	if (dirent->d_type == DT_LNK && strstr(dirent->d_name, "28-") != NULL) {
    	    strcpy(dev, dirent->d_name);
    	    printf("\nDevice: %s\n", dev); // affiche tous les ID des sondes
    	    sprintf(devPath, "%s/%s/w1_slave\n", path, dev);
    	    printf(devPath);
    	    //strncpy(tmpData, strstr(buf, "t=") + 2, 5);
    	    float tempC = strtof(tmpData, NULL);
    	    printf("%.3f C\n", tempC / 1000);
    	}
    	(void) closedir (dir);
    	printf("\nfichier fermer\n");
        } else {
    	perror ("Impossible d'ouvrire le fichier W1\n");
    	return 1;
        }
    }

    merci pour votre aide, car je bloque !

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 072
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    Citation Envoyé par ludoiphone Voir le message
    j'ai commencer as ecrire un bout de code en c++
    Ce n'est pas du C++, mais du C.

    Citation Envoyé par ludoiphone Voir le message
    en sachant que le dossier ce compose comme tel : /sys/bus/w1/devices/28-3ce1e3805e9f/temperature ,/sys/bus/w1/devices/28-3ce1e38060ec/temperature ect.
    Ce serait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /sys/bus/w1/devices/28-3ce1e3805e9f/w1_slave 
    /sys/bus/w1/devices/28-3ce1e38060ec/w1_slave
    ...
    avec un fichier texte w1_slave, non ?


    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    	    sprintf(devPath, "%s/%s/w1_slave\n", path, dev);
    	    printf(devPath);
     
    	    //strncpy(tmpData, strstr(buf, "t=") + 2, 5);
    	    float tempC = strtof(tmpData, NULL);
    	    ...

    devpath contient le chemin vers le fichier texte, par exemple : /sys/bus/w1/devices/28-3ce1e3805e9f/w1_slave.

    Pour récupérer la température, il te manque l'étape d'ouverture du fichier (FILE *fp = fopen(devPath, "r"), puis il faut rechercher la sous-chaîne de caractères qui contient l'information de température.

    Il y a déjà plein de codes sur Internet qui font ça...

  3. #3
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    merci à toi oui, j'ai vu pas mal de choses, mais pas avec plusieurs sondes, je ne vois pas comment faire pour lire tous mes capteurs en même temps avec chacun un petit nom !
    je pensais à une classe, mais je suis débutant dans la manière d'écrire une classe et aussi pour lire un fichier .
    Si tu avais un exemple de code avec des petites explications, je serais ravi.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 072
    Billets dans le blog
    47
    Par défaut
    Tu te fais une fonction pour lire la température pour un capteur donné :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void read_temperature(const char *devPath, const char *dev) {
        char buf[256];              /* Data from device */
        char tmpData[6];            /* Temp is C * 1000 reported by device */
        ssize_t numRead;
     
        int fd = open(devPath, O_RDONLY);
        if (fd == -1) {
            perror("Couldn't open the w1 device!");
            return;
        }
     
        while ((numRead = read(fd, buf, sizeof(buf))) > 0) {
            strncpy(tmpData, strstr(buf, "t=") + 2, 5);
            float tempC = strtof(tmpData, NULL);
            printf("Device: %s - ", dev);
            printf("Temp: %.3f C", tempC / 1000);
        }
     
        close(fd);
    }


    Puis, dans la boucle qui parcourt les répertoires, quand tu as l'identifiant dev et le chemin devpath du capteur :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    	    printf("\nDevice: %s\n", dev); // affiche tous les ID des sondes
    	    sprintf(devPath, "%s/%s/w1_slave\n", path, dev);
    	    printf(devPath);
     
    	    read_temperature(devPath, dev); // lecture de la température du capteur en cours
    ...

    À tester... Et si ça ne fonctionne pas, c'est de la faute à chatGPT

  5. #5
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    oui j'ai dejà essayé ce code, mais il affiche la température d'une sonde et pour numread ?
    Comment puis-je n'avoir la lecture que d'une seule sonde avec une variable par sondes, merci, j'ai 5 sondes !

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 072
    Billets dans le blog
    47
    Par défaut
    Tu peux définir une structure pour les capteurs :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct { 
        char dev[16];         // ex. : "28-3ce1e3805e9f"
        char devPath[128];    // ex. : "/sys/bus/w1/devices/28-3ce1e3805e9f/w1_slave"
    } Device

    et remplir un tableau de capteurs :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    Device myDevices[5]; // 5 capteurs ds18b20

    Tu pourras accéder au capteur i (i entre 0 et 4) avec :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    read_temperature(myDevices[i].devPath, myDevices[i].dev)

  7. #7
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    grand merci ,

    donc j'ai fait cela :

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    #include <stdio.h>
    #include <dirent.h>
    #include <string.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    char dev[16];      // Dev ID
    char devPath[128]; // Path to device
    char path[] = "/sys/bus/w1/devices";
     
    void read_temperature(const char *devPath, const char *dev) {
        char buf[256];              /* Data from device */
        char tmpData[6];            /* Temp is C * 1000 reported by device */
        ssize_t numRead;
     
        int fd = open(devPath, O_RDONLY);
        if (fd == -1) {
            perror("Couldn't open the w1 device!");
            return;
        }
     
        while ((numRead = read(fd, buf, sizeof(buf))) > 0) {
            strncpy(tmpData, strstr(buf, "t=") + 2, 5);
            float tempC = strtof(tmpData, NULL);
            printf("Device: %s - ", dev);
            printf("Temp: %.3f C\n\n", tempC / 1000);
        }
     
        close(fd);
    }
     
    int main (void) {
     
    	DIR *dir;
        struct dirent *dirent;
     
    	dir = opendir (path);
     
        if (dir != NULL) {
    	while ((dirent = readdir (dir)))
     
    	if (dirent->d_type == DT_LNK && strstr(dirent->d_name, "28-") != NULL) {
    	    strcpy(dev, dirent->d_name);
    	    printf("\nDevice: %s\n", dev); // affiche tous les ID des sondes
    	}
    	(void) closedir (dir);
    	printf("\nfichier fermer\n\n");
        } else {
    	perror ("Impossible d'ouvrire le fichier W1\n");
    	return 1;
        }
        sprintf(devPath, "%s/%s/w1_slave", path, dev);
     
    	read_temperature(devPath, dev); 
    }

    et en sortie j'obtient :

    Device: 28-3ce1e38060ec

    Device: 28-3ce1e3801251

    Device: 28-3ce1e3804835

    Device: 28-3ce1e3809744

    Device: 28-3ce1e3805e9f

    fichier fermé

    Device: 28-3ce1e3805e9f - Temp: 22.687 C

    et je ne vois pas trop pour la structure !

    merci

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 072
    Billets dans le blog
    47
    Par défaut
    Comme ça ? (non testé)

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include <stdio.h>
    #include <dirent.h>
    #include <string.h>
    #include <fcntl.h>
    #include <stdlib.h>
    #include <unistd.h>
     
    void read_temperature(const char *devPath, const char *dev) {
        char buf[256]; /* Data from device */
        char tmpData[6]; /* Temp is C * 1000 reported by device */
        ssize_t numRead;
        int fd = open(devPath, O_RDONLY);
        if (fd == -1) {
            perror("Couldn't open the w1 device!");
            return;
        }
        while ((numRead = read(fd, buf, sizeof(buf))) > 0) {
            strncpy(tmpData, strstr(buf, "t=") + 2, 5);
            float tempC = strtof(tmpData, NULL);
            printf("Device: %s - ", dev);
            printf("Temp: %.3f C\n", tempC / 1000);
        }
        close(fd);
    }
     
    int main(void) {
        DIR *dir;
        struct dirent *dirent;
        char dev[16];      // Dev ID
        char devPath[128]; // Path to device
        char path[] = "/sys/bus/w1/devices";
     
        dir = opendir(path);
        if (dir != NULL) {
            while ((dirent = readdir(dir))) {
                if (dirent->d_type == DT_LNK && strstr(dirent->d_name, "28-") != NULL) {
                    strcpy(dev, dirent->d_name);
                    printf("\nDevice: %s\n", dev); // affiche tous les ID des sondes
                    sprintf(devPath, "%s/%s/w1_slave", path, dev);
                    read_temperature(devPath, dev);
                }
            }
            closedir(dir);
            printf("\nfichier fermer\n");
        } else {
            perror("Impossible d'ouvrire le fichier W1\n");
            return 1;
        }
        return 0;
    }

  9. #9
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    merci pour le code, il est fonctionnel .

    Donc je me suis amusé à faire une classe, dis-moi ce que tu en penses et si il y as des choses a améliorer ?

    sondes.h

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #ifndef SONDES_H
    #define SONDES_H
     
    class Sondes
    {
     
    public:
        Sondes();
     
        int fd;
     
        const char *path = "/sys/bus/w1/devices/28-3ce1e3805e9f/w1_slave";
        const char *path1 = "/sys/bus/w1/devices/28-3ce1e3809744/w1_slave";
        const char *path2 = "/sys/bus/w1/devices/28-3ce1e38060ec/w1_slave";
        const char *path3 = "/sys/bus/w1/devices/28-3ce1e3801251/w1_slave";
        const char *path4 = "/sys/bus/w1/devices/28-3ce1e3804835/w1_slave";
     
        char buffer[1000];
     
        int len;
        int len1;
        int len2;
        int len3;
        int len4;
     
        char temp[10];
        char temp1[10];
        char temp2[10];
        char temp3[10];
        char temp4[10];
     
        double tempExtLue;
        double tempUnitExtLue;
        double tempEcExtLue;
        double tempUnitIntLue;
        double tempEcIntLue;
     
        double consigneIntCa;
        double consigneVentIntCa;
     
        void lireTemperatures();
     
        void lectureConsigneIntCa();
     
    private:
     
    };
     
    #endif //SONDES_H

    sondes.cpp

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    #include "sondes.h"
     
    #include <fcntl.h>
    #include <unistd.h>
    #include <QDebug>
     
    Sondes::Sondes()
    {
    	qDebug() << "Sondes";
    }
     
    void Sondes::lireTemperatures()
    {
        if ((fd = open(path, O_RDONLY)) < 0) {
    		perror("Erreur ouverture de value de w1_slave");
    		exit(EXIT_FAILURE);
        } else {
    		len = read(fd, buffer, sizeof(buffer));
    		strncpy(temp, buffer+len-6, 5);
    		tempExtLue = atof(temp)/1000;
    		//printf("TempExtLue = %2.3f C\n", tempExtLue);
        }
        if ((fd = open(path1, O_RDONLY)) < 0) {
    		perror("Erreur ouverture de value de w1_slave");
    		exit(EXIT_FAILURE);
        } else {
    		len1 = read(fd, buffer, sizeof(buffer));
    		strncpy(temp1, buffer+len1-6, 5);
    		tempUnitExtLue = atof(temp1)/1000;
    		//printf("TempUnitExtLue = %2.3f C\n", tempUnitExtLue);
        }
        if ((fd = open(path2, O_RDONLY)) < 0) {
    		perror("Erreur ouverture de value de w1_slave");
    		exit(EXIT_FAILURE);
        } else {
    		len2 = read(fd, buffer, sizeof(buffer));
    		strncpy(temp2, buffer+len2-6, 5);
    		tempEcExtLue = atof(temp2)/1000;
    		//printf("TempEcExtLue = %2.3f C\n", tempEcExtLue);
        }
        if ((fd = open(path3, O_RDONLY)) < 0) {
    		perror("Erreur ouverture de value de w1_slave");
    		exit(EXIT_FAILURE);
        } else {
    		len3=read(fd, buffer, sizeof(buffer));
    		strncpy(temp3, buffer+len3-6, 5);
    		tempUnitIntLue=atof(temp3)/1000;
    		//printf("TempUnitIntLue = %2.3f C\n", tempUnitIntLue);
        }
        if ((fd = open(path4, O_RDONLY)) < 0) {
    		perror("Erreur ouverture de value de w1_slave");
    		exit(EXIT_FAILURE);
        } else {
    		len4=read(fd, buffer, sizeof(buffer));
    		strncpy(temp4, buffer+len4-6, 5);
    		tempEcIntLue=atof(temp4)/1000;
    		//printf("TempEcIntLue = %2.3f C\n\n", tempEcIntLue);
        }
        close(fd);
        sleep(5);
    }
     
    void Sondes::lectureConsigneIntCa()
    {
        consigneIntCa = tempExtLue - 6;
        consigneVentIntCa = consigneIntCa + 2;
    }

    main.cpp

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include "sondes.h"
     
    #include <QDebug>
     
    Sondes m_sondes;
     
    int main(int argc, char *argv[]) {
     
        while (1) {
     
    	m_sondes.lireTemperatures();
    	m_sondes.lectureConsigneIntCa();
     
    	qDebug() << "TempExtLue : " << m_sondes.tempExtLue;
    	qDebug() << "TempEcExtLue : " << m_sondes.tempEcExtLue;
     
    	qDebug() << "ConsigneIntCa : " << m_sondes.consigneIntCa;
    	qDebug() << "ConsigneVentIntCa : " << m_sondes.consigneVentIntCa;
        }
        return 0;
    }

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 072
    Billets dans le blog
    47
    Par défaut
    Oulah... Il y en a des choses à dire...

    • mélange de C et de C++
    • tous les attributs/méthodes de classe en public
    • des valeurs "magiques" (comme dans strncpy(temp, buffer+len-6, 5), pourquoi 6 ? pourquoi 5 ?)
    • des pb de structure de données :
      Code c : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
          const char *path = "/sys/bus/w1/devices/28-3ce1e3805e9f/w1_slave";
          const char *path1 = "/sys/bus/w1/devices/28-3ce1e3809744/w1_slave";
          const char *path2 = "/sys/bus/w1/devices/28-3ce1e38060ec/w1_slave";
          const char *path3 = "/sys/bus/w1/devices/28-3ce1e3801251/w1_slave";
          const char *path4 = "/sys/bus/w1/devices/28-3ce1e3804835/w1_slave";
       
      ...
       
          int len;
          int len1;
          int len2;
          int len3;
          int len4;
       
          char temp[10];
          char temp1[10];
          char temp2[10];
          char temp3[10];
          char temp4[10];
      Heureusement que tu n'as pas 50 capteurs !
    • ...

  11. #11
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    Je suis d'accord je mélange un peu, pour les 6 et 5, c'est la chaîne de caractères a recopier, pour les attributs je vais y remédier .

    Comment ferais-tu ?

  12. #12
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 072
    Billets dans le blog
    47
    Par défaut
    Ce serait plus sympathique avec une classe Sonde, et un tableau d'instances d'objets Sonde :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include "sonde.h"
     
    const int NBR_SONDES = 5;
     
    int main() {
        Sonde mes_sondes[NBR_SONDES] = {
            Sonde("28-3ce1e3805e9f"),
            Sonde("28-3ce1e3809744"),
            Sonde("28-3ce1e38060ec"),
            Sonde("28-3ce1e3801251"),
            Sonde("28-3ce1e3804835")
        };
     
        for (int i = 0; i < NBR_SONDES; i++) {
            mes_sondes[i].lireTemperature();
            mes_sondes[i].afficherTemperature();
        }
     
        return 0;
    }

  13. #13
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    merci.
    Si tu avais un petit exemple avec 2 sondes ; ça me parlerait plus ! fin pour ne pas abuser !
    grand merci

  14. #14
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : dépanneur grande cuisine frigoriste

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Par défaut
    re salut ! , j'ai une autre question ! je me sert de QT creator et j' aimerais que la lecture de mes sondes ne bloque pas mon programme !
    en faite mes sondes doivent etre lue tous les 5 secondes car elle s'affiche sur une fenetre , et j'ai un autre programme qui gere les gpios et en fonction de l'etat de mes pin j'affiche des gif animée sur la meme fenetre que celle qui affiche mes temperature .

    ci par hazard vous auriez des conseil pour l'organisation du code pour optimiser les choses

    merci

Discussions similaires

  1. [XL-2013] Besoin d'aide pour créer un report sur un fichier excel
    Par wjulien57 dans le forum Conception
    Réponses: 5
    Dernier message: 15/12/2015, 21h09
  2. aide pour touver un tuto sur les fichiers
    Par shadowless dans le forum Débuter
    Réponses: 2
    Dernier message: 22/04/2011, 11h22
  3. Besoin d'aide pour lire un fichier Excel
    Par Sekigawa dans le forum C#
    Réponses: 7
    Dernier message: 04/03/2010, 13h46
  4. Réponses: 1
    Dernier message: 26/02/2010, 11h02
  5. aide pour lire le contenu d'un fichier de base de donnée
    Par hichamo dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 11/05/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo