Go Down

Topic: [RESOLU] Afficher scroll barre sur Afficheur LCD (Read 3915 times) previous topic - next topic

Arioch

Nov 22, 2011, 05:31 pm Last Edit: Nov 29, 2011, 12:40 pm by Arioch Reason: 1
Bonjour, j'ai une petite question concernant un affichage sur un LCD 4x20.
Voila j'aimerais bien faire un menu, mais je me retrouve avec un peu plus d'option de menu que les 4 lignes de l'afficheur LCD.

Ma question est donc est'il possible de faire quelquechose de ce style sur le coté gauche de l'afficheur? fléche haut et fléche bas avec un curseur qui se déplace en fonction de là ou on se trouve dans le menu....

Je sais pas si je me fais bien comprendre donc je met un petit dessin de ce que j'aimerais faire....
Si c'est possible merci de me renvoyer vers un tuto, ou de donner des indices ;)

Snickers
..........................................
?Pizza
? Mars
? Twix
? Cahuétes
..........................................
Cake

Merci à vous ^^

skywodd

Bonjour,

Le plus simple (enfin je pense) : http://www.arduino.cc/playground/Code/Menu
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

al1fch

#2
Nov 22, 2011, 10:09 pm Last Edit: Nov 22, 2011, 10:15 pm by al1fch Reason: 1
Bonjour
Pour compléter la structure de menus indiquée par skywodd il est possible  de créer jusqu'à 8 'icônes' perso sur un afficheur alphanumérique.
http://arduino.cc/fr/Main/LcdcreateChar
http://forum.snootlab.com/viewtopic.php?f=34&t=154
Pacman içi : http://forum.snootlab.com/viewtopic.php?f=34&t=207

skywodd


Pour compléter la structure de menus indiquée par skywodd il est possible  de créer jusqu'à 8 'icônes' perso sur un afficheur alphanumérique.
http://arduino.cc/fr/Main/LcdcreateChar

Sinon dans le genre outil "online" bien sympa :
http://icontexto.com/charactercreator/

(cf le guide arduino ;))
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Arioch

Salut Salut, et merci pour vos infos.
Skywod, j'avais vu la lib Menu, mais vu que j'ai pas de submenu et que se sera un menu simple de configuration avec des oui ou non, voir des sélections de nombres, je me suis dit qu'avec un petite void se serait facile à faire...

al1fch, pour la création de caractére je pensais bien qu'il fallait que je passe par là mais aprés c'est la gestion dans le code pour faire défiler la barre qui me pose soucis, je vois pas trés bien comment la prendre (sans idée mal placé ^^), et en plus je voulais rajouter des char pour faire un compte à rebours sur deux lignes, ce qui me prends déja 4 espaces dispo dans la mémoire, ce qui me laisse jsute 4 espace dispo pour la création de cette scroll barre....

Bon ben je vais voir comment je peut faire, merci à vous.

Arioch

#5
Nov 28, 2011, 07:20 pm Last Edit: Nov 28, 2011, 07:28 pm by Arioch Reason: 1
Re, bon ben j'ai bidouillé un petit menu qui marche tout seul, faut que je vois si avec le reste il va tourner comme je le souhaite....

Voila le code, qui est pas top et qui doit étre retravaillé, surtout au niveau de l'affichage de string, histoire de raccourcir un peu le bouzin....
Lien Video


