Go Down

Topic: Ma ferme verticale automatisée  (Read 2696 times) previous topic - next topic

bogtus

#15
May 16, 2020, 11:01 am Last Edit: May 16, 2020, 11:39 am by bogtus
Merci pour ta leçon de morale sur la communaute patgyver ! Tu as du donner beaucoup de toi-même avec 2 messages tous les 2 sur ce post ;)


Bref, je vous envoie le code. Je ne l'ai pas posté pour la simple raison qu'il n'est pas peaufiné. Je n'ai plus le temps de travailler dessus, mais il y a assez de commentaires et de précisions pour que vous puissiez l'adapter si nécessaire.
 
Le fonctionnement est expliqué autant que possible dans les commentaires de chaque fonction, je l'ai rendu le plus clair possible afin de pouvoir aussi le ré-utiliser quand j'aurai tout oublié du code… :)


Je mettrais un lien pour télécharger le tout - mais ces liens étant éphémères je préfère également poster le code ici


bogtus

#16
May 16, 2020, 11:13 am Last Edit: May 16, 2020, 12:26 pm by bogtus
Et voici le code

Les commentaires que j'y ai mis (en Français ou en anglais en fonction de l'humeur du jour) devraient vous suffire à comprendre.

Je l'ai divisé en plusieurs parties car il est trop long que pour être posté en 1 message.
1ère partie

Bon courage ;)


Code: [Select]
//Hydroponics controller made by Arthur
// CODE FOR INVERSED RELAY (Low voltage = actived)
//TIME, CLOCK RTC DS3231
// pH sensors = pin A0
//Water temperature sensor = digital pin 12
// Air T° & Humidity sensor = digital pin 13
//relay Light = pin 16
//relay Heating = pin 17
//relay 3 = pin 15 , relay 4 = pin 14
//relay pump pH UP = pin 8, pump pH down = pin 9
//relay nutrients1 = pin 10, relay nutrients2 = pin 11
//Water level sensor 1 (lowest)= pin A1
//Water level sensor 2 (highest)=  pin A2

#include <Time.h>
#include <TimeLib.h>
#include <TimeAlarms.h>
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int dateday; int datemonth; int dateyear; int timeminute; int timehour;


// For humidity & T°
#include <SimpleDHT.h>
// for DHT11, VCC: 5V,GND: GND, DATA: 3 (1ere pin = DATA, 2eme VCC, 3 GND)
int pinDHT11 = 13;
SimpleDHT11 dht11;
int AirTemperature;
int AirHumidity;
int HumidityMin=40;
int HumidityMax=80;
int AirTempmin = 10; //Air Temperature must be between 11-25°C for lettuce, ideal is around 12.
const int relayHeating =17;


// for pH ( 2 potentiometres sur le shield, du coté de la probe = offset , du coté des pins = pour gérer l'alarme sur un niveau de pH)
    const int pHPin = A0;
    int pHanalog = 0;
    float pHValue;
    unsigned long int avgValue;
    int buf[10],temp;
    unsigned long Currentmillis;
    unsigned long Lastmillis; //pour laisser un délai entre deux pompage pH afin d'éviter une constante correction, ou laisser le délai de la correction agir
    unsigned long pHperiod=60000;
    unsigned long PumpTime=5000; // temps de pompage de correction pH
   
    float pHmin = 5.5; //valuer min de pH
    float pHmax= 6.5;  // valeur max de pH

    int pH1AnalogRead; //calibration point 1
    int pH2AnalogRead;// calibration point 2
    float pH1Real;
    float pH2Real;
    int checkpH2Read=0;
    int checkpH1Read =0;
    float pHSlope= (-1/35); //configuration of the calibration
    float pHOffset= (731/35);
   
    const int PumppHup = 8;
    const int PumppHdown =9;

// for WaterTemperature (Onewire connection)
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into digital pin 12 on the Arduino (!!!With 5K Ohm resistance between Data wire & 5V(pull up resistance))
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float WaterTemp;

//for light hours of activity
int LightOn = 8;
int LightOff = 20;
const int relayLight = 16 ;

//for waterlevel

const int waterlevelsensor1 = A1;
const int waterlevelsensor2 = A2;
int tanklevel;

//Temporary Variables for savings :
int NewLightOn;
int NewLightOff;
float NewpHmin;
float NewpHmax;
int NewHumidityMin;
int NewHumidityMax;

//Screen functions
#include <UTFT.h>
#include <URTouch.h>
#include <UTFT_Buttons.h>
#include <EEPROM.h>

UTFT    myGLCD(ILI9341_16,38,39,40,41); //Parameters should be adjusted to your Display/Schield model CHECK DOCUMENTATION, TFT 480x320
URTouch  myTouch( 6,5, 4, 3, 2);
UTFT_Buttons  myButtons(&myGLCD, &myTouch);

//SD card functions (connected inside of the screen)
#include <SPI.h>
#include <SdFat.h>
#include <UTFT_SdRaw.h> // SdFat lib from here :https://github.com/greiman/SdFat/archive/master.zip
#define SD_CHIP_SELECT  53 
SdFat sd;
UTFT_SdRaw myFiles(&myGLCD);

//==== Defining Fonts
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

char currentPage;
int x, y; // Variables for the coordinates where the display has been pressed

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

  //TIME CLOCK RTC
         if (! rtc.begin()) {
          Serial.println("Couldn't find RTC");
          while (1);  }
        if (rtc.lostPower()) {
          Serial.println("RTC lost power, lets set the time!");
          // following line sets the RTC to the date & time this sketch was compiled
          rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
          // This line sets the RTC with an explicit date & time, for example to set
          // January 21, 2014 at 3am you would call:
          // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
          }
 
 //SD card initilisation
      Serial.println(F("Initialising SD card..."));
      bool mysd = 0;
      // see if the card is present and can be initialized:
      while (!mysd)
      {
        if (!sd.begin(SD_CHIP_SELECT, SPI_FULL_SPEED)) {
          Serial.println(F("Card failed, or not present"));
          Serial.println(F("Retrying...."));
        }
        else
        {
          mysd = 1;
          Serial.println(F("Card initialised."));
        }
      }
  //Screen initialization
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myTouch.InitTouch();
  myTouch.setPrecision(PREC_MEDIUM);
  myGLCD.fillScr(0,0,0);
  drawHomeScreen();  // Draws the Home Screen
  //drawPHscreen();
  //drawLightscreen();
  //drawTemperaturescreen();
 currentPage = 0; // Indicates that we are at Home Screen
 //drawpHSensorCalibrationscreen ();


