Go Down

Topic: besoin d'aide pour un menu, (Read 2585 times) previous topic - next topic

Dams501

sa marche !!!!!!!! :)  :)  :)  :) je v faire plein de teste pour voir si sa déconne pas 1 fois sur 30 mais la sa marche

j ai mis le bout de code que tu ma passer et j'ai test de mettre les variables

Code: [Select]
int temp1 = tc_100(addr1);
  int temp2 = tc_100(addr2);




avent

Code: [Select]
void Sondes() {
  int temp1 = tc_100(addr1);
  int temp2 = tc_100(addr2);
  if (!afficherMenu) {
    mypr(temp1,0);
    Serial.print("sonde 1 = ");
    Serial.println(temp1);
    mypr(temp2,1);
    Serial.print("sonde 1 = ");
    Serial.println(temp2);
      }
}


j'ai déplacer aussi l affichage de

Code: [Select]
 lcd.setCursor(0, 0);
  lcd.print("Temp NID:");
  lcd.setCursor(0, 1);
  lcd.print("Temp ADC:");



dans

Code: [Select]
void mypr(int Tc_100, int line) {
  
  int Whole, Fract;
  Whole = Tc_100 / 100;  // separate off the whole and fractional portions
  Fract = Tc_100 % 100;
  lcd.setCursor(0, 0);
  lcd.print("Temp NID:");
  lcd.setCursor(0, 1);
  lcd.print("Temp ADC:");
  if (SignBit) // If its negative
  {
     lcd.setCursor(StartCol,line);
     lcd.print("-");
  }
  lcd.setCursor(StartCol+1,line);
  lcd.print(Whole);
  lcd.print(".");
  if (Fract < 10)
  {
     lcd.print("0");
  }
  lcd.print(Fract);
  lcd.print("C");
}


C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Dams501

#46
Apr 25, 2019, 01:07 pm Last Edit: Apr 25, 2019, 01:08 pm by Dams501
T un génie t imagine même pas comment tu ma fait avancer en deux jour sur mon projet !!! merci pour ta patience et ton envie d aider

mais j'ai encore plein d autre question mon projet est loin d être complet

d ailleurs je vient de test d afficher les print suivant dans mon void régule et j ai du redéclarer mais variable dedans

int temp1 = tc_100(addr1);
 int temp2 = tc_100(addr2);

j'ai donc essayer de les mettre dans l entête  et  il n en veut pas non-plus je peux les écrire où ou comment pour quelle soit repris dans tout mes Void
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

dbrion06

Vous faites deux variables communes à tout le monde ("globales"), avant toute déclaration de fonction;
int temp1 , temp2;

et, sans les redéclarer
temp1 = tc_100(addr1);
temp2 = tc_100(addr2);
les mettra à jour....

lesept

Si on peut brancher les 2 sondes sur 2 pins différentes, alors on pourra déclarer 2 instances différentes avec 2 noms différents. On fera alors la lecture en parallèle et on aura juste besoin d'attendre 1 seconde pour faire les 2 lectures. ça gagnera un peu en rapidité.
Je pense vraiment que tu devrais tester ça aussi, je t'aiderai à faire la lecture parallèle ensuite.
Teste avec un code simple (je n'ai pas vérifié... : s'il y a des erreurs de compilation, copie l'ensemble des erreurs dans ta réponse) :
Code: [Select]

#include <OneWire.h>

// DS18S20 Temperature chip i/o
OneWire ds1(10);  // on pin 10
OneWire ds2(11);  // on pin 11

byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};

void setup() {
  Serial.begin(9600);
}

void loop() {
  int temp1 = tc_101();
  int temp2 = tc_102();
  Serial.print (temp1);
  Serial.print ("\t");
  Serial.println (temp2);
}

