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

Arduino Discussion :

Faire une action avec plusieurs sondes DS18B20


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    33
    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 : 33
    Par défaut Faire une action avec plusieurs sondes DS18B20
    salut as tous , j'arrive bien as lire mes sondes sur le moniteur serie , je n'arrive pas as faire un action avec ma deuxieme sonde ;
    j'ai recuperer leurs adresses . la j'avoue que je suis pommer . je doit mal mi prendre !
    car avec la sonde temp_ext j'arrive bien as controler mes relais ! a premier vue elle est pas detecter.

    Code : 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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS 2
     
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);
    //sonde1 = {0x28, 0xAA, 0x69, 0x58, 0x3C, 0x14, 0x01, 0x47};
    //sonde2 = {0x28, 0xEF, 0xCF, 0xE0, 0x2E, 0x19, 0x01, 0x77};
     
    LiquidCrystal_I2C lcd(0x27,16,2);
     
    const int relais_Vent_Ext = 3;
    const int relais_Comp = 4;
    const int relais_Vent_Int = 5;
    const int relais_V4V = 6;
    const int therm_S = 51;
    const int therm_Ch1 = 50;
    const int led_S = 33;
    const int led_Ch1 = 31;
    const int led_FR = 45;
    const int led_CH = 30;
     
    float hysteresis = 2.00;
    float consigne = 23.00;
     
    void setup()
     
    {
      Serial.begin(115200);
      lcd.init();
      lcd.backlight();
     
      sensors.begin();
     
      pinMode(relais_Vent_Ext,OUTPUT); // Relais Ventilateur Exterieur 
      pinMode(relais_Comp,OUTPUT); // Relais Compresseur
      pinMode(relais_Vent_Int,OUTPUT); // Relais Ventilateur Interieur
      pinMode(relais_V4V,OUTPUT); // Relais Vanne 4 Voies
      pinMode(therm_S,INPUT); // Thermostat Radio Salon
      pinMode(therm_Ch1,INPUT); // Thermostat Radio Chambre1
      pinMode(led_S,OUTPUT); // LED Thermostat Salon en demande (froid ou chauffage)
      pinMode(led_Ch1,OUTPUT); // LED Thermostat Chambre en demande (froid ou chauffage)
      pinMode(led_FR,OUTPUT); // LED Mode Froid
      pinMode(led_CH,OUTPUT); // LED Mode Chauffage
     
    }
     
    void loop()
     
    {
      Serial.print("Temp Démarage Arduino : ");
      Serial.println(millis());
     
      sensors.requestTemperatures();
      float temp_Ext = sensors.getTempCByIndex(0);
      float temp_Unit_Ext = sensors.getTempCByIndex(1);
     
      Serial.print("Temperature EXT °C ");
      Serial.println(temp_Ext);
      Serial.print("Temperature Unite EXT °C ");
      Serial.println(temp_Unit_Ext);
     
      byte etattherm_S = digitalRead(therm_S);
      byte etattherm_Ch1 = digitalRead(therm_Ch1);
     
      Serial.print("ETAT thermosat Salon = ");
      Serial.println(etattherm_S);
      Serial.print("ETAT thermostat Chambre 1 = ");
      Serial.println(etattherm_Ch1);
     
      lcd.setCursor(0, 0 );
      lcd.print("Temperature:");
      lcd.setCursor(1,1);
      lcd.print(temp_Ext);
      lcd.setCursor(6,1);
      lcd.print((char)223);
      delay(100);
     
      digitalWrite(led_S, etattherm_S);
      digitalWrite(led_Ch1, etattherm_Ch1);
     
      if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
      || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1))){
        digitalWrite(relais_Vent_Ext, LOW);// petite vitesse
        digitalWrite(relais_Vent_Int, HIGH);
        digitalWrite(relais_V4V, HIGH);
        digitalWrite(relais_Comp, LOW);
        digitalWrite(led_FR, HIGH);
        digitalWrite(led_CH, LOW);
        }else if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
      || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1)) && temp_Unit_Ext >= 20){
        digitalWrite(relais_Vent_Ext, HIGH);// grande viesse
        digitalWrite(relais_Vent_Int, HIGH);
        digitalWrite(relais_V4V, HIGH);
        digitalWrite(relais_Comp, LOW);
        digitalWrite(led_FR, HIGH);
        digitalWrite(led_CH, LOW);
        }else{
          digitalWrite(relais_Vent_Ext, LOW);
          digitalWrite(relais_Vent_Int, LOW);
          digitalWrite(relais_V4V, LOW);
          digitalWrite(led_FR, LOW);
          digitalWrite(led_CH, HIGH);
          }
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    vous n'avez pas assez de réponses ici ou ?

    au minimum mentionnez les autres discussions sur d'autres forum pour éviter que ceux qui veulent vous aider réinventent la roue et perdent leur temps à vous donner les mêmes conseils que vous avez par ailleurs.





    pour simplifier la lecture du code, déclarez des fonctions de configuration
    Code : 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
    void petiteVitesse() {
      digitalWrite(relais_Vent_Ext, LOW);// petite vitesse
      digitalWrite(relais_Vent_Int, HIGH);
      digitalWrite(relais_V4V, HIGH);
      digitalWrite(relais_Comp, LOW);
      digitalWrite(led_FR, HIGH);
      digitalWrite(led_CH, LOW);
    }
     
    void grandeVitesse() {
      digitalWrite(relais_Vent_Ext, HIGH);// grande viesse
      digitalWrite(relais_Vent_Int, HIGH);
      digitalWrite(relais_V4V, HIGH);
      digitalWrite(relais_Comp, LOW);
      digitalWrite(led_FR, HIGH);
      digitalWrite(led_CH, LOW);
    }
     
    void eteindre() {
      digitalWrite(relais_Vent_Ext, LOW);
      digitalWrite(relais_Vent_Int, LOW);
      digitalWrite(relais_V4V, LOW);
      digitalWrite(led_FR, LOW);
      digitalWrite(led_CH, HIGH);
    }

    ensuite relisez bien vos tests, ce que vous avez écrit c'est cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      if (((temp_Ext >= consigne) && (etattherm_S == 1))|| ((temp_Ext >= consigne) && (etattherm_Ch1 == 1))) {
        petiteVitesse();
      } else if (((temp_Ext >= consigne) && (etattherm_S == 1))
                 || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1)) && temp_Unit_Ext >= 20) {
        grandeVitesse();
      } else {
        eteindre();
      }
    le premier if dit
    si la température externe est superieure ou égale à la consigne et que un ou les deux thermostats sont activés
    ==> imaginons que ce soit etattherm_S qui vaut HIGH et que la consigne soit dépassée, vous allez rentrer dans le code de ce if et ne jamais aller voir les else et mettre la petite vitesse

    mais le test qui suit commence à nouveau par :
    si la température externe est superieure ou égale à la consigne et que etattherm_S est activé (ce qui est le cas dans notre hypothèse)
    ==> là vous voudriez passer en grande vitesse. c'est contradictoire avec le test précédent


    le mieux pour réfléchir serait de remplir un tableau qui définit en fonction des conditions possibles toutes les actions attendues
    Nom : table.jpg