//WaterTemperature
  sensors.begin();

  //pH
    pinMode(PumppHup, OUTPUT);
    pinMode(PumppHdown, OUTPUT);
    pinMode(pHPin, INPUT);

    pinMode(relayLight, OUTPUT);
    pinMode(relayHeating, OUTPUT);
    pinMode(waterlevelsensor1, INPUT);
    pinMode(waterlevelsensor2, INPUT);

    Lastmillis = millis();

    //All relays disactivated (= HIGH output)
    digitalWrite(relayLight, HIGH);
    digitalWrite(relayHeating, HIGH);
    digitalWrite(PumppHup, HIGH);
    digitalWrite(PumppHdown, HIGH);
 
}
 

void loop() {
   Serial.println("Current page is");
   Serial.println(currentPage);

   Serial.println("=================================");

// TIME CLOCK RTC
    DateTime now = rtc.now();
   
      Serial.println("We are the date of");
      Serial.print(now.year(), DEC);
      Serial.print('/');
      Serial.print(now.month(), DEC);
      Serial.print('/');
      Serial.print(now.day(), DEC);
      Serial.print(" (");
      Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
      Serial.println(") ");
      Serial.print("Time is   ");
      Serial.print(now.hour(), DEC);
      Serial.print(':');
      Serial.print(now.minute(), DEC);
      Serial.print(':');
      Serial.print(now.second(), DEC);
      Serial.println();
     
      dateday= now.day();//used for the display
      datemonth=now.month();
      dateyear=now.year();
      timeminute=now.minute();
      timehour=now.hour();


// LIGHT CONTROL
if (timehour >=LightOn && timehour <LightOff)
  {
    Serial.println("Time to turn ON the light ");
  digitalWrite(relayLight, LOW); // LightOn
  }
  else
  {
    digitalWrite(relayLight, HIGH); //LightOff
  Serial.println("Time to turn OFF the light !");
  }
 
 
   
 

bogtus

2ème partie :

Code: [Select]
// TEMPERATURE ET HUMIDITE AIR

 
      Serial.println("Sample DHT11..."); // T° et humidité air
      
          // read with raw sample data.
          byte temperature = 0;
          byte humidity = 0;
          byte data[40] = {0};
          if (dht11.read(pinDHT11, &temperature, &humidity, data)) { // cas erreur lecture humidité et T°
          Serial.print("Read DHT11 failed");
          
          }
          
          else
          {
            Serial.print("Sample RAW Bits: ");
            for (int i = 0; i < 40; i++) {  // code source capteur pour calculer
            Serial.print((int)data[i]);
             if (i > 0 && ((i + 1) % 4) == 0) {
              Serial.print(' ');
                    }
                 }
                Serial.println("");
                Serial.print("Sample OK: ");
                Serial.print((int)temperature); Serial.print(" *C, ");
                Serial.print((int)humidity); Serial.println(" %");
                AirTemperature = ((int)temperature);
                AirHumidity = ((int)humidity);


                if (AirTemperature < AirTempmin)
                {
                  digitalWrite(relayHeating,LOW);}// activates the heating system
                  else if (AirTemperature> (AirTempmin + 2)) {digitalWrite(relayHeating,HIGH);}//hysterisis de + de 2°C
          }
          
      // DHT11 sampling rate is 1HZ.
     // delay(1000);


//pH calcul
               /*taking 10 samples of the analogue input A0, ordering them and discarding the highest and the lowest
            and calculating the mean with the six remaining samples by converting this value to voltage in the variable pHVol,
            then using the equation that we have calculated with the pH reference values we convert pHVol to pHValue and send
            it to the serial port to see it in the serial monitor.*/
         for(int i=0;i<10;i++)
         {
          buf[i]=analogRead(pHPin);
          delay(10);
          pHanalog=analogRead(pHPin);
         }
         for(int i=0;i<9;i++)
         {
          for(int j=i+1;j<10;j++)
          {
           if(buf[i]>buf[j])
           {
            temp=buf[i];
            buf[i]=buf[j];
            buf[j]=temp;
           }
          }
         }
         avgValue=0;
         for(int i=2;i<8;i++)
         avgValue+=buf[i];
         float pHVol=(float)avgValue/6;
        // float pHValue = -5.70 * pHVol + 21.34;  calibration
         pHValue = ((pHVol*pHSlope)+pHOffset); // Find the real pH based on calibration values
         Serial.print("\tPH: ");
         Serial.println(pHValue,1);
         Serial.print("analogRead pH sensor is  ");
         Serial.println(pHanalog);
//pH Pumps
 if ( pHValue >= pHmin && pHValue <= pHmax)
            {
              Serial.println("pH respecting setpoints");
            }


else
        {
             Currentmillis = millis();
            
            if(Currentmillis - Lastmillis >= pHperiod)
            {
              Serial.println("Periode pH ok");
              if (pHValue <0)
               {
                Serial.println("reading pH value Error");
                }
          
                else
                {
                      if (pHValue > pHmax)
                      {
                        digitalWrite(PumppHdown, LOW);// loop PUMP on for x time ALSO INVERSED RELAY -> LOW;
                        Serial.println("Pompe pH down activée");
                        delay(PumpTime);
                        digitalWrite(PumppHdown, HIGH);
                        Serial.println("Pompe pH down désactivée après");
                        Serial.print(PumpTime);
                        Serial.print("s");
                        Lastmillis=millis(); // enregistrer le dernier dosage time
                      }
                      else if (pHValue < pHmin)
                      {
                        digitalWrite(PumppHup, LOW);// loop PUMP on for x time ;
                        Serial.println("Pompe pH UP actived");
                        delay(PumpTime);
                        digitalWrite(PumppHup, HIGH);
                        Serial.println("Pompe pH UP desactived");
                        Lastmillis=millis(); // enregistrer le dernier dosage time
                        
                      }
      }
      }
  
  else {
    Serial.println("Period pH NOK");
    }
    }

  // Water Temperature


       Serial.print(" Requesting temperatures...");
       sensors.requestTemperatures(); // Send the command to get temperature readings
       Serial.println("DONE");
      /********************************************************************/
       Serial.print("Temperature of the Water is: ");
       Serial.println(sensors.getTempCByIndex(0)); //  
         // You can have more than one DS18B20 on the same bus.  
         // 0 refers to the first IC on the wire
         WaterTemp = sensors.getTempCByIndex(0);
         Serial.print("T =");
         Serial.println(WaterTemp,1);


    //Water level

    if (analogRead(waterlevelsensor2) < 500)
    {
    Serial.println("Tank level above 75%");
    Serial.print("water level sensor n°2 has digital read of");
    Serial.println(waterlevelsensor2);
    tanklevel = 75;
    }

    else
    {
      if (analogRead(waterlevelsensor1) > 500)
      {
        Serial.println("Tank level between 50 and 75%");
        Serial.print("water level sensor n°1 has digital read of");
        Serial.println(waterlevelsensor1);
        tanklevel = 50;
      }
      else
      {
        Serial.println("ATTENTION : Tank level below 50% !!!");
        tanklevel = 25;
      }
     }

////////REFRESH SCREENS FUNCTIONS///

if (currentPage == 0) {    
               refreshHomescreen ();
               }

if (currentPage == 10) {  //Light Screen
              drawRefreshLightscreen(); }

if (currentPage == 30) {  //Humidity Screen
              drawRefreshHumidityscreen();  }

if (currentPage == 41) {  //pH Screen
              drawRefreshPHscreen(); }

if (currentPage == 42) {  //pH Sensor Calibration
              drawRefreshpHSensorCalibrationscreen (); }
                        
   // delay(1000);
   //refreshHomescreen();
    
    

/////////////////////////////////////////////////////////////LOOP SCREEN TOUCH FUNCTIONS//////////////////////////////////////////////////////////////
  if (myTouch.dataAvailable())
    {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();  
           if (currentPage == 0) {    
               refreshHomescreen ();
      
              // If we press the Back Button
             /* if ((x>=10) && (x<=60) &&(y>=10) && (y<=36))
              {
                currentPage = '0'; // Indicates we are at home screen
                myGLCD.clrScr();
                drawHomeScreen(); // Draws the home screen
              }*/
                  if ((x>=10) && (x<=100) &&(y>=30) && (y<=100)) //Go to Temperature Screen
                          {
                            
                            myGLCD.clrScr();
                            NewLightOn = LightOn;
                            NewLightOff = LightOff;
                            drawTemperaturescreen ();
                            currentPage = 20; //
                          }
                  
      

bogtus

#18
May 16, 2020, 11:30 am Last Edit: May 16, 2020, 11:33 am by bogtus
3eme partie :

Code: [Select]

     
                  if ((x>=110) && (x<=200) &&(y>=30) && (y<=100)) //Go to Light Screen
                  {
                   
                    myGLCD.clrScr();
                    NewLightOn = LightOn;
                    NewLightOff = LightOff;
                    drawLightscreen();
                    currentPage = 10; //
                  }

                  if ((x>=220) && (x<=320) &&(y>=30) && (y<=100)) //Go to pH &EC Screen
                  {
                   
                    myGLCD.clrScr();
                    drawPHandECscreen();
                    currentPage = 40; //
                  }

                 if ((x>=110) && (x<=200) &&(y>=110) && (y<=230)) //Go to Humidity Screen
                  {
                   
                    myGLCD.clrScr();
                    NewHumidityMin = HumidityMin;
                    NewHumidityMax = HumidityMax;
                    drawHumidityscreen();
                    currentPage = 30; //
                  }
            }

     
            if (currentPage == 10) {  //Light Screen
              drawRefreshLightscreen(); 
                    if ((x>=60) && (x<=90) &&(y>=60) && (y<=90)) {
                        NewLightOn+=1; //
                      }
                    if ((x>=60) && (x<=90) &&(y>=200) && (y<=230)) {
                        NewLightOn-=1; //
                      }
                    if ((x>=220) && (x<=250) &&(y>=60) && (y<=90)) {
                        NewLightOff+=1; //
                      }
                    if ((x>=220) && (x<=250) &&(y>=200) && (y<=230)) {
                        NewLightOff-=1; // Draws the home screen
                      }
                    if ((x>=280) && (x<=320) &&(y>=10) && (y<=30)) { // SAVE
                        LightOn=NewLightOn;
                        LightOff=NewLightOff;
                        myGLCD.setColor(255,255,255);
                        myGLCD.setFont(SmallFont);
                        myGLCD.print("SAVED!",270,40);
                      }
                            // If we press the Home Button
                    if ((x>=270) && (x<=320) &&(y>=200) && (y<=240)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
                         
              }
            if (currentPage == 20) {  //Temperature Screen
              //drawRefreshLightscreen(); 
                   
                    if ((x>=280) && (x<=320) &&(y>=10) && (y<=30)) { // SAVE
                        LightOn=NewLightOn;
                        LightOff=NewLightOff;
                        myGLCD.setColor(255,255,255);
                        myGLCD.setFont(SmallFont);
                        myGLCD.print("SAVED!",270,40);
                      }
                            // If we press the Home Button
                    if ((x>=270) && (x<=320) &&(y>=200) && (y<=240)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
                         
              }

            if (currentPage == 30) {  //Humidity Screen
              drawRefreshHumidityscreen(); 
                        if ((x>=20) && (x<=50) &&(y>=60) && (y<=100)) {
                        NewHumidityMin+=1; //
                      }
                    if ((x>=20) && (x<=50) &&(y>=200) && (y<=240)) {
                        NewHumidityMin-=1; //
                      }
                    if ((x>=110) && (x<=150) &&(y>=60) && (y<=100)) {
                        NewHumidityMax+=1; //
                      }
                    if ((x>=110) && (x<=150) &&(y>=200) && (y<=240)) {
                        NewHumidityMax-=1; // Draws the home screen
                      }
                    if ((x>=280) && (x<=320) &&(y>=10) && (y<=40)) { // SAVE
                        HumidityMin=NewHumidityMin;
                        HumidityMax=NewHumidityMax;
                        myGLCD.setColor(255,255,255);
                        myGLCD.setFont(SmallFont);
                        myGLCD.print("SAVED!",270,40);
                      }
                            // If we press the Home Button
                    if ((x>=270) && (x<=320) &&(y>=200) && (y<=240)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
                     
                         
              }

            if (currentPage == 40) { //drawPHandECscreen

                  if ((x>=80) && (x<=130) &&(y>=110) && (y<=150)) //Go to PH Screen
                      {
                       
                        myGLCD.clrScr();
                        NewpHmin = pHmin;
                        NewpHmax= pHmax;
                        drawPHscreen();
                        currentPage = 41; //
                      }

                   /*if ((x>=220) && (x<=320) &&(y>=30) && (y<=100)) //Go to EC Screen
                      {
                       
                        myGLCD.clrScr();
                        NewpHmin = pHmin;
                        NewpHmax= pHmax;
                        drawECscreen();
                        currentPage = 51; //
                      }*/
                      // If we press the Home Button
                    if ((x>=270) && (x<=320) &&(y>=200) && (y<=240)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
               
             
            }

          if (currentPage == 41) {  //pH Screen
              drawRefreshPHscreen(); 
                        if ((x>=20) && (x<=50) &&(y>=60) && (y<=100)) {
                        NewpHmin+=0.1; //
                      }
                    if ((x>=20) && (x<=50) &&(y>=200) && (y<=240)) {
                        NewpHmin-=0.1; //
                      }
                    if ((x>=110) && (x<=150) &&(y>=60) && (y<=100)) {
                        NewpHmax+=0.1; //
                      }
                    if ((x>=110) && (x<=150) &&(y>=200) && (y<=240)) {
                        NewpHmax-=0.1; // Draws the home screen
                      }
                    if ((x>=280) && (x<=320) &&(y>=10) && (y<=40)) { // SAVE
                        pHmin=NewpHmin;
                        pHmax=NewpHmax;
                        myGLCD.setColor(255,255,255);
                        myGLCD.setFont(SmallFont);
                        myGLCD.print("SAVED!",270,40);
                      }
                            // If we press the Home Button
                    if ((x>=270) && (x<=320) &&(y>=200) && (y<=240)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
                             // If we press pH sensor calibration button
                    if ((x>=200) && (x<=300) &&(y>=70) && (y<=130)) {
                      currentPage = 42; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawpHSensorCalibrationscreen ();
                      pH2Real= 7;
                      pH1Real=7;
                      }

                             // If we press pH pumps calibration button
                    if ((x>=200) && (x<=300) &&(y>=140) && (y<=200)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
                         
              }

 

 
Vous verrez qu'ici je n'ai pas encore réalisé l'écran pH Pump calibration (il renvoie en Home Screen) qui vise à définir le temps de pompage pour chaque activation des pompes, et le délai entre 2 activations.
Ces 2 valeurs sont déjà initialement paramétrées et modifiable au tout début du code. Ici c'est juste pour les rendre modifiable par un utilisateur externe par l'écran de navigation

bogtus

#19
May 16, 2020, 11:35 am Last Edit: May 16, 2020, 11:37 am by bogtus
4ème partie: principalement les fonctions pour dessiner les différentes pages de navigation sur l'écran

Code: [Select]

            if (currentPage == 42) {  //pH Sensor Calibration
              drawRefreshpHSensorCalibrationscreen (); 
                               
                        if ((x>=90) && (x<=110) &&(y>=70) && (y<=85)) {
                        pH1Real+=0.1; //
                      }
                    if ((x>=90) && (x<=110) &&(y>=130) && (y<=145)) {
                        pH1Real-=0.1; //
                      }
                    if ((x>=175) && (x<=195) &&(y>=70) && (y<=85)) {
                        pH2Real+=0.1; //
                      }
                    if ((x>=175) && (x<=195) &&(y>=130) && (y<=145)) {
                        pH2Real-=0.1;
                      }
                    if ((x>=80) && (x<=120) &&(y>=200) && (y<=230)) { // Read pH Analog 1
                       pH1Read ();
                      }
                            // If we press the Read Button
                    if ((x>=165) && (x<=205) &&(y>=200) && (y<=230)) {
                      pH2Read ();
                      }
                             // If we press pH sensor calibration button
                    if ((x>=235) && (x<=315) &&(y>=90) && (y<=120)) {
                      pHSensorCalibration ();
                      }

                             // If we press Home button
                    if ((x>=270) && (x<=320) &&(y>=200) && (y<=240)) {
                      currentPage = 0; // Indicates we are at home screen
                      myGLCD.clrScr();
                      drawHomeScreen(); // Draws the home screen
                      }
                         
              }


      }

}
 

/////////////////////////////////////////DRAW SCREEN FUNCTIONS//////////////////////////////////////////////////////////////////////////////////
void drawHomeScreen() {
              //
              myGLCD.fillScr(0,0,0); //black backgroung color   
              myGLCD.setBackColor(0, 0, 0); // Sets the background color of the area where the text will be printed to black
                           
              //quadrillage
                myGLCD.setColor(0, 172, 51); // Sets color to green & blue
                myGLCD.fillRoundRect(3,3,317,22);
                myGLCD.drawRect(1,1,319,239);
                myGLCD.drawLine(108,22,108,240); // Draws the line (x1,y1 ,x2, y2)
                myGLCD.drawLine(214,22,214,240);
                myGLCD.drawLine(10,129,310,129);
                myGLCD.drawLine(10,131,310,131);

               //Title
                myGLCD.setBackColor(0, 172, 51);
                myGLCD.setColor(255, 255, 255);
                myGLCD.setFont(SmallFont);
                myGLCD.print("Hydroponics   controller", 65, 3);
                myGLCD.setBackColor(0, 0, 0);
           
                //1er quadrant Temperature
                  // + intégrer image Thermometre
                myGLCD.setColor(255,255,255); // Sets color to white
                myGLCD.setFont(SmallFont); // Sets the font to small
               //myGLCD.print("Temperature", 10, 30);
                myFiles.load(10,50,36,60,"thermom.raw", 1);
                myGLCD.print("Air:", 60, 30);
                //myGLCD.print("15", 70, 50);
                myGLCD.printNumI(AirTemperature, 70, 50);
                myGLCD.print("o", 88, 45);
                myGLCD.print("C", 96, 50);
                myGLCD.setColor(255,255,255);
                myGLCD.print("Water:",60, 70);
                //myGLCD.print("21", 70, 90);
                myGLCD.printNumF(WaterTemp,1,50,90);
                myGLCD.print("o", 88, 85);
                myGLCD.print("C", 96, 90);
                myGLCD.drawCircle(95, 115, 5); //entourer le cercle de blanc
                myGLCD.setColor(0,255,0);// témoin vert & remplir le cercle
                myGLCD.fillCircle(95, 115, 4);
               
           
              //2eme quadrant Light
                 // + intégrer image goutte eau via SDcard max 60x70
              myGLCD.setColor(255,255,255); // Sets color to white
              myGLCD.setFont(SmallFont);
              myGLCD.print("LIGHT", 140, 30);// Sets the font to small
              if (timehour >=LightOn && timehour <LightOff) //draw moon or sun if LIGHT ON or OFF
                    {
                     myFiles.load(140,50,40,40,"sunbis.raw", 1);
                    }
                    else
                    {
                     myFiles.load(140,50,40,40,"moon40x40.raw", 1);
                    }
              myGLCD.printNumI(LightOn,112,100);
              myGLCD.print(":00 - ", 126, 100);
              myGLCD.printNumI(LightOff,171,100);
              myGLCD.print(":00", 185, 100);

         
               //3eme quadrant pH & Electro-conductivity
                 // + intégrer image soleil via SDcard
                  myGLCD.setColor(255,255,255); // Sets color to white
                  myGLCD.setFont(SmallFont);
                  myFiles.load(220,25,40,37,"eprouvett.raw", 1);
                  myGLCD.print("PH", 260, 40);
                  //myGLCD.print("6.7", 260, 60);
                  myGLCD.printNumF(pHValue,1,260,60);
                  myGLCD.drawCircle(310, 65, 5);
                     //diode témoin pH ; SP respectée (VERT) ou non (Orange si correction en cours, Rouge sinon)
                    if(pHValue <= pHmax && pHValue >= pHmin)
                    {                   myGLCD.setColor(0, 255, 0);// setpoint : témoin vert & remplir le cercle
                                        myGLCD.fillCircle(310, 65, 4);}
                                       
                    else {             
                                        if(Currentmillis - Lastmillis < pHperiod) { //indicates that the pump was working trying to correct pH
                                        myGLCD.setColor(150, 255, 0); // correction témoin : orange car correction pH en cours
                                        myGLCD.fillCircle(310, 65, 4);}
                                        else {myGLCD.setColor(250, 150, 0); // correction témoin : rouge car aucune correction pH en cours
                                              myGLCD.fillCircle(310, 65, 4);}
                                          }

                  myGLCD.setColor(255, 255, 255);
                  myGLCD.print("EC", 260, 90);
                  myGLCD.print("1.2 mS", 250, 110);
                  myGLCD.drawCircle(310, 115, 5);
                  myGLCD.setColor(0, 255, 0);// setpoint : témoin vert & remplir le cercle
                  myGLCD.fillCircle(310, 115, 4);
                  myFiles.load(220,65,40,37,"eprouvetteblue.raw", 1);
                 


                  //4eme quadrant CLOCK
                 // + intégrer image horloge via SDcard
                  myGLCD.setColor(255,255,255); // Sets color to white
                  myGLCD.setFont(SmallFont);
                  //myGLCD.print("TIME", 240, 140).
                  myFiles.load(250,140,30,30,"clock.raw", 1);
                  myGLCD.printNumI(timehour ,240,170); //display time
                  myGLCD.print(":", 261, 170);
                  myGLCD.printNumI(timeminute,269,170);
                  myGLCD.printNumI(dateday,230,190);//display date
                  myGLCD.print("/", 246, 190);
                  myGLCD.printNumI(datemonth,254,190);
                  myGLCD.print("/", 270, 190);
                  myGLCD.printNumI(dateyear,278,190);


                //5eme quadrant Humidity
                                     
                    myGLCD.setColor(255,255,255); // Sets color to white
                    myGLCD.setFont(SmallFont);
                    myGLCD.print("Humidity", 130, 140);// Sets the font to small
                    myGLCD.printNumI(AirHumidity,160,180);
                    myFiles.load(110,160,35,35,"hydropo.raw", 1);
                    myGLCD.print("%", 185, 180);
                    //diode témoin 1 ; SP respectée ou non
                    myGLCD.drawCircle(200, 185, 5); //entourer le cercle de blanc
                    if (AirHumidity>=HumidityMin && AirHumidity<= HumidityMax)
                    {
                    myGLCD.setColor(0, 250, 0);// témoin vert & remplir le cercle
                    myGLCD.fillCircle(200, 185, 4);
                    }
                    else {
                    myGLCD.setColor(255, 0, 0);// témoin rouge & remplir le cercle
                    myGLCD.fillCircle(200, 185, 4);
                                          }

                     


bogtus

5 ème partie

Code: [Select]

                    

                    //7eme quadrant Water Level
                 // + intégrer image éprouvette via SDcard
                    myGLCD.setColor(255,255,255); // Sets color to white
                    myGLCD.setFont(SmallFont);
                    myGLCD.print("TANK", 40, 140);
                    myGLCD.print("Water level", 10, 150);
                    myFiles.load(10,170,30,55,"watertank30x55.raw", 1);
                    myGLCD.printNumI(tanklevel,60,190);
                    myGLCD.print("%", 80, 190);
                    // rectangle éprouvette
  
                   //diode témoin 1 ; SP respectée ou non
                 /*   myGLCD.setColor(255,255,255);
                    myGLCD.print("75%", 60, 250);
                    myGLCD.drawCircle(90, 255, 5); //entourer le cercle de blanc
                    myGLCD.print("50%", 60, 280);
                    myGLCD.drawCircle(90, 285, 5); //entourer le cercle de blanc
                    if( tanklevel == 75) {
                    myGLCD.setColor(190, 70, 175);// témoin vert & remplir le cercle
                    myGLCD.fillCircle(460, 255, 4);//témoin 75% vert
                    myGLCD.fillCircle(460, 285, 4);// témoin 50% vert
                      
                    }
                    else if (tanklevel == 50) {
                    myGLCD.setColor(0,0, 0);//
                    myGLCD.fillCircle(460, 255, 4);//témoin 75% noir
                    myGLCD.setColor(190, 70, 175);
                    myGLCD.fillCircle(460, 285, 4);// témoin 50% vert
                      
                    }
                    else
                    {
                    myGLCD.setColor(0,0, 0);//
                    myGLCD.fillCircle(460, 255, 4);//témoin 75% noir
                    myGLCD.setColor(0, 220, 225);
                    myGLCD.fillCircle(460, 285, 4);// témoin 50% rouge
                      
                    }
  */
                                                        
                                            
                
               }
              
 void refreshHomescreen () {
                myGLCD.setBackColor(0,0, 0);
                myGLCD.setColor(255,255,255); // Sets color to white
                myGLCD.setFont(SmallFont); // Sets the font to small
                myGLCD.printNumI(AirTemperature, 70, 50);
                myGLCD.printNumF(WaterTemp,1,50,90);
                myGLCD.printNumI(AirHumidity,160,180);
                myGLCD.printNumI(timehour ,240,170); //display time
                myGLCD.print(":", 261, 170);
                myGLCD.printNumI(timeminute,269,170);
                myGLCD.printNumI(dateday,230,190);//display date
                myGLCD.printNumI(datemonth,254,190);
                myGLCD.printNumI(dateyear,278,190);
                myGLCD.printNumF(pHValue,1,260,60);
                myGLCD.printNumI(tanklevel,60,190);
                //ajouter refresh EC
                //ajouter refresh diode témoin
                    if(pHValue <= pHmax && pHValue >= pHmin)
                    {                   myGLCD.setColor(0, 255, 0);// setpoint : témoin vert & remplir le cercle
                                        myGLCD.fillCircle(310, 65, 4);}
                                        
                    else {              
                                        if(Currentmillis - Lastmillis < pHperiod) { //indicates that the pump was working trying to correct pH
                                        myGLCD.setColor(0, 255, 0); // correction témoin : vert car correction pH en cours
                                        myGLCD.fillCircle(310, 65, 4);}
                                        else {myGLCD.setColor(250, 150, 0); // correction témoin : rouge car aucune correction pH en cours
                                              myGLCD.fillCircle(310, 65, 4);}
                                          }

                   if (timehour >=LightOn && timehour <LightOff) //draw moon or sun if LIGHT ON or OFF
                    {
                     myFiles.load(140,50,40,40,"sunbis.raw", 1);
                    }
                    else
                    {
                     myFiles.load(140,50,40,40,"moon40x40.raw", 1);
                    }
                 /*if( tanklevel == 75) {
                    myGLCD.setColor(190, 70, 175);// témoin vert & remplir le cercle
                    myGLCD.fillCircle(460, 255, 4);//témoin 75% vert
                    myGLCD.fillCircle(460, 285, 4);// témoin 50% vert
                      
                    }
                    else if (tanklevel == 50) {
                    myGLCD.setColor(255,255, 255);//
                    myGLCD.fillCircle(460, 255, 4);//témoin 75% noir
                    myGLCD.setColor(190, 70, 175);
                    myGLCD.fillCircle(460, 285, 4);// témoin 50% vert
                      
                    }
                    else
                    {
                    myGLCD.setColor(255,255, 255);//
                    myGLCD.fillCircle(460, 255, 4);//témoin 75% noir
                    myGLCD.setColor(0, 220, 225);
                    myGLCD.fillCircle(460, 285, 4);// témoin 50% rouge
                      
                    }*/
                    
                    if (AirHumidity>=HumidityMin && AirHumidity<= HumidityMax)
                    {
                    myGLCD.setColor(0, 250, 0);// témoin vert & remplir le cercle
                    myGLCD.fillCircle(200, 185, 4);
                    }
                    else {
                    myGLCD.setColor(255, 0, 0);// témoin rouge & remplir le cercle
                    myGLCD.fillCircle(200, 185, 4);
                                          }
 }

 void drawLightscreen () {

                  //image soleil du coté ON et moon coté OFF, heure ON avec + ou -, heure OFF avec + ou -

                  // COTE LIGHT ON
                  myGLCD.setBackColor(0, 0, 0);
                  myGLCD.setFont(SmallFont);
                  myGLCD.setColor(255,255,0);// Yellow
                  myGLCD.print("SCHEDULE OF LIGHT", 90, 10);
                  myGLCD.setColor(255,255,255);
                  myGLCD.print("FROM", 10,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(60,70,90,80);// faire une forme de +
                  myGLCD.fillRect(70,60,80,90) ;
                  myGLCD.drawCircle (75,75,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(60,210,90,220) ; // faire une forme de -
                  myGLCD.drawCircle (75,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(10,110,150,180);
                  myGLCD.setFont(SevenSegNumFont);//numéro 32x50 pixels
                  myGLCD.printNumI(LightOn, 5, 120);
                  myGLCD.setFont(BigFont);
                  myGLCD.print("h", 68, 120);
                  myGLCD.setFont(SevenSegNumFont);
                  myGLCD.print("00", 82, 120);

                  //lignes de séparation ON/OFF
                  myGLCD.setColor(0, 172, 51);
                  myGLCD.drawLine(158,60,158,310);
                  myGLCD.drawLine(162,60,162,310);

                  // Light OFF
                  myGLCD.setColor(255,255,255);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("TO", 170,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(220,70,250,80);// faire une forme de +
                  myGLCD.fillRect(230,60,240,90) ;
                  myGLCD.drawCircle (235,75,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(220,210,250,220) ; // faire une forme de -
                  myGLCD.drawCircle (235,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(170,110,310,180);
                  myGLCD.setFont(SevenSegNumFont);//numéro 32x50 pixels
                  myGLCD.printNumI(LightOff,165,120);
                  myGLCD.setFont(BigFont);
                  myGLCD.print("h", 228, 120);
                  myGLCD.setFont(SevenSegNumFont);
                  myGLCD.print("00", 242, 120);

                  myGLCD.setFont(SmallFont);
                  myGLCD.print("SAVE",280,10);
                  //myGLCD.print("HOME",280,210);
                  myFiles.load(270,195,40,40,"home.raw", 1);

    }

  void drawRefreshLightscreen() {

    myGLCD.setFont(SevenSegNumFont);
    myGLCD.setColor(255,255,255);
    myGLCD.printNumI(NewLightOn, 5, 120);
    myGLCD.printNumI(NewLightOff, 165, 120);

  }



                  
 

bogtus

6ème partie - toujours pour dessiner et remettre à jour automatiquement les différents écrans de navigation

Code: [Select]



      void drawHumidityscreen () {
 
                     // COTE Humidity min
                    myGLCD.setBackColor(0, 0, 0);
                    myGLCD.setFont(BigFont);
                    myGLCD.setColor(255,255,0);// Yellow
                    myGLCD.print("Humidity setpoint", 10, 10);
                    myGLCD.setFont(SmallFont);
                    myGLCD.print("MIN.", 10,50);
                    myGLCD.setColor(0,255,0);// Green
                    myGLCD.fillRect(20,80,50,90);// faire une forme de +
                    myGLCD.fillRect(30,70,40,100) ;
                    myGLCD.drawCircle (35,85,20);
                    myGLCD.setColor(255,0,0);
                    myGLCD.fillRect(20,210,50,220) ; // faire une forme de -
                    myGLCD.drawCircle (35,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(9,130,60,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumI(NewHumidityMin,10,140);
                 
                  //lignes de séparation min/max
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(80,60,80,310);


                  //lignes de séparation pH setpoint/parameters
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(178,60,178,310);
                  myGLCD.drawLine(182,60,182,310);
                  // Humidity MAX
                  myGLCD.setColor(255,255,0);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MAX.",95,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(110,80,140,90);// faire une forme de +
                  myGLCD.fillRect(120,70,130,100) ;
                  myGLCD.drawCircle (125,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(110,210,140,220) ; // faire une forme de -
                  myGLCD.drawCircle (125,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(100,130,150,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumI(NewHumidityMax,101,140);

                 myGLCD.setFont(SmallFont);
                 myGLCD.print("Humidifier:",200,60);
                 myGLCD.print("Pin 12",220,80);
                 //myGLCD.printI(,240,60);
                 myGLCD.print("Extractor:",200,110);
                 myGLCD.print("Pin 14",220,130);   
                 //myGLCD.printI(,210,80);   
                 myGLCD.print("Hysterisis : ",200,160);
                 myGLCD.print("2%",240,180);             

                  myGLCD.setFont(SmallFont);
                  myGLCD.print("SAVE",280,20);
                  //myGLCD.print("HOME",280,220);
                  myFiles.load(270,195,40,40,"home.raw", 1);

                   
           
                 
   
  }

  void drawRefreshHumidityscreen () {
    myGLCD.setColor(255,255,255);
    myGLCD.setFont(BigFont);//numéro 32x50 pixels
    myGLCD.printNumI(NewHumidityMax,101,140);
    myGLCD.printNumI(NewHumidityMin,10,140);
   
  }

  void drawPHandECscreen(){
                //Title
                myGLCD.setColor(0, 172, 51); // Sets color to green & blue
                myGLCD.fillRoundRect(3,3,317,22);
                myGLCD.drawRect(1,1,319,239);
                myGLCD.setBackColor(0, 172, 51);
                myGLCD.setColor(255, 255, 255);
                myGLCD.setFont(SmallFont);
                myGLCD.print("Hydroponics   controller", 65, 3);
                myGLCD.setBackColor(0, 0, 0);
                //settings
                myGLCD.setFont(BigFont);
                myGLCD.print("settings", 10, 60);
               
                // Button pH
                myGLCD.setColor(0,150,200);
                myGLCD.fillRoundRect(60,100,130,160);
                myGLCD.setColor(255,255,255);
                myGLCD.drawRoundRect(60,100,130,160);
                myGLCD.setBackColor(0,150,200);
                myGLCD.setFont(BigFont);
                myGLCD.print("pH", 65,125);
               

                //Button EC
                myGLCD.setColor(0,150,200);
                myGLCD.fillRoundRect(190,100,260,160);
                myGLCD.setColor(255,255,255);
                myGLCD.drawRoundRect(190,100,260,160);
                myGLCD.setBackColor(0,150,200);
                myGLCD.print("EC", 195,125);                 

                //Button Home
                myGLCD.setFont(SmallFont);
                myGLCD.setBackColor(0,0,0);
                //myGLCD.print("HOME",280,220);
                myFiles.load(270,195,40,40,"home.raw", 1);

   
  }

  void drawPHscreen () {

                   // COTE pH min
                  myGLCD.setBackColor(0, 0, 0);
                  myGLCD.setFont(BigFont);
                  myGLCD.setColor(255,255,0);// Yellow
                  myGLCD.print("PH setpoint", 10, 10);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MIN.", 10,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(20,80,50,90);// faire une forme de +
                  myGLCD.fillRect(30,70,40,100) ;
                  myGLCD.drawCircle (35,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(20,210,50,220) ; // faire une forme de -
                  myGLCD.drawCircle (35,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(9,130,60,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumF(pHmin,1,10,140);
                 
                  //lignes de séparation min/max
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(80,60,80,310);


                  //lignes de séparation pH setpoint/parameters
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(178,60,178,310);
                  myGLCD.drawLine(182,60,182,310);
                  // pH MAX
                  myGLCD.setColor(255,255,0);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MAX.",95,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(110,80,140,90);// faire une forme de +
                  myGLCD.fillRect(120,70,130,100) ;
                  myGLCD.drawCircle (125,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(110,210,140,220) ; // faire une forme de -
                  myGLCD.drawCircle (125,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(100,130,150,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumF(pHmax,1,101,140);
                                   

                  myGLCD.setFont(SmallFont);
                  myGLCD.print("SAVE",280,20);
                  //myGLCD.print("HOME",280,220);
                  myFiles.load(270,195,40,40,"home.raw", 1);

                   // Button for pH sensor calibration
                  myGLCD.setColor(0,50,200);
                  myGLCD.setBackColor(0,50,200);
                  myGLCD.fillRoundRect(202,82,298,123) ;
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(202,82,298,123);
                  myGLCD.print("pH sensor ",210,90);
                  myGLCD.print("calibration",205,110);

                  myGLCD.setColor(255,255,255);  // button for pH pumps calibration
                  myGLCD.setColor(0,50,200);
                  myGLCD.setBackColor(0,50,200);
                  myGLCD.fillRoundRect(202,152,298,193) ;
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(202,152,298,193) ;
                  myGLCD.print("pH pumps ",210,160);
                  myGLCD.print("calibration",205,180);
                  myGLCD.setBackColor(0, 0, 0);//retour au fond d'écriture black

           
                 
   
  }

bogtus

Dernière partie :

Code: [Select]

  void drawRefreshPHscreen () {

                 
                  myGLCD.setColor(255,255,255);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumF(NewpHmin,1,10,140);
                  myGLCD.printNumF(NewpHmax,1,101,140);
  }


void drawTemperaturescreen () {

                   // Air Temperature
                  myGLCD.setBackColor(0, 0, 0);
                  myGLCD.setFont(BigFont);
                  myGLCD.setColor(255,255,0);// Yellow
                  myGLCD.print("Temperature setpoint", 0, 10);
                  myGLCD.print("Air", 40, 30);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MIN.", 10,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(20,80,50,90);// faire une forme de +
                  myGLCD.fillRect(30,70,40,100) ;
                  myGLCD.drawCircle (35,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(20,210,50,220) ; // faire une forme de -
                  myGLCD.drawCircle (35,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(9,130,60,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumI("10",10,140);
                  //lignes de séparation min/max
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(80,60,80,310);

                  myGLCD.setColor(255,255,0);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MAX.",95,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(110,80,140,90);// faire une forme de +
                  myGLCD.fillRect(120,70,130,100) ;
                  myGLCD.drawCircle (125,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(110,210,140,220) ; // faire une forme de -
                  myGLCD.drawCircle (125,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(100,130,150,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumI("20",101,140);

                  //lignes de séparation Air Temp / Water Temp
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(158,60,158,310);
                  myGLCD.drawLine(162,60,162,310);

                  // Water Temperature
                  myGLCD.setBackColor(0, 0, 0);
                  myGLCD.setFont(BigFont);
                  myGLCD.setColor(255,255,0);// Yellow
                  myGLCD.print("Water", 200, 30);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MIN.", 170,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(180,80,210,90);// faire une forme de +
                  myGLCD.fillRect(190,70,200,100) ;
                  myGLCD.drawCircle (195,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(180,210,210,220) ; // faire une forme de -
                  myGLCD.drawCircle (195,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(169,130,220,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumI("10",10,140);
                  //lignes de séparation min/max
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(230,60,230,310);

                  myGLCD.setColor(255,255,0);
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("MAX.",235,50);
                  myGLCD.setColor(0,255,0);// Green
                  myGLCD.fillRect(250,80,280,90);// faire une forme de +
                  myGLCD.fillRect(260,70,270,100) ;
                  myGLCD.drawCircle (265,85,20);
                  myGLCD.setColor(255,0,0);
                  myGLCD.fillRect(250,210,280,220) ; // faire une forme de -
                  myGLCD.drawCircle (265,215,20);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(240,130,290,180);
                  myGLCD.setFont(BigFont);//numéro 32x50 pixels
                  myGLCD.printNumI("20",241,140);
                                   

                  myGLCD.setFont(SmallFont);
                  myGLCD.print("SAVE",280,20);
                  myFiles.load(270,195,40,40,"home.raw", 1);
                 // myGLCD.print("HOME",280,220);

                 

                   
   
  }

void drawpHSensorCalibrationscreen (){

                  myGLCD.setBackColor(0, 0, 0);
                  myGLCD.setFont(BigFont);
                  myGLCD.setColor(255,255,0);// Yellow
                  myGLCD.print("pH calibration", 0, 10);
                  myGLCD.setColor(255,255,255);//
                  myGLCD.setFont(SmallFont);
                  myGLCD.print("point 1", 80,50);
                  myGLCD.drawRoundRect(80,90,120,120);
                  myGLCD.fillRect(95,76,105,80);// + button
                  myGLCD.fillRect(98,73,102,83);
                  myGLCD.drawCircle(100,78,8);
                  myGLCD.fillRect(95,135,105,140);//- button
                  myGLCD.drawCircle(100,138,8);
                  myGLCD.printNumF(pH1Real,1,85,100);
                 
                  myGLCD.print("point 2", 160,50);
                  myGLCD.drawRoundRect(165,90,205,120);
                  myGLCD.fillRect(180,76,190,80);// + button
                  myGLCD.fillRect(183,73,187,83);
                  myGLCD.drawCircle(185,78,8);
                  myGLCD.fillRect(180,135,190,140);//- button
                  myGLCD.drawCircle(185,138,8);
                  myGLCD.printNumF(pH2Real,1,170,100);
                  myGLCD.print("Real pH", 5,100);
                  myGLCD.print("Analog" , 5,160);
                  myGLCD.print(" read pH", 5,170);
                  myGLCD.setColor(255,150,150);
                  myGLCD.fillRoundRect(80,200,120,230); //button to record the analog value
                  myGLCD.fillRoundRect(165,200,205,230);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(80,200,120,230);
                  myGLCD.drawRoundRect(165,200,205,230);
                  myGLCD.setBackColor(255,150,150);
                  myGLCD.print("Read", 85,210);
                  myGLCD.print("Read", 170,210);
                 
                  myGLCD.setColor(0,0,250);
                  myGLCD.fillRoundRect(235,90,315,120);
                  myGLCD.setColor(255,255,255);
                  myGLCD.drawRoundRect(235,90,315,120);
                  myGLCD.setBackColor(0,0,250);
                  myGLCD.print("Calibrate", 240,100);
                  myGLCD.setBackColor(0,0,0);

                  //ligne de séparation avec Calibrate
                  myGLCD.setColor(255,255,54);
                  myGLCD.drawLine(220,50,220,310);
                  myGLCD.drawLine(50,65,220,65);
                  myGLCD.drawLine(50,150,220,150);
                  myGLCD.drawLine(140,50,140,230);

                  //myGLCD.print("HOME",280,220);
                  myFiles.load(270,195,40,40,"home.raw", 1);
       


 
}

void drawRefreshpHSensorCalibrationscreen (){
  myGLCD.printNumF(pH2Real,1,170,100);
  myGLCD.printNumF(pH1Real,1,85,100);
 
  }

void pH1Read () {

  pH1AnalogRead = analogRead (pHPin) ;
  myGLCD.printNumI(pH1AnalogRead,85,165);
  checkpH1Read =1;
}

void pH2Read () {

  pH2AnalogRead = analogRead (pHPin) ;
  myGLCD.printNumI(pH2AnalogRead,170,165);
  checkpH2Read=1;
}

void pHSensorCalibration () {

  if (checkpH1Read ==1 && checkpH2Read==1) { //No calibrating possible without Readings

        pHSlope = ((pH1Real - pH2Real)/(pH1AnalogRead -pH2AnalogRead));
        pHOffset = (pH1Real- (pH1AnalogRead*pHSlope));
        myGLCD.print("Calibrated!", 225,140);
        myGLCD.print("Slope =", 225,170);
        myGLCD.printNumF(pHSlope,2,280,170);
        myGLCD.print("Offset=", 225,190);
        myGLCD.printNumF(pHOffset,1,280,190);
        checkpH2Read=0;
        checkpH1Read =0;

      }
     else {
      myGLCD.print("Read values", 240,80);
      myGLCD.print(" first!", 240,90);
     }
 
 
}



BrUnO14200

Bonjour.... et bien à présent pour être complet, il ne manque plus que le code....sinon ça sert pas à d'autres....ici, cela s'appelle :"communauté Arduino"....merci
Tu veux qu'on se côtise pour t'acheter le matos aussi ? ... Les gens sont fous !

@bogtus : Trés bon travail !
Projet aquaponique  :https://forum.arduino.cc/index.php?topic=677286.msg4584918#new

patgyver

Bonjour et toutes mes excuses Bogtus, je n'ai pas vu la suite des messages page 2...pas l'habitude du fonctionnement du site. Merci pour les codes, je vais m'en inspirer pour ma petite tambouille....
Toutes mes excuses aussi pour la teneur quelque peu agressive de mon précédent message, bravo en tous cas pour la réalisation et surtout merci beaucoup de partager. Bonne continuation. Pat

Go Up