int tc_101(){
  byte HighByte, LowByte;
  int TReading;
  byte data[12]={0};

  ds1.reset();
  ds1.select(addr1);
  ds1.write(0x44,1);         // start conversion, with parasite power on at the end
  delay(1000);
  ds1.reset();
  ds1.select(addr1); 
  ds1.write(0xBE);         // Read Scratchpad

  for (byte i = 0; i < 9; i++) data[i] = ds1.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  int SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  return (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}

int tc_102(){
  byte HighByte, LowByte;
  int TReading;
  byte data[12] = {0};

  ds2.reset();
  ds2.select(addr2);
  ds2.write(0x44,1);         // start conversion, with parasite power on at the end
  delay(1000);
  ds2.reset();
  ds2.select(addr2); 
  ds2.write(0xBE);         // Read Scratchpad

  for (byte i = 0; i < 9; i++) data[i] = ds2.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  int SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  return (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}


C'est bizarre ce code de lecture : il lit 9 bytes (tableau data) d'un tableau de dimension 12 et il n'en utilise que 2 !!! Tu l'as trouvé où...?
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

j ai utilisé se tuto pour mes sonde car je n arrivé a en lire deux et les dissocier

mais c pas le seul a faire sa

https://www.dekloo.net/arduino-raspberry/arduino-capteurs-de-temperature-ds18s20/1020

d après se que j ai vu sur plusieurs tuto la sonde doit se lire en 12 bytes par défaut et apparemment en l interprètent en 8bytes on gagne du temps et cela permet de lire plusieurs sonde (un truc du genre, mais la sa dépasse mais compétence actuel)
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Dams501

ton code marche il m'affiche bien les température
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Dams501

j ai mixé ton code et le menu

la page principal avec les sonde s affiche nikel par contre ma température n'est pas écrite 23.56 mais 2356 sans .

par contre j ai du faire une coquille quelque part car mon menu ne se lance pas


Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include <OneWire.h>

// DS18S20 Temperature chip i/o
OneWire ds1(10);  // on pin 10
OneWire ds2(9);  // on pin 11

byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};

bool afficherMenu = false;
bool temperatureLimite = false;

int ventilo = 6;
int relais = 1;
int Tmin = 20;
int Tmax= 25;
int Hmin = 20;
int Hmax = 25;
int heure = 1;
int minute = 1;

int unsigned Menu = 0;
int unsigned SousMenu = 0;

double Tempo = millis();
double Tempo2 = 0;

int test1 = 0;
int test2 = 0;
int test3 = 0;

int SELECT = A0;
int UP = A1;
int LEFT = A3;
int HOME = A4;



typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Info General "
  };
  NumMenu[11] = (TypeMenu) {
    "Temp Nid:" +String(Tmin)
  };
  NumMenu[12] = (TypeMenu) {
    "Temp ADC:" +String(Tmax)
  };
  NumMenu[13] = (TypeMenu) {
    "Humidite" +String(Tmax)
  };
  NumMenu[20] = (TypeMenu) {
    "2. Temperature"
  };
  NumMenu[21] = (TypeMenu) {
    "Temp Min " +String(Tmin) + " c"
  };
  NumMenu[22] = (TypeMenu) {
    "Temp Max " +String(Tmax) + " c"
  };
  NumMenu[30] = (TypeMenu) {
    "3. Humidite"
  };
  NumMenu[31] = (TypeMenu) {
    "Humid Min " +String(Hmin) + "%"
  };
  NumMenu[32] = (TypeMenu) {
    "Humid Max " +String(Hmax) + "%"
  };
  NumMenu[40] = (TypeMenu) {
    "4. Heure"
  };
  NumMenu[41] = (TypeMenu) {
    "4.1 Reglage"
  };
  NumMenu[42] = (TypeMenu) {
    "4.2 Reglage heure"
  };
}



void setup() {
  pinMode(ventilo, OUTPUT);
  pinMode(relais, OUTPUT);

  Serial.begin(9600);
  Initialisation();
  lcd.begin(16, 2);
  lcd.clear();

 
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(HOME, INPUT_PULLUP);
}



void loop() {
  Sondes();
  Regul();
  humi();
  heurefunc();
  bouton();
}

void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      afficherMenu = true;  // <-- ici
      Serial.println("afficherMenu = true");
      SousMenu++;
      Tempo = millis() + 250;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      afficherMenu = true;  // <-- ici
      Serial.println("afficherMenu = true");
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(HOME) == LOW) { /* Bouton Select */
      afficherMenu = false;
      Tempo = millis() + 750;
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      afficherMenu = true;  // <-- et ici
      Tempo = millis() + 750;
      lcd.clear();
      switch (Menu + SousMenu) {
       
      case 21 :
          if(Tmin <= 29){
            Tmin = Tmin + 1;
          }
          else {
            Tmin = 5;
          }
          if(Tmin >= Tmax) {
            Tmax = Tmin + 1;
            Serial.print("Tmax");
            Serial.println(Tmax);
            NumMenu[22] = (TypeMenu) {
            "Temp Max " +String(Tmax) + " c"
          };
          }
          NumMenu[21] = (TypeMenu) {
          "Temp Min " +String(Tmin) + " c"
          };
          Serial.print("Tmin");
          Serial.println(Tmin);
          break;
   
      case 22 :
          if ((Tmax > Tmin)&&(Tmax <= 30)){
            Tmax = Tmax + 1;
          }
          else {
            Tmax = Tmin + 1;
            NumMenu[21] = (TypeMenu) {
            "Temp Min " +String(Tmin) + " c"
          };
          }
          NumMenu[22] = (TypeMenu) {
          "Temp Max " +String(Tmax) + " c"
          };
          Serial.print("Tmax");
          Serial.println(Tmax);
          break;
       
      case 31 :
          if ((Hmax > Hmin)&&(Hmin <= 99)){
            Hmin = Hmin + 1;
          }
          else {
            Hmin = 5;
          }
          if(Hmin >= Hmax) {
            Hmax = Hmin + 5;
            NumMenu[32] = (TypeMenu) {
            "Humid Max " +String(Hmax) + " %"
            };
            Serial.print("Hmax");
            Serial.println(Hmax);
          }
          NumMenu[31] = (TypeMenu) {
          "Humid Min " +String(Hmin) + " %"
          };
          Serial.print("Hmin");
          Serial.println(Hmin);
          break;

      case 32 :
          if ((Hmax > Hmin)&&(Hmax <= 99)){
            Hmax = Hmax + 1;
          }
          else {
            Hmax = Hmin + 1;
            NumMenu[31] = (TypeMenu) {
            "Humid Min " +String(Hmin) + " %"
            };
          }
          NumMenu[32] = (TypeMenu) {
          "Humid Max " +String(Hmax) + " %"
          };
          Serial.print("Hmax");
          Serial.println(Hmax);
          break;

      case 41 :
          ;
      case 42 :
          ;
      }
      AfficheMenu();
    }
  }
}