Affichages : 133
Taille : 108,2 Ko

    il existe des techniques mathématiques où vous pouvez récrire le tableau ci dessus en modèle à 4 variables (2 x 2 bits) cf les principes de simplification des Tableaux de KARNAUGH pour agréger les test et définir exactement votre séquence de if

    ou alors prenez l'approche "bourrin" et vous faites les 16 tests

    Code : 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
      if (temp_Ext >= consigne) {
        if ( temp_Unit_Ext >= 20) {
          if (etattherm_S == LOW) {
            if (etattherm_Ch1 == LOW) {
              // #1
            } else {
              // #2
            }
          } else {
            if (etattherm_Ch1 == LOW) {
              // #3
            } else {
              // #4
            }
          }
        } else {
          if (etattherm_S == LOW) {
            if (etattherm_Ch1 == LOW) {
              // #5
            } else {
              // #6
            }
          } else {
            if (etattherm_Ch1 == LOW) {
              // #7
            } else {
              // #8
            }
          }
        }
      } else {
        if ( temp_Unit_Ext >= 20) {
          if (etattherm_S == LOW) {
            if (etattherm_Ch1 == LOW) {
              // #9
            } else {
              // #10
            }
          } else {
            if (etattherm_Ch1 == LOW) {
              // #11
            } else {
              // #12
            }
          }
        } else {
          if (etattherm_S == LOW) {
            if (etattherm_Ch1 == LOW) {
              // #13
            } else {
              // #14
            }
          } else {
            if (etattherm_Ch1 == LOW) {
              // #15
            } else {
              // #16
            }
          }
        }
      }

  3. #3
    Membre habitué
    Homme Profil pro
    dépanneur grande cuisine frigoriste
    Inscrit en
    Juin 2020
    Messages
    33
    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 : 33
    Par défaut
    oui et non , c'est pour avoir plusieurs avis.
    je suis debutant , donc je ferais pas mal d'erreur

    donc j'ai reussi au final !

    Code : 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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS_1 2
    #define ONE_WIRE_BUS_2 3
     
    OneWire oneWire_1(ONE_WIRE_BUS_1);
    OneWire oneWire_2(ONE_WIRE_BUS_2);
    DallasTemperature sensors_1(&oneWire_1);
    DallasTemperature sensors_2(&oneWire_2);
    //sonde1 = {0x28, 0xAA, 0x69, 0x58, 0x3C, 0x14, 0x01, 0x47};
    //sonde2 = {0x28, 0xEF, 0xCF, 0xE0, 0x2E, 0x19, 0x01, 0x77};
     
    LiquidCrystal_I2C lcd(0x27,16,2);
     
    const int relais_Vent_Ext = 8;
    const int relais_Comp = 9;
    const int relais_Vent_Int = 10;
    const int relais_V4V = 11;
    const int therm_S = 51;
    const int therm_Ch1 = 50;
    const int led_S = 33;
    const int led_Ch1 = 31;
    const int led_FR = 45;
    const int led_CH = 30;
     
    float consigne = 23.00;
     
    unsigned long chrono_demar_Comp = 0;
     
    void setup()
     
    {
      Serial.begin(115200);
      lcd.init();
      lcd.backlight();
     
      sensors_1.begin();
      sensors_2.begin();
     
      pinMode(relais_Vent_Ext,OUTPUT); // Relais Ventilateur Exterieur 
      pinMode(relais_Comp,OUTPUT); // Relais Compresseur
      pinMode(relais_Vent_Int,OUTPUT); // Relais Ventilateur Interieur
      pinMode(relais_V4V,OUTPUT); // Relais Vanne 4 Voies
      pinMode(therm_S,INPUT); // Thermostat Radio Salon
      pinMode(therm_Ch1,INPUT); // Thermostat Radio Chambre1
      pinMode(led_S,OUTPUT); // LED Thermostat Salon en demande (froid ou chauffage)
      pinMode(led_Ch1,OUTPUT); // LED Thermostat Chambre en demande (froid ou chauffage)
      pinMode(led_FR,OUTPUT); // LED Mode Froid
      pinMode(led_CH,OUTPUT); // LED Mode Chauffage
     
    }
     
    void loop()
     
    {
      Serial.print("Temp Démarage Arduino : ");
      Serial.println(millis());
     
      sensors_1.requestTemperatures();
      sensors_2.requestTemperatures();
      float temp_Ext = sensors_1.getTempCByIndex(0);
      float temp_Unit_Ext = sensors_2.getTempCByIndex(0);
     
      float grand_V_Ext = temp_Unit_Ext >= 20;
     
      Serial.print("Temperature EXT °C ");
      Serial.println(temp_Ext);
      Serial.print("Temperature Unite EXT °C ");
      Serial.println(temp_Unit_Ext);
     
      byte etattherm_S = digitalRead(therm_S);
      byte etattherm_Ch1 = digitalRead(therm_Ch1);
     
      Serial.print("ETAT thermosat Salon = ");
      Serial.println(etattherm_S);
      Serial.print("ETAT thermostat Chambre 1 = ");
      Serial.println(etattherm_Ch1);
     
      lcd.setCursor(0, 0 );
      lcd.print("Temperature:");
      lcd.setCursor(1,1);
      lcd.print(temp_Ext);
      lcd.setCursor(6,1);
      lcd.print((char)223);
      delay(500);
     
      digitalWrite(led_S, etattherm_S);
      digitalWrite(led_Ch1, etattherm_Ch1);
     
      if(((temp_Ext >= consigne) && (etattherm_S == 1)) 
      || ((temp_Ext >= consigne) && (etattherm_Ch1 == 1))){
        digitalWrite(relais_Vent_Ext, LOW);// petite vitesse
        digitalWrite(relais_Vent_Int, HIGH);
        digitalWrite(relais_V4V, HIGH);
        digitalWrite(relais_Comp, LOW);
        digitalWrite(led_FR, HIGH);
        digitalWrite(led_CH, LOW);
        if(grand_V_Ext){
          digitalWrite(relais_Vent_Ext, HIGH);// grande viesse
          digitalWrite(relais_Vent_Int, HIGH);
          digitalWrite(relais_V4V, HIGH);
          digitalWrite(relais_Comp, LOW);
          digitalWrite(led_FR, HIGH);
          digitalWrite(led_CH, LOW);
          }
        }else{
          digitalWrite(relais_Vent_Ext, LOW);
          digitalWrite(relais_Vent_Int, LOW);
          digitalWrite(relais_V4V, LOW);
          digitalWrite(led_FR, LOW);
          digitalWrite(led_CH, HIGH);
          }
          if(!digitalRead(led_FR)){
            chrono_demar_Comp = millis() + 180000;
            }
            if(millis() > chrono_demar_Comp){
              digitalWrite(relais_Comp, HIGH);
              Serial.print("Compresseur ON ");
              }else{
                digitalWrite(relais_Comp, LOW);
                Serial.print("Démarage Compresseur dans : ");
                Serial.println(chrono_demar_Comp - millis());
            }
    }

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 899
    Par défaut
    Citation Envoyé par ludoiphone Voir le message
    oui et non , c'est pour avoir plusieurs avis.
    c'est un peu égoïste non? c'est comme si vous disiez que ça vous est égal que plusieurs aidants travaillent sur votre problème en parallèle et vous fournissent une réponse similaire sans le savoir, ou deux jours plus tard alors que vous avez déjà réglé votre problème... Ces aidants auraient pu investir ce même temps perdu pour aider quelqu'un d'autre...

    c'est donc mieux vu de ne poster qu'à un seul endroit, où si vous postez à plusieurs endroits, de le dire et donner des liens des 2 côtés

Discussions similaires

  1. Faire une application avec plusieurs écrans
    Par JCMANSION dans le forum Android
    Réponses: 16
    Dernier message: 25/11/2010, 22h02
  2. Réponses: 5
    Dernier message: 27/08/2010, 07h29
  3. [AC-2007] Faire une somme avec plusieurs criteres
    Par webchef dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/01/2010, 22h06
  4. faire une table avec plusieurs tables issues de base différentess
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 18/03/2009, 14h12
  5. Faire une table avec plusieurs
    Par FCL31 dans le forum Modélisation
    Réponses: 1
    Dernier message: 22/01/2008, 13h44

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