calibrage ecrant

Hello Petit pb : je calibre un ecrant tactille : ITDB02-3.2S http://imall.iteadstudio.com/display/tft-lcm/im120419005.html Un fois que je fini mon calibrage je modifis le fichier UTouchCD.h Une fois fait tout va pour le mieux mon ecrant tactile marche tres bien Par contre dés que je debranche mon cable usb et que je le rebranche je perds la calibration 8-((((

D ou peut venir mon pb ?

Merci a vous

Bon et bien merci pour toute ses reponces j y vois plus claire :roll_eyes:

Bonsoir,

fred33: Bon et bien merci pour toute ses reponces j y vois plus claire :roll_eyes:

de l'humour à 1 centime ]:D Pour ton information, il n'y a pas de t à écran (et ce n'est pas une faute de frappe) Bon courage pour la suite

fred33: Bon et bien merci pour toute ses reponces j y vois plus claire :roll_eyes:

T'es vraiment une truffe (et pas une bonne en plus puisque tu es rescapé de Noël), au lieu de faire de l'humour à 2 balles tu ferais mieux de nous mettre le programme en cause. Comment veux-tu que l'on t'aide si on ne sait pas ce que tu fais avec ta carte et ton écran.

Et puis aussi pendant les fêtes on a peut être autre chose à faire .....

Hello
Bien au moins ma reponce a eu des reactions :grin:

Voila le code que j utilise pour calibrer mon ecran

Merci a vous

// UTouch_Calibration (C)2013 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// This program can be used to calibrate the touchscreen
// of the display modules.
// This program requires the UTFT library and a touch
// screen module that is compatible with UTFT.
//
// It is assumed that the display module is connected to an
// appropriate shield or that you know how to change the pin 
// numbers in the setup.
//
// Instructions will be given on the display.
//

#include <UTFT.h>
#include <UTouch.h>

// Define the orientation of the touch screen. Further 
// information can be found in the instructions.
#define TOUCH_ORIENTATION  PORTRAIT

// Declare which fonts we will be using
extern uint8_t SmallFont[];

// Uncomment the next two lines for the Arduino 2009/UNO
//UTFT        myGLCD(ITDB24D,19,18,17,16);   // Remember to change the model parameter to suit your display module!
//UTouch      myTouch(15,10,14,9,8);

// Uncomment the next two lines for the Arduino Mega
UTFT        myGLCD(ITDB32S,38,39,40,41);   // Remember to change the model parameter to suit your display module!
UTouch      myTouch(6,5,4,3,2);

// ************************************
// DO NOT EDIT ANYTHING BELOW THIS LINE
// ************************************
uint32_t cx, cy;
uint32_t rx[8], ry[8];
uint32_t clx, crx, cty, cby;
float px, py;
int dispx, dispy, text_y_center;
uint32_t calx, caly, cals;
char buf[13];

void setup()
{
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(SmallFont);

  myTouch.InitTouch(TOUCH_ORIENTATION);
  dispx=myGLCD.getDisplayXSize();
  dispy=myGLCD.getDisplayYSize();
  text_y_center=(dispy/2)-6;
}

void drawCrossHair(int x, int y)
{
  myGLCD.drawRect(x-10, y-10, x+10, y+10);
  myGLCD.drawLine(x-5, y, x+5, y);
  myGLCD.drawLine(x, y-5, x, y+5);
}

void readCoordinates()
{
  int iter = 5000;
  int failcount = 0;
  int cnt = 0;
  uint32_t tx=0;
  uint32_t ty=0;
  boolean OK = false;
  
  while (OK == false)
  {
    myGLCD.setColor(255, 255, 255);
    myGLCD.print("*  PRESS  *", CENTER, text_y_center);
    while (myTouch.dataAvailable() == false) {}
    myGLCD.print("*  HOLD!  *", CENTER, text_y_center);
    while ((myTouch.dataAvailable() == true) && (cnt<iter) && (failcount<10000))
    {
      myTouch.calibrateRead();
      if (!((myTouch.TP_X==65535) || (myTouch.TP_Y==65535)))
      {
        tx += myTouch.TP_X;
        ty += myTouch.TP_Y;
        cnt++;
      }
      else
        failcount++;
    }
    if (cnt>=iter)
    {
      OK = true;
    }
    else
    {
      tx = 0;
      ty = 0;
      cnt = 0;
    }
    if (failcount>=10000)
      fail();
  }

  cx = tx / iter;
  cy = ty / iter;
}

void calibrate(int x, int y, int i)
{
  myGLCD.setColor(255, 255, 255);
  drawCrossHair(x,y);
  myGLCD.setBackColor(255, 0, 0);
  readCoordinates();
  myGLCD.setColor(255, 255, 255);
  myGLCD.print("* RELEASE *", CENTER, text_y_center);
  myGLCD.setColor(80, 80, 80);
  drawCrossHair(x,y);
  rx[i]=cx;
  ry[i]=cy;
  while (myTouch.dataAvailable() == true) {}
}

void waitForTouch()
{
  while (myTouch.dataAvailable() == true) {}
  while (myTouch.dataAvailable() == false) {}
  while (myTouch.dataAvailable() == true) {}
}

void toHex(uint32_t num)
{
  buf[0] = '0';
  buf[1] = 'x';
  buf[10] = 'U';
  buf[11] = 'L';
  buf[12] = 0;
  for (int zz=9; zz>1; zz--)
  {
    if ((num & 0xF) > 9)
      buf[zz] = (num & 0xF) + 55;
    else
      buf[zz] = (num & 0xF) + 48;
    num=num>>4;
  }
}

Desolé j ai fait 2 postes le forum limite en caractéres les postes …
La suite et fin

void startup()
{
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRect(0, 0, dispx-1, 13);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.drawLine(0, 14, dispx-1, 14);
  myGLCD.print("UTouch Calibration", CENTER, 1);
  myGLCD.setBackColor(0, 0, 0);

  if (dispx==220)
  {  
    myGLCD.print("Use a stylus or something", LEFT, 30);
    myGLCD.print("similar to touch as close", LEFT, 42);
    myGLCD.print("to the center of the", LEFT, 54);
    myGLCD.print("highlighted crosshair as", LEFT, 66);
    myGLCD.print("possible. Keep as still as", LEFT, 78);
    myGLCD.print("possible and keep holding", LEFT, 90);
    myGLCD.print("until the highlight is", LEFT, 102);
    myGLCD.print("removed. Repeat for all", LEFT, 114);
    myGLCD.print("crosshairs in sequence.", LEFT, 126);
    myGLCD.print("Touch screen to continue", CENTER, 162);
  }
  else
  {
    myGLCD.print("INSTRUCTIONS", CENTER, 30);
    myGLCD.print("Use a stylus or something similar to", LEFT, 50);
    myGLCD.print("touch as close to the center of the", LEFT, 62);
    myGLCD.print("highlighted crosshair as possible. Keep", LEFT, 74);
    myGLCD.print("as still as possible and keep holding", LEFT, 86);
    myGLCD.print("until the highlight is removed. Repeat", LEFT, 98);
    myGLCD.print("for all crosshairs in sequence.", LEFT, 110);

    myGLCD.print("Further instructions will be displayed", LEFT, 134);
    myGLCD.print("when the calibration is complete.", LEFT, 146);

    myGLCD.print("Do NOT use your finger as a calibration", LEFT, 170);
    myGLCD.print("stylus or the result WILL BE imprecise.", LEFT, 182);

    myGLCD.print("Touch screen to continue", CENTER, 226);
  }

  waitForTouch();
  myGLCD.clrScr();
}

void done()
{
  myGLCD.clrScr();
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRect(0, 0, dispx-1, 13);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.drawLine(0, 14, dispx-1, 14);
  myGLCD.print("UTouch Calibration", CENTER, 1);
  myGLCD.setBackColor(0, 0, 0);
  
  if (dispx==220)
  {  
    myGLCD.print("To use the new calibration", LEFT, 30);
    myGLCD.print("settings you must edit the", LEFT, 42);
    myGLCD.setColor(160, 160, 255);
    myGLCD.print("UTouchCD.h", LEFT, 54);
    myGLCD.setColor(255, 255, 255);
    myGLCD.print("file and change", 88, 54);
    myGLCD.print("the following values. The", LEFT, 66);
    myGLCD.print("values are located right", LEFT, 78);
    myGLCD.print("below the opening comment.", LEFT, 90);
    myGLCD.print("CAL_X", LEFT, 110);
    myGLCD.print("CAL_Y", LEFT, 122);
    myGLCD.print("CAL_S", LEFT, 134);
    toHex(calx);
    myGLCD.print(buf, 75, 110);
    toHex(caly);
    myGLCD.print(buf, 75, 122);
    toHex(cals);
    myGLCD.print(buf, 75, 134);
  }
  else
  {  
    myGLCD.print("CALIBRATION COMPLETE", CENTER, 30);
    myGLCD.print("To use the new calibration", LEFT, 50);
    myGLCD.print("settings you must edit the", LEFT, 62);
    myGLCD.setColor(160, 160, 255);
    myGLCD.print("UTouchCD.h", LEFT, 74);
    myGLCD.setColor(255, 255, 255);
    myGLCD.print("file and change", 88, 74);
    myGLCD.print("the following values.", LEFT, 86);
    myGLCD.print("The values are located right", LEFT, 98);
    myGLCD.print("below the opening comment in", LEFT, 110);
    myGLCD.print("the file.", LEFT, 122);
    myGLCD.print("CAL_X", LEFT, 150);
    myGLCD.print("CAL_Y", LEFT, 162);
    myGLCD.print("CAL_S", LEFT, 174);

    toHex(calx);
    myGLCD.print(buf, 75, 150);
    toHex(caly);
    myGLCD.print(buf, 75, 162);
    toHex(cals);
    myGLCD.print(buf, 75, 174);
  }
  
}

void fail()
{
  myGLCD.clrScr();
  myGLCD.setColor(255, 0, 0);
  myGLCD.fillRect(0, 0, dispx-1, 13);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.drawLine(0, 14, dispx-1, 14);
  myGLCD.print("UTouch Calibration FAILED", CENTER, 1);
  myGLCD.setBackColor(0, 0, 0);
  
  myGLCD.print("Unable to read the position", LEFT, 30);
  myGLCD.print("of the press. This is a", LEFT, 42);
  myGLCD.print("hardware issue and can", 88, 54);
  myGLCD.print("not be corrected in", LEFT, 66);
  myGLCD.print("software.", LEFT, 78);
  
  while(true) {};
}

void loop()
{
  startup();
  
  myGLCD.setColor(80, 80, 80);
  drawCrossHair(dispx-11, 10);
  drawCrossHair(dispx/2, 10);
  drawCrossHair(10, 10);
  drawCrossHair(dispx-11, dispy/2);
  drawCrossHair(10, dispy/2);
  drawCrossHair(dispx-11, dispy-11);
  drawCrossHair(dispx/2, dispy-11);
  drawCrossHair(10, dispy-11);
  myGLCD.setColor(255, 255, 255);
  myGLCD.setBackColor(255, 0, 0);
  myGLCD.print("***********", CENTER, text_y_center-12);
  myGLCD.print("***********", CENTER, text_y_center+12);

  calibrate(10, 10, 0);
  calibrate(10, dispy/2, 1);
  calibrate(10, dispy-11, 2);
  calibrate(dispx/2, 10, 3);
  calibrate(dispx/2, dispy-11, 4);
  calibrate(dispx-11, 10, 5);
  calibrate(dispx-11, dispy/2, 6);
  calibrate(dispx-11, dispy-11, 7);
  
  if (TOUCH_ORIENTATION == LANDSCAPE)
    cals=(long(dispx-1)<<12)+(dispy-1);
  else
    cals=(long(dispy-1)<<12)+(dispx-1);

  if (TOUCH_ORIENTATION == PORTRAIT)
    px = abs(((float(rx[2]+rx[4]+rx[7])/3)-(float(rx[0]+rx[3]+rx[5])/3))/(dispy-20));  // PORTRAIT
  else
    px = abs(((float(rx[5]+rx[6]+rx[7])/3)-(float(rx[0]+rx[1]+rx[2])/3))/(dispy-20));  // LANDSCAPE

  if (TOUCH_ORIENTATION == PORTRAIT)
  {
    clx = (((rx[0]+rx[3]+rx[5])/3));  // PORTRAIT
    crx = (((rx[2]+rx[4]+rx[7])/3));  // PORTRAIT
  }
  else
  {
    clx = (((rx[0]+rx[1]+rx[2])/3));  // LANDSCAPE
    crx = (((rx[5]+rx[6]+rx[7])/3));  // LANDSCAPE
  }
  if (clx<crx)
  {
    clx = clx - (px*10);
    crx = crx + (px*10);
  }
  else
  {
    clx = clx + (px*10);
    crx = crx - (px*10);
  }
  
  if (TOUCH_ORIENTATION == PORTRAIT)
    py = abs(((float(ry[5]+ry[6]+ry[7])/3)-(float(ry[0]+ry[1]+ry[2])/3))/(dispx-20));  // PORTRAIT
  else
    py = abs(((float(ry[0]+ry[3]+ry[5])/3)-(float(ry[2]+ry[4]+ry[7])/3))/(dispx-20));  // LANDSCAPE

  if (TOUCH_ORIENTATION == PORTRAIT)
  {
    cty = (((ry[5]+ry[6]+ry[7])/3));  // PORTRAIT
    cby = (((ry[0]+ry[1]+ry[2])/3));  // PORTRAIT
  }
  else
  {
    cty = (((ry[0]+ry[3]+ry[5])/3));  // LANDSCAPE
    cby = (((ry[2]+ry[4]+ry[7])/3));  // LANDSCAPE
  }
  if (cty<cby)
  {
    cty = cty - (py*10);
    cby = cby + (py*10);
  }
  else
  {
    cty = cty + (py*10);
    cby = cby - (py*10);
  }
  
  calx = (long(clx)<<14) + long(crx);
  caly = (long(cty)<<14) + long(cby);
  if (TOUCH_ORIENTATION == LANDSCAPE)
    cals = cals + (1L<<31);

  done();
  while(true) {}
}

Déjà juste sans analyser le code : tu dois sacrément en bouffer de la RAM. Utilise la fonction F() pour stocker dans la flash tes lignes de texte. Exemple :

myGLCD.print(F("Unable to read the position"), LEFT, 30);

Hello Ca peut etre la cause de mon pb ?

Le programme que tu as mis c'est celui qui fait la calibration. Je suppose que tu en fais tourner un autre après. C'est celui-là qui est intéressant.

Hello oui en effet voila ca que je fait tournné

*/
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// OneWire 2.2
// UTFT 2.1
//
// Declarations des librairies
// ---------------------------
//
#include <Arduino.h>
#include <Wire.h>
#include <DS1307.h>
#include <OneWire.h>
#include <EEPROM.h> // Librairie acces stockage mémoires arduino
#include <Servo.h> // Librairie gestion servomoteurs
#include <DallasTemperature.h> // Librairie gestion sondes de températures
#include <UTFT.h> // Librairie gestion ecran TFT
#include <UTouch.h> // Librairie gestion tactile ecran TFT
#include <UTFT_tinyFAT.h> // Librairie gestion carte SD
#include <tinyFAT.h> // Librairie gestion carte SD
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Déclaration des polices d'écriture 
// ----------------------------------
//
extern uint8_t BigFont[];
extern uint8_t Sinclair_S[];
extern uint8_t TinyFont[];
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Affectations des broches 
// ------------------------
//
#define reserve A0// broche analogique 0 = niveau reserve eau osmosé 
// A1
// A2
#define Line1Pin A3 // broche Analogique 3 = relais eclairage 1 ......................... RELAIS NORMALEMENT OUVERT
#define Line2Pin A4 // broche Analogique 4 = relais eclairage 2 ......................... RELAIS NORMALEMENT OUVERT
#define Line3Pin A5 // broche Analogique 5 = relais eclairage 3 ......................... RELAIS NORMALEMENT OUVERT
#define Line4Pin A6 // broche Analogique 6 = relais eclairage 4 ......................... RELAIS NORMALEMENT OUVERT
#define Line5Pin A7 // broche Analogique 7 = relais eclairage 5 ......................... RELAIS NORMALEMENT OUVERT
#define pompe1 A8 // broche 8= pompe doseuse 1
#define pompe2 A9 // broche 9= pompe doseuse 2
#define pompe3 A10 // broche 10= pompe doseuse 3
#define pompe4 A11 // broche 11= pompe doseuse 4
#define pompe5 A12 // broche 12= pompe doseuse 5
#define pompe6 A13 // broche 13= pompe doseuse 6
#define pompe7 A14 // broche 14= pompe doseuse 7
#define pompe8 A15 // broche 15= pompe doseuse 8
// 0 !!!TX!!!
// 1 !!!RX!!!
// 2 !!!TACTILE!!!
// 3 !!!TACTILE!!!
// 4 !!!TACTILE!!!
// 5 !!!TACTILE!!!
// 6 !!!TACTILE!!!
// 7 Oscillo 1
// 8 Oscillo 2
#define Line1 9 // broche 9 = PWM eclairage 1
#define Line2 10 // broche 10 = PWM eclairage 2
#define Line3 11 // broche 11 = PWM eclairage 3
#define Line4 12 // broche 12 = PWM eclairage 4
#define Line5 13 // broche 13 = PWM eclairage 5
// 14 RX3 Carte PH
// 15 TX3 Carte PH
// 16 RX2
// 17 TX2
// 18 RX1
// 19 TX1
// 20 SDA Module horloge
// 21 SCL Module horloge
// 22 !!!ECRAN!!!
// 23 !!!ECRAN!!!
// 24 !!!ECRAN!!!
// 25 !!!ECRAN!!!
// 26 !!!ECRAN!!!
// 27 !!!ECRAN!!!
// 28 !!!ECRAN!!!
// 29 !!!ECRAN!!!
// 30 !!!ECRAN!!!
// 31 !!!ECRAN!!!
// 32 !!!ECRAN!!!
// 33 !!!ECRAN!!!
// 34 !!!ECRAN!!!
// 35 !!!ECRAN!!!
// 36 !!!ECRAN!!!
// 37 !!!ECRAN!!!
// 38 !!!ECRAN!!!
// 39 !!!ECRAN!!!
// 40 !!!ECRAN!!!
// 41 !!!ECRAN!!!
// 42 
#define fanpin 43 // broche 43 = relais ventilateurs bac ......................... RELAIS NORMALEMENT FERME
#define pinecum 44 // broche 44 = relais ecumeur ......................... RELAIS NORMALEMENT FERME
#define pinremon 45 // broche 45 = relais remontée   PWM ??? ......................... RELAIS NORMALEMENT FERME
#define ventilecl 46 // broche 46 = relais ventilateur rampe  PWM ??? ......................... RELAIS NORMALEMENT FERME
#define pinbrass 47 // broche 47 = Brassage ......................... RELAIS NORMALEMENT FERME
#define chauffage 48 // broche 48 = Chauffage ......................... RELAIS NORMALEMENT FERME
#define sensorbus1 49 //Creation sondes température bac
// 50 !!!MISO_PIN!!!
// 51 !!!MOSI_PIN!!!
// 52 !!!SCK_PIN!!!
// 53 !!!SS_PIN!!!

// Noms des eclairages ( 6 charactères MAX ! )
char *light1="LINE 1";
char *light2="LINE 2";
char *light3="LINE 3";
char *light4="LINE 4";
char *light5="LINE 5";
// Noms des pompes doseuses
char *dosp1="EEEEEE";
char *dosp2="FFFFFF";
char *dosp3="GGGGGG";
char *dosp4="HHHHHH";
char *dosp5="IIIIII";
char *dosp6="JJJJJJ";
char *dosp7="KKKKKK";
char *dosp8="LLLLLL";


UTFT myGLCD(ITDB32S,38,39,40,41); // Déclaration de l'écran, du format et du tactile
UTFT_tinyFAT myFiles(&myGLCD);
//UTFTtf myGLCD(ITDB32WC,38,39,40,41); // Déclaration de l'écran, du format et du tactile
UTouch myTouch(6,5,4,3,2); // Déclaration du tactile

DS1307 rtc(20, 21); // Déclaration module Horloge

OneWire oneWire1(sensorbus1);
DallasTemperature sensor(&oneWire1);

// Index sondes températures

byte sensorba; // sonde aquarium
byte sensorho; // sonde maison
byte sensorec; // sonde eclairage

// Variables pour l'horloge
Time clk;
int timer;
byte xdate;
int x1;
int jour,date,mois,annee;
int heures,minutes;
// Variables diverses

int tempomenu=0;
byte menuID=0;
int x,y;
int tempoecumeur;
byte tempoecumeurVal;
byte ecuminfo=0; // Variable affichage ecumeur

// Variable température 
float tempbac; // Variable température bac
float temppiece; // Variable température pièce
float tempecl; // Variable température éclairage

byte TempVal;  // Valeur de déclenchement des ventilateurs
byte TempHeat; // Valeur de déclenchement du chauffage
byte TempRamp; // Valeur de déclenchement ventilation rampe

// Variable PH
float PHT;
float phBac; // Variable du pH bac
char sensorstring[15];
byte holding;

byte Light1Status; // Status de l'éclairage
byte Light1PWM; // Valeur de sortie PWM
byte Light1TimePWM; // Durée de l'éclairage progressif
byte Light1Max; // Valeur max de l'éclairage progressif

byte Light2Status;
byte Light2PWM;
byte Light2TimePWM;
byte Light2Max;

byte Light3Status;
byte Light3PWM;;
byte Light3TimePWM;
byte Light3Max;

byte Light4Status;
byte Light4PWM;
byte Light4TimePWM;
byte Light4Max;

byte Light5Status;
byte Light5PWM;
byte Light5TimePWM;
byte Light5Max;

int hrstart;
int minstart;
int hrend;
int minend;
int lightTimePWM;
int lightMAX;

La suite

float PHT;
float phBac; // Variable du pH bac
char sensorstring[15];
byte holding;

byte Light1Status; // Status de l'éclairage
byte Light1PWM; // Valeur de sortie PWM
byte Light1TimePWM; // Durée de l'éclairage progressif
byte Light1Max; // Valeur max de l'éclairage progressif

byte Light2Status;
byte Light2PWM;
byte Light2TimePWM;
byte Light2Max;

byte Light3Status;
byte Light3PWM;;
byte Light3TimePWM;
byte Light3Max;

byte Light4Status;
byte Light4PWM;
byte Light4TimePWM;
byte Light4Max;

byte Light5Status;
byte Light5PWM;
byte Light5TimePWM;
byte Light5Max;

int hrstart;
int minstart;
int hrend;
int minend;
int lightTimePWM;
int lightMAX;

byte ecumeurstat=0;
byte brassagestat=1; // brassage actif par defaut
byte remonteestat=1; // active par defaut
byte servostat=1; // Servo actif par défault
byte saverstat=0; // Economiseur d'écran ( désactivé par défaut )

int dureetotale;
int dureeEntreMilieux;
int zenith;
int minuteActuelle;
int valeurLED;


// Eclairage heures de debut 
int debut1,debut2,debut3,debut4,debut5;
// Eclairage heures de fin
int fin1,fin2,fin3,fin4,fin5;
// Variable pompes doseuses
int pump1dost,pump2dost,pump3dost,pump4dost,pump5dost,pump6dost,pump7dost,pump8dost;
byte pump1time,pump2time,pump3time,pump4time,pump5time,pump6time,pump7time,pump8time; 
byte pump1perf,pump2perf,pump3perf,pump4perf,pump5perf,pump6perf,pump7perf,pump8perf;

int countpump;
byte calibpump;
char *pumpdosing="0000000";
byte val=0; // Variable calibration pompes doseuses

// Variable Servomoteurs
// Servomoteur 1
Servo servo1; 
byte angle1;
byte sens1 = 0;
byte bute1servo1;
byte bute2servo1;
byte vitservo1;
byte servocount1;
//Servomoteur 2
Servo servo2;
byte angle2 =0;
byte sens2 = 0;
byte bute1servo2;
byte bute2servo2;
byte vitservo2;
byte servocount2;



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop(){
 
    clk = rtc.getTime(); // Recuperation de l'heure et de la date
    timer = clk.hour*60+clk.min; // Temps ( heures + minutes )         
           
    if (ecumeurstat==0){ecumeurtemp();} // Temporisation ecumeur  
                                                                         
            // Mesures toute les minutes
            if (clk.sec==0 && menuID==0 && clk.year!=2165){  
                                                           light();
                                                           lightdraw1();lightdraw2();lightdraw3();lightdraw4();lightdraw5();
                                                           mesure();
                                                           //phmeasure();
                                                           drawmesure();
                                                           titledate(); 
                                       }
                                          
            if (menuID!=99){clock();} // Affichage de l'heure
            if (menuID==99){screensaver();} // Affichage economiseur d'écran
            dosingpump(); // Gestion Pompes doseuses
            OutState(); // Gestion des sorties
            light(); // Gestion éclairage  
            servos(); // Gestion servomoteurs      +
            if (calibpump>0){if (calibpump==1){digitalWrite(pompe1,HIGH);}
                             if (calibpump==2){digitalWrite(pompe2,HIGH);}
                             if (calibpump==3){digitalWrite(pompe3,HIGH);}
                             if (calibpump==4){digitalWrite(pompe4,HIGH);}
                             if (calibpump==5){digitalWrite(pompe5,HIGH);}
                             if (calibpump==6){digitalWrite(pompe6,HIGH);}
                             if (calibpump==7){digitalWrite(pompe7,HIGH);}
                             if (calibpump==8){digitalWrite(pompe8,HIGH);}
                             calibdosing();}

    // temporisation screensaver
    if (menuID==0 && saverstat==1 && tempomenu==clk.min*60+clk.sec){menuID=99;tempomenu=0;myGLCD.fillScr(0,0,0);}
          
    
    // temporisation dans les menus
    if (menuID>0 && menuID<99 && tempomenu==clk.min*60+clk.sec){menuID=0;tempomenu=0;clean();
                                                                                                  loadsetup(); // Parametres generaux
                                                                                                  loaddosing(); // Parametres pompes doseuses
                                                                                                  loadlight(); // Parametres eclairages
                                                                                                  loadservo(); // Parametres oscillos
                                                                                                  homescreen();titledate();boutons();lightdraw();
                                                                                                  mesure();
                                                                                                  drawmesure();
                                                                                                  drawecumeur();
                                                                                                  if (clk.min*60+clk.sec<3480){tempomenu=clk.min*60+clk.sec+120;} else {tempomenu=120-(3599-(clk.min*60+clk.sec))+5;}}
    
    // Gestion tactile                                                                                              
    if (menuID<=5){if (myTouch.dataAvailable()){myTouch.read();x=myTouch.getX();y=myTouch.getY();   
                                                if (clk.min*60+clk.sec<3480){tempomenu=clk.min*60+clk.sec+120;} else {tempomenu=120-(3599-(clk.min*60+clk.sec))+5;}
                                                // Affichage du Homescreen 
                                                if (x>=0 && x<=63 && y>216 && y<240 && menuID<=5){menuID=0;clean();
                                                                                                  homescreen();titledate();boutons();lightdraw();
                                                                                                  mesure();
                                                                                                  drawmesure();
                                                                                                  drawecumeur();
                                                                                                  
                                                                                                  }

Suite

  // Affichage du menu réglages
                                                if (x>=64 && x<=127 && y>216 && y<240 && menuID<=5){clean();
                                                                                                    menuID=5;
                                                                                                    graphsetup();
                                                                                                    
                                                                                                    
                                                                                                    } 
                                                // Affichage menu ON/OFF
                                                if (x>=128 && x<=191 && y>216 && y<240 && menuID<=5){menuID=3;clean();
                                                                                                     graphonoff();
                                                                                                    } 
                                                
                                                // Fenetre infos
                                                if (x>=256 && x<=320 && y>216 && y<240 && menuID<=5){clean();
                                                                                                    menuID=1;
                                                                                                    graphinfo();
                                                                                                    }
                                                  
                                                // Raccourcis sur le homescreen
                                                if (menuID==0){
                                                  
                                                // Tactile Eclairage HomeScreen                                  
                                                // Eclairage 1
                                                if (x>11 && x<38 && y>57 && y<76){Light1Status=0;light();lightdraw1();} // AUTO
                                                if (x>39 && x<63 && y>57 && y<76){Light1Status=2;Light1PWM=Light1Max;lightdraw1();} // ON
                                                if (x>64 && x<88 && y>57 && y<76){Light1Status=3;Light1PWM=0;lightdraw1();} // OFF
                                                // Eclairage 2
                                                if (x>11 && x<38 && y>78 && y<97){Light2Status=0;light();lightdraw2();} // AUTO
                                                if (x>39 && x<63 && y>78 && y<97){Light2Status=2;Light2PWM=Light2Max;lightdraw2();} // ON
                                                if (x>64 && x<88 && y>78 && y<97){Light2Status=3;Light2PWM=0;lightdraw2();} // OFF
                                                // Eclairage 3
                                                if (x>11 && x<38 && y>99 && y<118){Light3Status=0;light();lightdraw3();} // AUTO
                                                if (x>39 && x<63 && y>99 && y<118){Light3Status=2;Light3PWM=Light3Max;lightdraw3();} // ON
                                                if (x>64 && x<88 && y>99 && y<118){Light3Status=3;Light3PWM=0;lightdraw3();} // OFF
                                                // Eclairage 4
                                                if (x>11 && x<38 && y>120 && y<139){Light4Status=0;light();lightdraw4();} // AUTO ON
                                                if (x>39 && x<63 && y>120 && y<139){Light4Status=2;Light4PWM=Light4Max;lightdraw4();} // ON
                                                if (x>64 && x<88 && y>120 && y<139){Light4Status=3;Light4PWM=0;lightdraw4();} // OFF
                                                // Eclairage 5
                                                if (x>11 && x<38 && y>141 && y<160){Light5Status=0;light();lightdraw5();} // AUTO
                                                if (x>39 && x<63 && y>141 && y<160){Light5Status=2;Light5PWM=Light5Max;lightdraw5();} // ON
                                                if (x>64 && x<88 && y>141 && y<160){Light5Status=3;Light5PWM=0;lightdraw5();} // OFF
                                                // Ecumeur
                                                if (x>80 && x<107 && y>173 && y<192 && ecuminfo==0){ecumeurstat=1;myFiles.loadBitmap(79,173,80,20,"AutoON.raw");} // AUTO
                                                if (x>108 && x<132 && y>173 && y<192 && ecuminfo==0){ecumeurstat=2;myFiles.loadBitmap(79,173,80,20,"on.raw");} // ON
                                                if (x>133 && x<157 && y>173 && y<192 && ecuminfo==0){ecumeurstat=3;myFiles.loadBitmap(79,173,80,20,"off.raw");} // OFF 
                                                // Annulation temporisation ecumeur
                                                if (x>79 && x<160 && y>173 && y<192 && ecumeurstat==0){tempoecumeur=0;tempoecumeurVal=0;ecuminfo=0;ecumeurstat=1;drawecumeur();}  
                                                // Remontee
                                                if (x>80 && x<107 && y>194 && y<213){remonteestat=1;myFiles.loadBitmap(79,194,80,20,"AutoON.raw");} // AUTO
                                                if (x>108 && x<132 && y>194 && y<213){remonteestat=2;myFiles.loadBitmap(79,194,80,20,"on.raw");} // ON
                                                if (x>133 && x<157 && y>194 && y<213){remonteestat=3;myFiles.loadBitmap(79,194,80,20,"off.raw");} // OFF
                                                // Brassage
                                                if (x>232 && x<259 && y>173 && y<192){brassagestat=1;myFiles.loadBitmap(231,173,80,20,"AutoON.raw");} // AUTO
                                                if (x>260 && x<284 && y>173 && y<192){brassagestat=2;myFiles.loadBitmap(231,173,80,20,"on.raw");} // ON
                                                if (x>285 && x<309 && y>173 && y<192){brassagestat=3;myFiles.loadBitmap(231,173,80,20,"off.raw");} // OFF             
                                                            }   
                                                // Tactile menu On/OFF
                                                if (menuID==3){touchonoff();} // tactile du menu ON/OFf
                                                if (menuID==5){touchsetup();} // tactile du menu principal setup
            
                                          }
                  }
  // Tactile dans les menus
  if (menuID>=6){if (myTouch.dataAvailable()){myTouch.read();x=myTouch.getX();y=myTouch.getY();
                                               if (clk.min*60+clk.sec<3480){tempomenu=clk.min*60+clk.sec+120;} else {tempomenu=120-(3599-(clk.min*60+clk.sec))+5;}  
                                               if (menuID==6){touchclock();} // Réglage horloge
                                               if (menuID==7){paratouch();} // Réglage automate
                                               if (menuID==8){servotouch();} // Réglage Oscillos
                                               if (menuID==9){pump1touch();} // Pompe doseuse 1
                                               if (menuID==10){pump2touch();} // Pompe doseuse 2
                                               if (menuID==11){pump3touch();} // Pompe doseuse 3
                                               if (menuID==12){pump4touch();} // Pompe doseuse 4
                                               if (menuID==13){pump5touch();} // Pompe doseuse 5
                                               if (menuID==14){pump6touch();} // Pompe doseuse 6
                                               if (menuID==15){pump7touch();} // Pompe doseuse 7
                                               if (menuID==16){pump8touch();} // Pompe doseuse 8
                                               if (menuID>=17 && menuID<=21){lighttouch();} // Eclairage 
                                               if (menuID==99){menuID=0;clean();
                                                                                                  homescreen();titledate();boutons();lightdraw();
                                                                                                  mesure();
                                                                                                  drawmesure();
                                                                                                  drawecumeur();
                                                                                                  if (clk.min*60+clk.sec<3480){tempomenu=clk.min*60+clk.sec+180;} else {tempomenu=180-(3599-(clk.sec*60+clk.sec));
                                                                                                  }}

suite

// retour au menu principale
                                               if (x>=0 && x<=63 && y>207 && y<240){menuID=5;clean();graphsetup();boutons();
                                                                                        loadsetup(); // Parametres generaux
                                                                                        loaddosing(); // Parametres pompes doseuses
                                                                                        loadlight(); // Parametres eclairages
                                                                                        loadservo();
                                                                                        }
                                               // Bouton valider
                                               if (x>=257 && x<=320 && y>207 && y<240){if (menuID==6){saveclock();titledate();} // Sauvegarde de la Date et de l'heure
                                                                                           if (menuID==7){savesetup();} // Sauvegarde réglages automate
                                                                                           if (menuID==8){saveservo();} // Sauvegarde réglages Oscillos
                                                                                           if (menuID>=9 && menuID<=16){savedosing();} // Sauvegarde des pompes doseuses
                                                                                           if (menuID>=17 && menuID<=21){savelight();} // Sauvegarde eclairages
                                                                                           if (menuID==22){firstload();
                                                                                                           loadsetup(); // Parametres generaux
                                                                                                           loaddosing(); // Parametres pompes doseuses
                                                                                                           loadlight(); // Parametres eclairages
                                                                                                           loadservo(); // Parametres oscillos
                                                                                                           loadname(); // Noms eclairages et pompes doseuses
                                                                                                            } // Hard reset Automate
                                                                                                 
                                                                                           menuID=5;clean();graphsetup();boutons();
                                                                                          }                                                
                                                         }
                               }
            


}


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void graphsetup(){
            myFiles.loadBitmap(0,13,320,194,"setup.raw");  
            myGLCD.setFont(Sinclair_S);
            
            color2();
            // Boutons eclairages
            myGLCD.print(light1,4,74);
            myGLCD.print(light2,57,74);
            myGLCD.print(light3,110,74);
            myGLCD.print(light4,163,74);
            myGLCD.print(light5,216,74);
            // Pompes doseuses           
            // Ligne 1
            myGLCD.print(dosp1,4,128);
            myGLCD.print(dosp2,57,128);
            myGLCD.print(dosp3,110,128);
            myGLCD.print(dosp4,163,128);
            // Ligne 2
            myGLCD.print(dosp5,4,182);
            myGLCD.print(dosp6,57,182);
            myGLCD.print(dosp7,110,182);
            myGLCD.print(dosp8,163,182);           
            //myGLCD.setFont(SmallFont);
            color1();
}
void touchsetup(){
            // Affichage du menu de reglage de l'heure
            if (x>267 && x<318 && y>145 && y<197){menuID=22;clean();boutons();} // Hard reset
            if (x>214 && x<265 && y>92 && y<144){menuID=6;clean();boutons();myFiles.loadBitmap(0,13,320,194,"clockset.raw");
                                                      heures=clk.hour;minutes=clk.min;annee=clk.year;date=clk.date;jour=clk.dow;mois=clk.mon;
                                                      graphclockset();}
            
            // Affichage du menu de reglage de l'automate
            if (x>267 && x<318 && y>92 && y<144){menuID=7;clean();boutons();myFiles.loadBitmap(0,13,320,194,"paraset.raw");loadsetup();
                                                 if (saverstat==0){myFiles.loadBitmap(251,144,18,18,"checkn.raw");}
                                                 if (saverstat==1){myFiles.loadBitmap(251,144,18,18,"checko.raw");}
                                                 paraset();}
            // Affichage du menu de reglage des oscillos
            if (x>267 && x<318 && y>38 && y<91){menuID=8;clean();boutons();myFiles.loadBitmap(0,13,320,194,"servoset.raw");servoset();}
            // Affichage des menus pompes doseuses
            if (x>2 && x<53 && y>92 && y<144){menuID=9;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump1set();} // Pompe doseuse 1
            if (x>55 && x<106 && y>92 && y<144){menuID=10;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump2set();} // Pompe doseuse 2
            if (x>108 && x<159 && y>92 && y<144){menuID=11;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump3set();} // Pompe doseuse 3
            if (x>161 && x<212 && y>92 && y<144){menuID=12;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump4set();} // Pompe doseuse 4
            if (x>2 && x<53 && y>145 && y<197){menuID=13;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump5set();} // Pompe doseuse 5
            if (x>55 && x<106 && y>145 && y<197){menuID=14;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump6set();} // Pompe doseuse 6
            if (x>108 && x<159 && y>145 && y<197){menuID=15;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump7set();} // Pompe doseuse 7
            if (x>161 && x<212 && y>145 && y<197){menuID=16;clean();boutons();myFiles.loadBitmap(0,13,320,194,"dpumpset.raw");pump8set();} // Pompe doseuse 8
            // Affichage des menus eclairages
            if (x>2 && x<53 && y>38 && y<91){menuID=17;clean();boutons();myFiles.loadBitmap(0,13,320,194,"lightset.raw");
                                                myGLCD.setFont(BigFont);
                                                myGLCD.print(light1,112,42);
                                                hrstart=debut1/60;minstart=debut1-((debut1/60)*60);
                                                hrend=fin1/60;minend=fin1-((fin1/60)*60);
                                                lightMAX=Light1Max;
                                                lightTimePWM=Light1TimePWM;
                                                lightset();} // Eclairage 1
            if (x>55 && x<106 && y>38 && y<91){menuID=18;clean();boutons();myFiles.loadBitmap(0,13,320,194,"lightset.raw");
                                                myGLCD.setFont(BigFont);
                                                myGLCD.print(light2,112,42);
                                                hrstart=debut2/60;minstart=debut2-((debut2/60)*60);
                                                hrend=fin2/60;minend=fin2-((fin2/60)*60);
                                                lightMAX=Light2Max;
                                                lightTimePWM=Light2TimePWM;
                                                lightset();} // Eclairage 2

fin

 if (x>108 && x<159 && y>38 && y<91){menuID=19;clean();boutons();myFiles.loadBitmap(0,13,320,194,"lightset.raw");
                                                myGLCD.setFont(BigFont);
                                                myGLCD.print(light3,112,42);
                                                hrstart=debut3/60;minstart=debut3-((debut3/60)*60);
                                                hrend=fin3/60;minend=fin3-((fin3/60)*60);
                                                lightMAX=Light3Max;
                                                lightTimePWM=Light3TimePWM;
                                                lightset();} // Eclairage 3
            if (x>161 && x<212 && y>38 && y<91){menuID=20;clean();boutons();myFiles.loadBitmap(0,13,320,194,"lightset.raw");
                                                myGLCD.setFont(BigFont);
                                                myGLCD.print(light4,112,42);
                                                hrstart=debut4/60;minstart=debut4-((debut4/60)*60);
                                                hrend=fin4/60;minend=fin4-((fin4/60)*60);
                                                lightMAX=Light4Max;
                                                lightTimePWM=Light4TimePWM;  
                                                lightset();} // Eclairagee 4
            if (x>214 && x<265 && y>38 && y<91){menuID=21;clean();boutons();myFiles.loadBitmap(0,13,320,194,"lightset.raw");
                                                myGLCD.setFont(BigFont);
                                                myGLCD.print(light5,112,42);
                                                hrstart=debut5/60;minstart=debut5-((debut5/60)*60);
                                                hrend=fin5/60;minend=fin5-((fin5/60)*60);
                                                lightMAX=Light5Max;
                                                lightTimePWM=Light5TimePWM;  
                                                lightset();} // Eclairagee 5
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void graphonoff(){          
            myFiles.loadBitmap(0,13,320,194,"bckonoff.raw");
            
            myGLCD.print("Ecumeur",10,114);
            myGLCD.print("Pompes de brassage",10,132);
            myGLCD.print("Remontee",10,150);
            myGLCD.print("Oscillateurs",10,168);
            myGLCD.print("?",10,186);            
            
            onoff6(); 
            onoff7(); 
            onoff8(); 
            onoff9(); 
            onoff10(); 
}

void onoff6(){ // Ecumeur
            if (ecumeurstat == 0){myFiles.loadBitmap(160,112,144,16,"auto.raw");}
            if (ecumeurstat == 1){myFiles.loadBitmap(160,112,144,16,"auto.raw");}  
            if (ecumeurstat == 2){myFiles.loadBitmap(160,112,144,16,"on.raw");}  
            if (ecumeurstat == 3){myFiles.loadBitmap(160,112,144,16,"off.raw");}    
}

void onoff7(){ // Pompes de brassage
            if (brassagestat == 0){myFiles.loadBitmap(160,130,144,16,"auto.raw");}
            if (brassagestat == 1){myFiles.loadBitmap(160,130,144,16,"auto.raw");}  
            if (brassagestat == 2){myFiles.loadBitmap(160,130,144,16,"on.raw");}  
            if (brassagestat == 3){myFiles.loadBitmap(160,130,144,16,"off.raw");}     
}
void onoff8(){ // Remontée
            if (remonteestat == 0){myFiles.loadBitmap(160,148,144,16,"auto.raw");}
            if (remonteestat == 1){myFiles.loadBitmap(160,148,144,16,"auto.raw");}  
            if (remonteestat == 2){myFiles.loadBitmap(160,148,144,16,"on.raw");}  
            if (remonteestat == 3){myFiles.loadBitmap(160,148,144,16,"off.raw");} 
}
void onoff9(){// Servomoteurs
            if (servostat == 0){myFiles.loadBitmap(160,166,144,16,"auto.raw");}
            if (servostat == 1){myFiles.loadBitmap(160,166,144,16,"auto.raw");}  
            if (servostat == 2){myFiles.loadBitmap(160,166,144,16,"on.raw");}  
            if (servostat == 3){myFiles.loadBitmap(160,166,144,16,"off.raw");} 
}
void onoff10(){    
            myFiles.loadBitmap(160,184,144,16,"auto.raw");  
}
void touchonoff(){
            
            // Ecumeur
            if (x>160 && x<207 && y>112 && y<128){ecumeurstat=1;onoff6();}
            if (x>208 && x<255 && y>112 && y<128){ecumeurstat=2;onoff6();}
            if (x>256 && x<304 && y>112 && y<128){ecumeurstat=3;onoff6();}
            // Pompes de brassage
            if (x>160 && x<207 && y>130 && y<146){brassagestat=1;onoff7();}
            if (x>208 && x<255 && y>130 && y<146){brassagestat=2;onoff7();}
            if (x>256 && x<304 && y>130 && y<146){brassagestat=3;onoff7();}
             // Remontée
            if (x>160 && x<207 && y>148 && y<164){remonteestat=1;onoff8();}
            if (x>208 && x<255 && y>148 && y<164){remonteestat=2;onoff8();}
            if (x>256 && x<304 && y>148 && y<164){remonteestat=3;onoff8();}
            // Servomoteurs
            if (x>160 && x<207 && y>166 && y<182){servostat=1;onoff9();servo1.attach(7);servo2.attach(8);}
            if (x>208 && x<255 && y>166 && y<182){servostat=2;onoff9();servo1.attach(7);servo2.attach(8);}
            if (x>256 && x<304 && y>166 && y<182){servostat=3;onoff9();}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void clean(){
            myGLCD.setColor(255, 255, 255);
            myGLCD.fillRect(0, 9, 319, 216);
            myGLCD.setColor(0, 0, 0);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void color1(){myGLCD.setColor(0, 0, 0);myGLCD.setBackColor(255,255,255);} // Ecriture noire sur fond blanc
void color2(){myGLCD.setColor(255, 255, 255);myGLCD.setBackColor(0,0,0);} // Ecriture blanche sur fond noir