void AfficheMenu() {
  if (!afficherMenu) return;
  if (Menu == 0 ) {
    Menu = 40;
  }
  if (Menu == 50 ) {
    Menu = 10;
  }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(NumMenu[Menu].Menu);
  lcd.setCursor(0, 1);
  if ( SousMenu < 0 ) {
    SousMenu = 0;
  }
  if (NumMenu[Menu + SousMenu].Menu == "") {
    SousMenu = 0;
  }
  if (Menu + SousMenu > Menu) {
    lcd.print(NumMenu[Menu + SousMenu].Menu);
  }
}

void Regul() {
  int temp1 = tc_101();
  int temp2 = tc_102();
    Serial.print("sonde test 1 = ");
    Serial.println(temp1);
    Serial.print("sonde test 2 = ");
    Serial.println(temp2);
}

void humi() {
    if (test2 > 0) {
    if ((digitalRead(test2)) == HIGH) {
      Serial.print("action on test2");
    }
    if ((digitalRead(test2)) == LOW) {
      Serial.print("action off test2");
    }
  }
}

void heurefunc() {
    if (test3 > 0) {
    if ((digitalRead(test3)) == HIGH) {
      Serial.print("action on test3");
    }
    if ((digitalRead(test3)) == LOW) {
      Serial.print("action off test3");
    }
  }
}



// sonde temperature



void Sondes() {
  int temp1 = tc_101();
  int temp2 = tc_102();
  if (!afficherMenu) {
    lcd.setCursor(0, 0);
    lcd.print("Temp NID:");
    lcd.print (temp1);
    lcd.print (" ");
    lcd.print ('\xDF');
    lcd.print ("C");
    lcd.setCursor(0, 1);
    lcd.print("Temp ADC:");
    lcd.print (temp2);
    lcd.print (" ");
    lcd.print ('\xDF');
    lcd.print ("C");
    Serial.print("sonde 1 = ");
    Serial.println(temp1);
    Serial.print("sonde 2 = ");
    Serial.println(temp2);
      }
}

int tc_101(){
  byte HighByte, LowByte;
  int TReading;
  byte data[12]={0};

  ds1.reset();
  ds1.select(addr1);
  ds1.write(0x44,1);         // start conversion, with parasite power on at the end
  delay(1000);
  ds1.reset();
  ds1.select(addr1);
  ds1.write(0xBE);         // Read Scratchpad

  for (byte i = 0; i < 9; i++) data[i] = ds1.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  int SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  return (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}

int tc_102(){
  byte HighByte, LowByte;
  int TReading;
  byte data[12] = {0};

  ds2.reset();
  ds2.select(addr2);
  ds2.write(0x44,1);         // start conversion, with parasite power on at the end
  delay(1000);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0xBE);         // Read Scratchpad

  for (byte i = 0; i < 9; i++) data[i] = ds2.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  int SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  return (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

C'est normal, le code était juste là pour tester les 2 sondes sur 2 pins différentes. Je vais te proposer une nouvelle fonction pour lire les 2 sondes en même temps.
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

ah !!! ok j 'attend mais au moin ton code et plus compréhensible dans les details pour mon lvl
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

Voilou !  :)

Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include <OneWire.h>

// DS18S20 Temperature chip i/o
OneWire ds1(10);  // on pin 10
OneWire ds2(9);   // on pin  9

byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};

bool afficherMenu = false;
bool temperatureLimite = false;

int ventilo = 6;
int relais = 1;
int Tmin = 20;
int Tmax = 25;
int Hmin = 20;
int Hmax = 25;
int heure = 1;
int minute = 1;
int temp1 = 0;
int temp2 = 0;

int unsigned Menu = 0;
int unsigned SousMenu = 0;

unsigned long Tempo = 0;

int test1 = 0;
int test2 = 0;
int test3 = 0;

int SELECT = A0;
int UP = A1;
int LEFT = A3;
int HOME = A4;



typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Info General "
  };
  NumMenu[11] = (TypeMenu) {
    "Temp Nid:" + String(Tmin)
  };
  NumMenu[12] = (TypeMenu) {
    "Temp ADC:" + String(Tmax)
  };
  NumMenu[13] = (TypeMenu) {
    "Humidite" + String(Tmax)
  };
  NumMenu[20] = (TypeMenu) {
    "2. Temperature"
  };
  NumMenu[21] = (TypeMenu) {
    "Temp Min " + String(Tmin) + " c"
  };
  NumMenu[22] = (TypeMenu) {
    "Temp Max " + String(Tmax) + " c"
  };
  NumMenu[30] = (TypeMenu) {
    "3. Humidite"
  };
  NumMenu[31] = (TypeMenu) {
    "Humid Min " + String(Hmin) + "%"
  };
  NumMenu[32] = (TypeMenu) {
    "Humid Max " + String(Hmax) + "%"
  };
  NumMenu[40] = (TypeMenu) {
    "4. Heure"
  };
  NumMenu[41] = (TypeMenu) {
    "4.1 Reglage"
  };
  NumMenu[42] = (TypeMenu) {
    "4.2 Reglage heure"
  };
}