Code: [Select]
//NES Cablage, Voir ici < http://code.google.com/p/nespad/ > pour les couleurs de cables
// Blanc sur 5V
// Marron sur GND
// Jaune sur Arduino Digital pin 1
// rouge sur Arduino Digital pin 0
// orange sur Arduino Digital pin 2
#include "NESpad.h"
#include "LiquidCrystal.h"
NESpad nintendo = NESpad(2,0,1); // Mettre Pin NES strobe/clock/data correspondant pin Arduino Digital -- Voir Pin Out dans lib Pad NES
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);// initialize the library with the numbers of the interface pins
int BP_Actif=0;
int Clef_Actif=0;
int Code_Actif=0;
int Cable_Actif=0;
unsigned char Saisie_Temps[3]={0,0,0}; // crée un tableau de variables char pour saisir valeur
byte Compte_Rebours=0;
byte state = 0; // déclare Byte de réception signal PAD NES
byte Menu;
byte Etat_Pad=0;
byte Last_Etat_Pad=0;
byte UP[8] = {
  B00000,
  B00100,
  B01110,
  B11111,
  B00000,
  B00000,
  B00000,
  B00000
};
byte DOWN[8] = {
  B00000,
  B00000,
  B00000,
  B00000,
  B11111,
  B01110,
  B00100,
  B00000
};
byte SELECT[8] = {
  B00000,
  B00100,
  B00110,
  B11111,
  B00110,
  B00100,
  B00000,
  B00000
};
char* Menu_config[8]={
" Menu Configuration ",
"Bouton Poussoir",
"Serrure",
"Code",
"Cable Desamorce",
"Temps en Minute",
"Lancement Partie"};
char* Selection[3]={
"NON",
"OUI"
};
char* Clef[5]={
"AUCUNE",
"DROITE",
"GAUCHE",
"TOUTES"
};
char* Cable[7]={
"NON",
" x2",
" x3",
" x4",
" x5",
" x6"
};

void setup() {
lcd.createChar(0, UP);
lcd.createChar(1, DOWN);
lcd.createChar(2, SELECT);
// set up the LCD's number of columns and rows:
lcd.begin(20, 4);
// Print a message to the LCD.
lcd.setCursor(0,0);
lcd.print("Test LCD 20x4");
lcd.setCursor(0,1);
lcd.print("CFAH2004A-RGB-JP");
lcd.setCursor(0,2);
lcd.print("Pas beau du tout");
lcd.setCursor(0,3);
lcd.print("!!!!!!!!!!!!!!!!!!!!");
delay(1000);
lcd.clear();
}

