pb sur programme ???

Bonjour à tous;
Je me suis lancé pour mon premier programme de gestion pour mon aquarium et j’ai un pb …peut etre au niveau des boucles…
Le but de mon montage est de commander des relais (pompes,écumeur) avec un affichage tactile LCD.
Mes bouttons fonctionnent bien et les variables basculent bien… le problème quand j’ai un bouton rouge et l’autre vert , me faut appuyer deux fois sur le vert pour changer d’état… alors que si les deux sont verts pas de problèmes ?
voici le programme :

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

// Declare which fonts we will be using
extern uint8_t BigFont;

// 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);

int x, y;
int button1=1;
int button2=1;
int button3=1;
boolean etat = false;

// affichage bouton

void drawButtons()
{
// bouton pompe de remonte
myGLCD.setColor(0, 255, 0);
myGLCD.fillRoundRect (10, 10, 159, 60);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (10, 10, 159, 60); // contour du bouton

// bouton ecumeur
myGLCD.setColor(0, 255, 0);
myGLCD.fillRoundRect (169, 10, 310, 60);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (169, 10, 310, 60); // contour du bouton
// bouton brassage
myGLCD.setColor(0, 255, 0);
myGLCD.fillRoundRect (10, 65, 159, 110);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (10, 65, 159, 110); // contour du bouton

}
// cadre rouge si bouton touché
void waitForIt(int x1, int y1, int x2, int y2)
{
myGLCD.setColor(255, 0, 0); // rouge
myGLCD.drawRoundRect (x1, y1, x2, y2);
while (myTouch.dataAvailable())
myTouch.read();
myGLCD.setColor(255, 255, 255);
myGLCD.drawRoundRect (x1, y1, x2, y2);
}
void setup()
{
// Initial setup
myGLCD.InitLCD();
myGLCD.clrScr();

myTouch.InitTouch();
myTouch.setPrecision(PREC_MEDIUM);

myGLCD.setFont(BigFont);
myGLCD.setBackColor(0, 0, 255); // couleur arriere plan
drawButtons();
}
void loop()

{
while (true)
{
if (myTouch.dataAvailable())
{
myTouch.read();
x=myTouch.getX();
y=myTouch.getY();

// test bouton pompe remonte
if ((y>=10) && (y<=60) &&(x>=10) && (x<=159)) // bouton remonte
{
if (etat == true)
{
button1=1;
// boutton vert
myGLCD.setColor(0, 255, 0);
myGLCD.fillRoundRect (10, 10, 159, 60);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (10, 10, 159, 60); // contour du bouton

}
else
{
button1=0;
//Boutton rouge
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect (10, 10, 159, 60);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (10, 10, 159, 60); // contour du bouton
}
etat = !etat; // on inverse la valeur de etat
delay (300); // on attend un peu
}

// test ecumeur
if ((y>=10) && (y<=60)&&(x>=169) && (x<=310)) // bouton ecumeur
{
if (etat == true) //
{
button2=1;
// boutton vert
myGLCD.setColor(0, 255, 0);
myGLCD.fillRoundRect (169, 10, 310, 60);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (169, 10, 310, 60); // contour du bouton
}
else
{
button2=0;
//Boutton rouge
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect (169, 10, 310, 60);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (169, 10, 310, 60); // contour du bouton
}
etat = !etat; // on inverse la valeur de etat
delay (300); // on attend un peu
}

// test brassage
if ((y>=65)&&(y<=110)&&(x>=10) && (x<=159)) // bouton brassage
{
if (etat == true) //
{
button3=1;
// boutton vert
myGLCD.setColor(0, 255, 0);
myGLCD.fillRoundRect (10, 65, 159, 110);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (10, 65, 159, 110); // contour du bouton
}
else
{
button3=0;
//Boutton rouge
myGLCD.setColor(255, 0, 0);
myGLCD.fillRoundRect (10, 65, 159, 110);
myGLCD.setColor(255, 255, 255); // Blanc
myGLCD.drawRoundRect (10, 65, 159, 110); // contour du bouton
}
etat = !etat; // on inverse la valeur de etat
delay (300); // on attend un peu
}
}
{
myGLCD.printNumI(button1,LEFT,198) ;// affichage de la valeur
myGLCD.printNumI(button2,RIGHT,198) ;// affichage de la valeur
myGLCD.printNumI(button3,CENTER,198) ;// affichage de la valeur
myGLCD.setColor(255,255,255); // blanc
myGLCD.print(“POMPE”, 35, 15);
myGLCD.print(“REMONTE”, 25, 35);
myGLCD.print(“ECUMEUR”, 180, 25);
myGLCD.print(“BRASSAGE”, 20, 78);

}
}
}

L’usage de la variable etat me parait “bizarre” cette variable est commune à tous les boutons ce qui est surprenant et doit sans doute être la cause de ton problème. D’autant qu’à mon sens elle fait double emploi avec les variables button1, button2 et button3.
Par exemple le test pour le premier bouton pourrait s’écrire ainsi

 // test bouton pompe remonte
  if ((y>=10) && (y<=60) &&(x>=10) && (x<=159))   // bouton remonte
      {
        if (button1== 0)   
        {
           button1=1;   // change l'état du bouton
           // boutton vert
           myGLCD.setColor(0, 255, 0);
           myGLCD.fillRoundRect (10, 10, 159, 60);
           myGLCD.setColor(255, 255, 255);  // Blanc
           myGLCD.drawRoundRect (10, 10, 159, 60);  // contour du bouton
   
        }
         else
        {
           button1=0;  // change l'état du bouton
           //Boutton rouge
           myGLCD.setColor(255, 0, 0);
           myGLCD.fillRoundRect (10, 10, 159, 60);
           myGLCD.setColor(255, 255, 255);  // Blanc
           myGLCD.drawRoundRect (10, 10, 159, 60);  // contour du bouton
        }
       delay (300);    // on attend un peu
  }

Ok merci je vais voir ça...