void setup() {
  pinMode(ventilo, OUTPUT);
  pinMode(relais, OUTPUT);
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(HOME, INPUT_PULLUP);

  Serial.begin(9600);
  Initialisation();
  lcd.begin(16, 2);
  lcd.clear();
  Tempo = millis();
}



void loop() {
  Sondes();
  Regul();
  humi();
  heurefunc();
  bouton();
}

void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      afficherMenu = true;
      Serial.println("afficherMenu = true");
      SousMenu++;
      Tempo = millis() + 250;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      afficherMenu = true;
      Serial.println("afficherMenu = true");
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(HOME) == LOW) { /* Bouton Select */
      afficherMenu = false;
      Tempo = millis() + 750;
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      afficherMenu = true;
      Tempo = millis() + 750;
      lcd.clear();
      switch (Menu + SousMenu) {

        case 21 :
          if (Tmin <= 29) {
            Tmin = Tmin + 1;
          }
          else {
            Tmin = 5;
          }
          if (Tmin >= Tmax) {
            Tmax = Tmin + 1;
            Serial.print("Tmax");
            Serial.println(Tmax);
            NumMenu[22] = (TypeMenu) {
              "Temp Max " + String(Tmax) + " c"
            };
          }
          NumMenu[21] = (TypeMenu) {
            "Temp Min " + String(Tmin) + " c"
          };
          Serial.print("Tmin");
          Serial.println(Tmin);
          break;

        case 22 :
          if ((Tmax > Tmin) && (Tmax <= 30)) {
            Tmax = Tmax + 1;
          }
          else {
            Tmax = Tmin + 1;
            NumMenu[21] = (TypeMenu) {
              "Temp Min " + String(Tmin) + " c"
            };
          }
          NumMenu[22] = (TypeMenu) {
            "Temp Max " + String(Tmax) + " c"
          };
          Serial.print("Tmax");
          Serial.println(Tmax);
          break;

        case 31 :
          if ((Hmax > Hmin) && (Hmin <= 99)) {
            Hmin = Hmin + 1;
          }
          else {
            Hmin = 5;
          }
          if (Hmin >= Hmax) {
            Hmax = Hmin + 5;
            NumMenu[32] = (TypeMenu) {
              "Humid Max " + String(Hmax) + " %"
            };
            Serial.print("Hmax");
            Serial.println(Hmax);
          }
          NumMenu[31] = (TypeMenu) {
            "Humid Min " + String(Hmin) + " %"
          };
          Serial.print("Hmin");
          Serial.println(Hmin);
          break;

        case 32 :
          if ((Hmax > Hmin) && (Hmax <= 99)) {
            Hmax = Hmax + 1;
          }
          else {
            Hmax = Hmin + 1;
            NumMenu[31] = (TypeMenu) {
              "Humid Min " + String(Hmin) + " %"
            };
          }
          NumMenu[32] = (TypeMenu) {
            "Humid Max " + String(Hmax) + " %"
          };
          Serial.print("Hmax");
          Serial.println(Hmax);
          break;

        case 41 :
          ;
        case 42 :
          ;
      }
      AfficheMenu();
    }
  }
}

void AfficheMenu() {
  if (!afficherMenu) return;
  if (Menu == 0 ) {
    Menu = 40;
  }
  if (Menu == 50 ) {
    Menu = 10;
  }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(NumMenu[Menu].Menu);
  lcd.setCursor(0, 1);
  if ( SousMenu < 0 ) {
    SousMenu = 0;
  }
  if (NumMenu[Menu + SousMenu].Menu == "") {
    SousMenu = 0;
  }
  if (Menu + SousMenu > Menu) {
    lcd.print(NumMenu[Menu + SousMenu].Menu);
  }
}

void Regul() {
  tc_100();
  Serial.print("sonde test 1 = ");
  Serial.println(temp1);
  Serial.print("sonde test 2 = ");
  Serial.println(temp2);
}

void humi() {
  if (test2 > 0) {
    if ((digitalRead(test2)) == HIGH) {
      Serial.print("action on test2");
    }
    if ((digitalRead(test2)) == LOW) {
      Serial.print("action off test2");
    }
  }
}

void heurefunc() {
  if (test3 > 0) {
    if ((digitalRead(test3)) == HIGH) {
      Serial.print("action on test3");
    }
    if ((digitalRead(test3)) == LOW) {
      Serial.print("action off test3");
    }
  }
}

void Sondes() {
  tc_100();
  if (!afficherMenu) {
    lcd.setCursor(0, 0);
    lcd.print("Temp NID:");
    lcd.print (temp1);
    lcd.print (" ");
    lcd.print ('\xDF');
    lcd.print ("C");
    lcd.setCursor(0, 1);
    lcd.print("Temp ADC:");
    lcd.print (temp2);
    lcd.print (" ");
    lcd.print ('\xDF');
    lcd.print ("C");
    Serial.print("sonde 1 = ");
    Serial.println(temp1);
    Serial.print("sonde 2 = ");
    Serial.println(temp2);
  }
}