void loop() {
state = nintendo.buttons();
Etat_Pad = state;
Menu = constrain(Menu, 1, 6);
if(Etat_Pad!=Last_Etat_Pad){
        if(state & NES_DOWN){
Menu ++;
lcd.clear();
}
        if(state & NES_UP){
            Menu --;
lcd.clear();
}
}
char* Val_Config[6] ={
Selection[BP_Actif],
Clef[Clef_Actif],
Selection[Code_Actif],
Cable[Cable_Actif],
000};
switch(Cable_Actif){
   case 0:
switch(Code_Actif){
case 0:
if(Menu >= 2){
lcd.setCursor(0,1);
lcd.write(0);
}
if(Menu < 6){
lcd.setCursor(0,3);
lcd.write(1);
}
lcd.setCursor(0,0);
lcd.print(Menu_config[0]);
switch(Menu){
case 1:
lcd.setCursor(0,1);
lcd.write(2);
lcd.setCursor(16,1);
lcd.write(2);
lcd.setCursor(1,1);
lcd.print(Menu_config[1]);
lcd.setCursor(1,2);
lcd.print(Menu_config[2]);
lcd.setCursor(1,3);
lcd.print(Menu_config[3]);
lcd.setCursor(17,1);
lcd.print(Val_Config[0]);
lcd.setCursor(14,2);
lcd.print(Val_Config[1]);
lcd.setCursor(17,3);
lcd.print(Val_Config[2]);
BP_Actif = constrain(BP_Actif, 0,1);
if(Etat_Pad!=Last_Etat_Pad){
if(state & NES_A)BP_Actif ++;
if(state & NES_B)BP_Actif --;
}
break;
case 2:
lcd.setCursor(0,2);
lcd.write(2);
lcd.setCursor(13,2);
lcd.write(2);
lcd.setCursor(1,1);
lcd.print(Menu_config[1]);
lcd.setCursor(1,2);
lcd.print(Menu_config[2]);
lcd.setCursor(1,3);
lcd.print(Menu_config[3]);
lcd.setCursor(17,1);
lcd.print(Val_Config[0]);
lcd.setCursor(14,2);
lcd.print(Val_Config[1]);
lcd.setCursor(17,3);
lcd.print(Val_Config[2]);
Clef_Actif = constrain(Clef_Actif, 0,3);
if(Etat_Pad!=Last_Etat_Pad){
if(state & NES_A)Clef_Actif ++;
if(state & NES_B)Clef_Actif --;
}
break;
case 3:
lcd.setCursor(0,2);
lcd.write(2);
lcd.setCursor(16,2);
lcd.write(2);
lcd.setCursor(1,1);
lcd.print(Menu_config[2]);
lcd.setCursor(1,2);
lcd.print(Menu_config[3]);
lcd.setCursor(1,3);
lcd.print(Menu_config[4]);
lcd.setCursor(14,1);
lcd.print(Val_Config[1]);
lcd.setCursor(17,2);
lcd.print(Val_Config[2]);
lcd.setCursor(17,3);
lcd.print(Val_Config[3]);
Code_Actif = constrain(Code_Actif, 0,1);
if(Etat_Pad!=Last_Etat_Pad){
if(state & NES_A)Code_Actif ++;
}
break;
case 4:
lcd.setCursor(0,2);
lcd.write(2);
lcd.setCursor(16,2);
lcd.write(2);
lcd.setCursor(1,1);
lcd.print(Menu_config[3]);
lcd.setCursor(1,2);
lcd.print(Menu_config[4]);
lcd.setCursor(1,3);
lcd.print(Menu_config[5]);
lcd.setCursor(17,1);
lcd.print(Val_Config[2]);
lcd.setCursor(17,2);
lcd.print(Val_Config[3]);
lcd.setCursor(17,3);
lcd.print(Val_Config[4]);
Cable_Actif = constrain(Cable_Actif, 0,5);
if(Etat_Pad!=Last_Etat_Pad){
if(state & NES_A)Cable_Actif ++;
if(state & NES_B)Cable_Actif --;
}
break;
case 5:
lcd.setCursor(0,2);
lcd.write(2);
lcd.setCursor(16,2);
lcd.write(2);
lcd.setCursor(1,1);
lcd.print(Menu_config[4]);
lcd.setCursor(1,2);
lcd.print(Menu_config[5]);
lcd.setCursor(1,3);
lcd.print(Menu_config[6]);
lcd.setCursor(17,1);
lcd.print(Val_Config[3]);
lcd.setCursor(17,2);
lcd.print(Val_Config[4]);
lcd.setCursor(17,2);
lcd.cursor();
delay(80);
break;
case 6:
lcd.setCursor(0,3);
lcd.write(2);
lcd.setCursor(1,1);
lcd.print(Menu_config[4]);
lcd.setCursor(1,2);
lcd.print(Menu_config[5]);
lcd.setCursor(1,3);
lcd.print(Menu_config[6]);
lcd.setCursor(17,1);
lcd.print(Val_Config[3]);
lcd.setCursor(17,2);
lcd.print(Val_Config[4]);
break;
}
break;
case 1:
lcd.setCursor(0,0);
lcd.print("     Taper code     ");
lcd.setCursor(0,1);
lcd.print("    sur  Clavier    ");
lcd.setCursor(0,2);
lcd.print("* Efface    # Valide");
lcd.setCursor(0,3);
lcd.print("    /Code Saisie/   ");
if(Etat_Pad!=Last_Etat_Pad){
if(state & NES_B)Code_Actif --;
lcd.clear();
}
break;
}
break;
case 1:
lcd.setCursor(0,0);
lcd.print(" Brancher Nombre de ");
lcd.setCursor(0,1);
lcd.print("    Cable Voulut    ");
lcd.setCursor(0,2);
lcd.print("/Affiche Nbr Cable/ ");
lcd.setCursor(0,3);
lcd.print("    /Validation/    ");
if(Etat_Pad!=Last_Etat_Pad){
if(state & NES_B)Cable_Actif --;
lcd.clear();
}
break;
}
Last_Etat_Pad=Etat_Pad;
}


Je reste ouvert à tout conseil  :smiley-roll:

Voili voilou

A+

skywodd

... une manette de NES, c'est trop la classe 8)

C'est du bon bouleau ton menu ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Arioch

Salut Salut, pour le PAD NES je trouvais ça sympa de l'inclure dans mon projet, je ne suis donc pas le seul à trouver ça classe ^^

Pour le code je pensais avoir des reproches"", mais non, donc je suis assez satisfait de moi....m'enfin me reste quand méme pas mal de modif à faire pour le rendre moins "lourd"

Merci à toi pour ton retour ;)

A+

Go Up