Menu et Joystick - 4Display-Shield-160 avec Carte Arduino Uno

Bonjour,

Je dispose d'une carte 4Display-Shield-160 avec Carte Arduino Uno et j'ai créer un menu possédant trois choix et j'aimerais faire en sorte que un rectangle se déplacer sur les trois choix lorsque je bouge le joystick ( Haut, bas, haut, bas )

Je me suis aider de l'exemple du départ mais je m'y pert
Cela m'affiche les trois choix :

Cocktail 1
Cocktail 2
Cocktail 3

Le rectangle est de base sur cocktail 2 et en affiche un autre sur cocktail 1 lorsqu'on utilise le joystick vers le haut et inversement pour cocktail 3

Mon problème est que les rectangles restent

Pouvez vous m'aider avec le code ? ( Il faudrait que je le réduise mais je ne sais pas tout ce qu'il faut enlever )

Voici le code :

#define DisplaySerial Serial

#include "Goldelox_Serial_4DLib.h"
#include "Goldelox_Const4D.h"

Goldelox_Serial_4DLib Display(&DisplaySerial);



void Joystick_Tests(void)
{
#ifndef GOLDELOX_JOYSTICK
  
  #define DOWNPIN  2
  #define FIREPIN  5
  #define UPPIN    6
  pinMode(DOWNPIN, INPUT_PULLUP);
  pinMode(FIREPIN, INPUT_PULLUP);
  pinMode(UPPIN, INPUT_PULLUP);

#endif 
  
  int i ;
  int oldi ;
  Display.gfx_Cls() ;//Permet de ne pas faire réaparraitre le mot cocktail 
  Display.txt_Xgap(6);
  Display.txt_Height(3);
  
  Display.txt_FGcolour(GREEN);
  Display.putstr("COCKTAIL 1") ;
  
  Display.txt_FGcolour(YELLOW);
  Display.putstr("\n\n");
  Display.putstr("COCKTAIL 2");
  
  Display.txt_FGcolour(RED);
  Display.putstr("\n\n");
  Display.putstr("COCKTAIL 3");
  
  Display.txt_FGcolour(WHITE);
  
  i = -1 ;
  while (i != FIRE)
  {
    oldi = i ;
    
#ifdef GOLDELOX_JOYSTICK 
    
    i = Display.joystick() ;
    
#else
    
    if (digitalRead(DOWNPIN) == LOW)
      i = DOWN ;
    else if (digitalRead(FIREPIN) == LOW)
      i = FIRE ;
    else if (digitalRead(UPPIN) == LOW)
      i = UP ;
    else
      i = RELEASED ;
      
#endif 
    if (i != oldi)
    {
      switch (i)
      {
        case RELEASED :  Display.gfx_Rectangle( 140, 75, 0, 40, WHITE) ;
          break ; 
        case UP       :  Display.gfx_Rectangle( 140, 0, 0, 25, WHITE) ;
          break ;
        
        case DOWN     : Display.gfx_Rectangle( 140, 120, 0, 90, WHITE) ;
          break ; 
        
        case FIRE     : Display.putstr("  Fire  ") ;
          break ;
      }
    }
  }
  
}


void setup()
{
#ifdef LOG_MESSAGES
  HWLOGGING.begin(19200);
  
#endif
}

void loop()
{
  
  Display.TimeLimit4D   = 5000 ; // 2 second timeout on all commands
  DisplaySerial.begin(9600) ;
  
  Joystick_Tests() ;
  delay(5000) ;
  
}

Je vous remercie d'avance et si vous ne m'avez pas compris n'hésiter pas à me redemander

Bonjour,
Merci de mettre ton code entre balises en utilisant la touche #

Dans ton code on voit la création des rectangles mais pas leur effacement?
Peut-être faudrait-il créer quelque chose dans ce sens?

:wink:

Bonjour et merci de ta réponse !

J'ai mis mon code avec les balises

Je pense bien qu'il faut la rajouter cependant je ne la connais pas et ne sait pas ou vraiment la placé...

N'y a t-il pas possibiliter de réduire ce code ? J'ai l'impression qu'il y en a trop

Je connais pas ton shield mais il doit falloir faire comme un

Display.gfx_Rectangle( 140, 75, 0, 40, BLACK)

sur les parties ou tu le veux pas?

Oui mais cela veut dire que je devrais le rajouter deux fois pour chaque possibiliter soit 6 fois vu qu'il y a trois choix possible ...
N'y a t-il pas un moyen plus simple ? Même si il faut revoir le code ?
J'aimerais le simplifier mais je n'y arrive pas ( je suis débutant ... )