int tc_100() {
  byte HighByte, LowByte;
  int TReading, SignBit;
  byte data[12] = {0};

  ds1.reset();
  ds1.select(addr1);
  ds1.write(0x44, 1);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0x44, 1);
  delay(1000);  //  <-- une seule attente pour deux mesures !!!
  ds1.reset();
  ds1.select(addr1);
  ds1.write(0xBE);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0xBE);

  for (byte i = 0; i < 9; i++) data[i] = ds1.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  temp1 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  for (byte i = 0; i < 9; i++) data[i] = ds2.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  temp2 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}


Si c'est toi qui m'augmente mon karma : merci !!
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

#55
Apr 25, 2019, 05:45 pm Last Edit: Apr 25, 2019, 05:50 pm by Dams501
pour le karma ouep c moi c'est la moindre des chose et jte payerai bien une bière également si je pouvez ^^


sinon pour ton code je les ajouter a la page d accueil s affiche bien mais j 'ai pas de virgule a ma température mais sinon c bon

par contre le menu ne répond pas sa reste sur la page d'accueil  
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

lesept

Nouvelle version avec la virgule et qq petites corrections :

Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include <OneWire.h>

// DS18S20 Temperature chip i/o
OneWire ds1(10);  // on pin 10
OneWire ds2(9);   // on pin  9

byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};
int SignBit = 0;
int StartCol = 8;

bool afficherMenu = false;
bool temperatureLimite = false;

int ventilo = 6;
int relais = 1;
int Tmin = 20;
int Tmax = 25;
int Hmin = 20;
int Hmax = 25;
int heure = 1;
int minute = 1;
int temp1 = 0;
int temp2 = 0;

unsigned int Menu = 0;
unsigned int SousMenu = 0;
unsigned long Tempo = 0;

int test1 = 0;
int test2 = 0;
int test3 = 0;

int SELECT = A0;
int UP = A1;
int LEFT = A3;
int HOME = A4;

typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Info General "
  };
  NumMenu[11] = (TypeMenu) {
    "Temp Nid:" + String(Tmin)
  };
  NumMenu[12] = (TypeMenu) {
    "Temp ADC:" + String(Tmax)
  };
  NumMenu[13] = (TypeMenu) {
    "Humidite" + String(Tmax)
  };
  NumMenu[20] = (TypeMenu) {
    "2. Temperature"
  };
  NumMenu[21] = (TypeMenu) {
    "Temp Min " + String(Tmin) + " c"
  };
  NumMenu[22] = (TypeMenu) {
    "Temp Max " + String(Tmax) + " c"
  };
  NumMenu[30] = (TypeMenu) {
    "3. Humidite"
  };
  NumMenu[31] = (TypeMenu) {
    "Humid Min " + String(Hmin) + "%"
  };
  NumMenu[32] = (TypeMenu) {
    "Humid Max " + String(Hmax) + "%"
  };
  NumMenu[40] = (TypeMenu) {
    "4. Heure"
  };
  NumMenu[41] = (TypeMenu) {
    "4.1 Reglage"
  };
  NumMenu[42] = (TypeMenu) {
    "4.2 Reglage heure"
  };
}

void setup() {
  pinMode(ventilo, OUTPUT);
  pinMode(relais, OUTPUT);
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(HOME, INPUT_PULLUP);

  Serial.begin(9600);
  Initialisation();
  lcd.begin(16, 2);
  lcd.clear();
  Tempo = millis();
}

void loop() {
  Sondes();
  Regul();
  humi();
  heurefunc();
  bouton();
}

void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      delay(30);
      afficherMenu = true;
      Serial.println("afficherMenu = true");
      SousMenu++;
      Tempo = millis() + 250;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      delay(30);
      afficherMenu = true;
      Serial.println("afficherMenu = true");
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(HOME) == LOW) { /* Bouton Select */
      delay(30);
      afficherMenu = false;
      Tempo = millis() + 750;
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      delay(30);
      afficherMenu = true;
      Tempo = millis() + 750;
      lcd.clear();
      switch (Menu + SousMenu) {

        case 21 :
          if (Tmin <= 29) {
            Tmin = Tmin + 1;
          }
          else {
            Tmin = 5;
          }
          if (Tmin >= Tmax) {
            Tmax = Tmin + 1;
            Serial.print("Tmax");
            Serial.println(Tmax);
            NumMenu[22] = (TypeMenu) {
              "Temp Max " + String(Tmax) + " c"
            };
          }
          NumMenu[21] = (TypeMenu) {
            "Temp Min " + String(Tmin) + " c"
          };
          Serial.print("Tmin");
          Serial.println(Tmin);
          break;

        case 22 :
          if ((Tmax > Tmin) && (Tmax <= 30)) {
            Tmax = Tmax + 1;
          }
          else {
            Tmax = Tmin + 1;
            NumMenu[21] = (TypeMenu) {
              "Temp Min " + String(Tmin) + " c"
            };
          }
          NumMenu[22] = (TypeMenu) {
            "Temp Max " + String(Tmax) + " c"
          };
          Serial.print("Tmax");
          Serial.println(Tmax);
          break;

        case 31 :
          if ((Hmax > Hmin) && (Hmin <= 99)) {
            Hmin = Hmin + 1;
          }
          else {
            Hmin = 5;
          }
          if (Hmin >= Hmax) {
            Hmax = Hmin + 5;
            NumMenu[32] = (TypeMenu) {
              "Humid Max " + String(Hmax) + " %"
            };
            Serial.print("Hmax");
            Serial.println(Hmax);
          }
          NumMenu[31] = (TypeMenu) {
            "Humid Min " + String(Hmin) + " %"
          };
          Serial.print("Hmin");
          Serial.println(Hmin);
          break;

        case 32 :
          if ((Hmax > Hmin) && (Hmax <= 99)) {
            Hmax = Hmax + 1;
          }
          else {
            Hmax = Hmin + 1;
            NumMenu[31] = (TypeMenu) {
              "Humid Min " + String(Hmin) + " %"
            };
          }
          NumMenu[32] = (TypeMenu) {
            "Humid Max " + String(Hmax) + " %"
          };
          Serial.print("Hmax");
          Serial.println(Hmax);
          break;

        case 41 :
          ;
        case 42 :
          ;
      }
      AfficheMenu();
    }
  }
}

void AfficheMenu() {
  if (!afficherMenu) return;
  if (Menu == 0 ) {
    Menu = 40;
  }
  if (Menu == 50 ) {
    Menu = 10;
  }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(NumMenu[Menu].Menu);
  lcd.setCursor(0, 1);
  if ( SousMenu < 0 ) {
    SousMenu = 0;
  }
  if (NumMenu[Menu + SousMenu].Menu == "") {
    SousMenu = 0;
  }
  if (Menu + SousMenu > Menu) {
    lcd.print(NumMenu[Menu + SousMenu].Menu);
  }
}

void Regul() {
  tc_100();
  Serial.print("sonde test 1 = ");
  Serial.println(temp1);
  Serial.print("sonde test 2 = ");
  Serial.println(temp2);
}

void humi() {
  if (test2 > 0) {
    if ((digitalRead(test2)) == HIGH) {
      Serial.print("action on test2");
    }
    if ((digitalRead(test2)) == LOW) {
      Serial.print("action off test2");
    }
  }
}

void heurefunc() {
  if (test3 > 0) {
    if ((digitalRead(test3)) == HIGH) {
      Serial.print("action on test3");
    }
    if ((digitalRead(test3)) == LOW) {
      Serial.print("action off test3");
    }
  }
}

void Sondes() {
  tc_100();
  if (!afficherMenu) {
    lcd.setCursor(0, 0);
    lcd.print("Temp NID:");
    mypr (temp1, 0);
    lcd.print (" ");
    lcd.print ('\xDF');
    lcd.print ("C");
    lcd.setCursor(0, 1);
    lcd.print("Temp ADC:");
    mypr (temp2, 1);
    lcd.print (" ");
    lcd.print ('\xDF');
    lcd.print ("C");
    Serial.print("sonde 1 = ");
    Serial.println(temp1);
    Serial.print("sonde 2 = ");
    Serial.println(temp2);
  }
}

void tc_100() {
  byte HighByte, LowByte;
  int TReading, SignBit;
  byte data[12] = {0};

  ds1.reset();
  ds1.select(addr1);
  ds1.write(0x44, 1);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0x44, 1);
  delay(1000);  //  <-- une seule attente pour deux mesures !!!
  ds1.reset();
  ds1.select(addr1);
  ds1.write(0xBE);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0xBE);

  for (byte i = 0; i < 9; i++) data[i] = ds1.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  temp1 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  for (byte i = 0; i < 9; i++) data[i] = ds2.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  temp2 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}

void mypr(int Tc_100, int line) {
  int Whole, Fract;
  Whole = Tc_100 / 100;  // separate off the whole and fractional portions
  Fract = Tc_100 % 100;

  if (SignBit) // If its negative
  {
     lcd.setCursor(StartCol,line);
     lcd.print("-");
  }
  lcd.setCursor(StartCol+1,line);
  lcd.print(Whole);
  lcd.print(".");
  if (Fract < 10)
  {
     lcd.print("0");
  }
  lcd.print(Fract);
}


Qu'appelles-tu la page d'accueil ? Que vois-tu lorsque tu appuies sur les boutons ? (indique moi les boutons et ce qui s'affiche)
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Dams501

#57
Apr 25, 2019, 07:01 pm Last Edit: Apr 25, 2019, 07:03 pm by Dams501
ma page d accueil



mon menu



en faite on a récupérer le soucie d hier quand j appuis pour afficher le menu le délais et long et je doit appuyer plusieurs fois pour l'afficher et la navigation dans le menu et également long pour le retour c pareille

sinon l accueil c parfait

peut tu regarder ce code c le tient mais j'ai rajouter la parti regul. bon sa marche mais je pense que se n est pas la bonne pratique et on doit pouvoir faire plus simple et propre

trop de caractère je poste le code dans 5 min^^
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Dams501

#58
Apr 25, 2019, 07:08 pm Last Edit: Apr 25, 2019, 07:10 pm by Dams501
partie 1 il est trop long le reste a nouveau dans 5 min^^

Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#include <OneWire.h>

// DS18S20 Temperature
OneWire ds1(10);  // on pin 10
OneWire ds2(9);   // on pin  9

byte addr1[8] = {0x28, 0xAA, 0x98, 0x12, 0x3C, 0x14, 0x01, 0xD7};
byte addr2[8] = {0x28, 0xAA, 0xC1, 0x91, 0x3B, 0x14, 0x01, 0x9A};
int SignBit = 0;
int StartCol = 8;

bool afficherMenu = false;
bool temperatureLimite = false;

const char ventilo1 = 6;
const char ventilo2 = 7;

int ventilo = 6;
int relais = 1;
int Tmin = 20;
int Tmax = 25;
int temperatureControleMax = Tmax * 100;
int Hmin = 20;
int Hmax = 25;
int heure = 1;
int minute = 1;
int temp1 = 0;
int temp2 = 0;

unsigned int Menu = 0;
unsigned int SousMenu = 0;
unsigned long Tempo = 0;

int test1 = 0;
int test2 = 0;
int test3 = 0;

int SELECT = A0;
int UP = A1;
int LEFT = A3;
int HOME = A4;

typedef struct {
  String Menu;
}

TypeMenu;
TypeMenu NumMenu[100];

void Initialisation() {
  NumMenu[10] = (TypeMenu) {
    "1. Info General "
  };
  NumMenu[11] = (TypeMenu) {
    "Temp Nid:" + String(Tmin)
  };
  NumMenu[12] = (TypeMenu) {
    "Temp ADC:" + String(Tmax)
  };
  NumMenu[13] = (TypeMenu) {
    "Humidite" + String(Tmax)
  };
  NumMenu[20] = (TypeMenu) {
    "2. Temperature"
  };
  NumMenu[21] = (TypeMenu) {
    "Temp Min " + String(Tmin) + " c"
  };
  NumMenu[22] = (TypeMenu) {
    "Temp Max " + String(Tmax) + " c"
  };
  NumMenu[30] = (TypeMenu) {
    "3. Humidite"
  };
  NumMenu[31] = (TypeMenu) {
    "Humid Min " + String(Hmin) + "%"
  };
  NumMenu[32] = (TypeMenu) {
    "Humid Max " + String(Hmax) + "%"
  };
  NumMenu[40] = (TypeMenu) {
    "4. Heure"
  };
  NumMenu[41] = (TypeMenu) {
    "4.1 Reglage"
  };
  NumMenu[42] = (TypeMenu) {
    "4.2 Reglage heure"
  };
}

void setup() {
  pinMode(ventilo1, OUTPUT);
  pinMode(ventilo2, OUTPUT);
  pinMode(relais, OUTPUT);
  pinMode(SELECT, INPUT_PULLUP);
  pinMode(UP, INPUT_PULLUP);
  pinMode(LEFT, INPUT_PULLUP);
  pinMode(HOME, INPUT_PULLUP);

  Serial.begin(9600);
  Initialisation();
  lcd.begin(16, 2);
  lcd.clear();
  Tempo = millis();
}

void loop() {
  Sondes();
  Regul();
  humi();
  heurefunc();
  bouton();
}

void bouton() {
  if ( millis() > Tempo ) {
    if (digitalRead(LEFT) == LOW) { /* Bouton LEFT  */
      delay(30);
      afficherMenu = true;
      Serial.println("afficherMenu = true");
      SousMenu++;
      Tempo = millis() + 250;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(UP) == LOW) { /* Bouton Up */
      delay(30);
      afficherMenu = true;
      Serial.println("afficherMenu = true");
      Menu = Menu + 10;
      Tempo = millis() + 250;
      SousMenu = 0;
      lcd.clear();
      Serial.println("clear du lcd");
      AfficheMenu();
      Serial.println("Menu afficher");
    } else if (digitalRead(HOME) == LOW) { /* Bouton Select */
      delay(30);
      afficherMenu = false;
      Tempo = millis() + 750;
    } else if (digitalRead(SELECT) == LOW) { /* Bouton Select */
      delay(30);
      afficherMenu = true;
      Tempo = millis() + 750;
      lcd.clear();
      switch (Menu + SousMenu) {

        case 21 :
          if (Tmin <= 29) {
            Tmin = Tmin + 1;
          }
          else {
            Tmin = 5;
          }
          if (Tmin >= Tmax) {
            Tmax = Tmin + 1;
            Serial.print("Tmax");
            Serial.println(Tmax);
            NumMenu[22] = (TypeMenu) {
              "Temp Max " + String(Tmax) + " c"
            };
          }
          NumMenu[21] = (TypeMenu) {
            "Temp Min " + String(Tmin) + " c"
          };
          Serial.print("Tmin");
          Serial.println(Tmin);
          break;

        case 22 :
          if ((Tmax > Tmin) && (Tmax <= 30)) {
            Tmax = Tmax + 1;
          }
          else {
            Tmax = Tmin + 1;
            NumMenu[21] = (TypeMenu) {
              "Temp Min " + String(Tmin) + " c"
            };
          }
          NumMenu[22] = (TypeMenu) {
            "Temp Max " + String(Tmax) + " c"
          };
          Serial.print("Tmax");
          Serial.println(Tmax);
          break;

        case 31 :
          if ((Hmax > Hmin) && (Hmin <= 99)) {
            Hmin = Hmin + 1;
          }
          else {
            Hmin = 5;
          }
          if (Hmin >= Hmax) {
            Hmax = Hmin + 5;
            NumMenu[32] = (TypeMenu) {
              "Humid Max " + String(Hmax) + " %"
            };
            Serial.print("Hmax");
            Serial.println(Hmax);
          }
          NumMenu[31] = (TypeMenu) {
            "Humid Min " + String(Hmin) + " %"
          };
          Serial.print("Hmin");
          Serial.println(Hmin);
          break;

        case 32 :
          if ((Hmax > Hmin) && (Hmax <= 99)) {
            Hmax = Hmax + 1;
          }
          else {
            Hmax = Hmin + 1;
            NumMenu[31] = (TypeMenu) {
              "Humid Min " + String(Hmin) + " %"
            };
          }
          NumMenu[32] = (TypeMenu) {
            "Humid Max " + String(Hmax) + " %"
          };
          Serial.print("Hmax");
          Serial.println(Hmax);
          break;

        case 41 :
          ;
        case 42 :
          ;
      }
      AfficheMenu();
    }
  }
}


}
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Dams501

suite du code il est trop grand

Code: [Select]
void AfficheMenu() {
  if (!afficherMenu) return;
  if (Menu == 0 ) {
    Menu = 40;
  }
  if (Menu == 50 ) {
    Menu = 10;
  }
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(NumMenu[Menu].Menu);
  lcd.setCursor(0, 1);
  if ( SousMenu < 0 ) {
    SousMenu = 0;
  }
  if (NumMenu[Menu + SousMenu].Menu == "") {
    SousMenu = 0;
  }
  if (Menu + SousMenu > Menu) {
    lcd.print(NumMenu[Menu + SousMenu].Menu);
  }
}

void Regul() {
  tc_100();
  Serial.print("Regul : sonde test 1 = ");
  Serial.println(temp1);
  Serial.print("Regul : sonde test 2 = ");
  Serial.println(temp2);
  Serial.print("Regul : temperature max = ");
  Serial.println(temperatureControleMax);

  if (temp1 > temperatureControleMax){
    temperatureLimite = false;
    Serial.print("ventil on");
  }else{
    temperatureLimite = true;
    Serial.print("ventil off");
  }
  if (!temperatureLimite) {
    digitalWrite(ventilo1, HIGH);
    digitalWrite(ventilo2, HIGH);
    }else{
      digitalWrite(ventilo1, LOW);
      digitalWrite(ventilo2, LOW);
    }
  }

void humi() {
  if (test2 > 0) {
    if ((digitalRead(test2)) == HIGH) {
      Serial.print("action on test2");
    }
    if ((digitalRead(test2)) == LOW) {
      Serial.print("action off test2");
    }
  }
}

void heurefunc() {
  if (test3 > 0) {
    if ((digitalRead(test3)) == HIGH) {
      Serial.print("action on test3");
    }
    if ((digitalRead(test3)) == LOW) {
      Serial.print("action off test3");
    }
  }
}

void Sondes() {
  tc_100();
  if (!afficherMenu) {
    lcd.setCursor(0, 0);
    lcd.print("Temp NID:");
    mypr (temp1, 0);
    lcd.print ('\xDF');
    lcd.print ("C");
    lcd.setCursor(0, 1);
    lcd.print("Temp ADC:");
    mypr (temp2, 1);
    lcd.print ('\xDF');
    lcd.print ("C");
    Serial.print("sonde 1 = ");
    Serial.println(temp1);
    Serial.print("sonde 2 = ");
    Serial.println(temp2);
  }
}

void tc_100() {
  byte HighByte, LowByte;
  int TReading, SignBit;
  byte data[12] = {0};

  ds1.reset();
  ds1.select(addr1);
  ds1.write(0x44, 1);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0x44, 1);
  delay(1000);  //  <-- une seule attente pour deux mesures !!!
  ds1.reset();
  ds1.select(addr1);
  ds1.write(0xBE);
  ds2.reset();
  ds2.select(addr2);
  ds2.write(0xBE);

  for (byte i = 0; i < 9; i++) data[i] = ds1.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  temp1 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25

  for (byte i = 0; i < 9; i++) data[i] = ds2.read();
  LowByte = data[0];
  HighByte = data[1];
  TReading = (HighByte << 8) + LowByte;
  SignBit = TReading & 0x8000;  // test most sig bit
  if (SignBit) TReading = (TReading ^ 0xffff) + 1; // 2's comp
  temp2 = (6 * TReading) + TReading / 4;    // multiply by (100 * 0.0625) or 6.25
}

void mypr(int Tc_100, int line) {
  int Whole, Fract;
  Whole = Tc_100 / 100;  // separate off the whole and fractional portions
  Fract = Tc_100 % 100;

  if (SignBit) // If its negative
  {
     lcd.setCursor(StartCol,line);
     lcd.print("-");
  }
  lcd.setCursor(StartCol+1,line);
  lcd.print(Whole);
  lcd.print(".");
  if (Fract < 10)
  {
     lcd.print("0");
  }
  lcd.print(Fract);
C'est a force d'enfiler les poules que l'on finit par casser des œufs !

Go Up