Clavier virtuel sur mega + lcd tft touchscreen

Bonjour,

J’ai crée un clavier numérique 0-9, retour,clear,entrer pour entrer ou modifier une valeur dans une variable “température” que j’affiche à coté du clavier.
Pour le clavier je récupère bien la valeur de la touche dans une variable “touche”.
Comment modifier “température” en fonction de “touche” et surtout comment gérer les touches
Retour et clear ?
Si quelqu’un a une idée car je bloque vraiment

Dans un deuxième temps je voudrais faire la même chose avec un clavier alpha pour pouvoir enregistrer
L’ensemble de mes variables sur SD d’après un nom et pouvoir les rappeler.

Je pense que cela peut être utile pour tout le monde dans une multitude d’application

Merci

clavg.bmp (225 KB)

tien voila le code que j’ai mi en place pour mon projet je me suis inspirer en grande partie de ce que j’ai trover sur http://www.mon-club-elec.fr/
aprés i te sufira d’utiliser les fonction atoi() ou atof()
pour convertier ton resultat qui est en char en int ou float a toi de voir
Ps: quel ecrant tu uttilise car tu a de beau dessin de touche?

/*________________________________________fonction clavier_____________________________*/

void Menu_clavier(char *tableauChar, int nbEntree){
    const char touchesMaj[5][10]PROGMEM = {
  {'0','1','2','3','4','5','6','7','8','9'},
  {'A','Z','E','R','T','Y','U','I','O','P'},
  {'Q','S','D','F','G','H','J','K','L','M'},
  {'W','X','C','V','B','N','.',':','-','!'},
  {'<','>',0,0,0,0,0,'_','@','/'}
};
const char touchesMin[5][10]PROGMEM = {
  {'0','1','2','3','4','5','6','7','8','9'},
  {'a','z','e','r','t','y','u','i','o','p'},
  {'q','s','d','f','g','h','j','k','l','m'},
  {'w','x','c','v','b','n','.',':','-','!'},
  {'<','>',0,0,0,0,0,'_','@','/'}
};

int Xposition=55;
int Yposition=90;
//static char Message=' ';
static byte indexDePosition=0;
int ligne;
int colone;
byte appui=0;
static boolean maj=false;

  switch (comptAff){
  case 0 :
    bandeau();
    lcd.drawTextPGM(5, 7, PSTR("   clavier"), 1, COLOR_WHITE,COLOR_BLACK );
   
  for (ligne=0; ligne<5;ligne++){
    for (colone=0;colone<10; colone++){      
       traceTouche(Xposition, Yposition,COLOR_BLACK,20,20,PSTR(" "),1); //trace les touches 
       if (maj==true){
       if (touchesMaj[ligne][colone]==0){ lcd.drawChar(Xposition-4,Yposition-4,' ',1,COLOR_WHITE,COLOR_BLACK);}
     else{lcd.drawChar(Xposition-4,Yposition-4,touchesMaj[ligne][colone],1,COLOR_WHITE,COLOR_BLACK);};//trace les caracter majuscule
     }else{
       if (touchesMin[ligne][colone]==0){ lcd.drawChar(Xposition-4,Yposition-4,' ',1,COLOR_WHITE,COLOR_BLACK);}
     else{lcd.drawChar(Xposition-4,Yposition-4,touchesMin[ligne][colone],1,COLOR_WHITE,COLOR_BLACK);};//trace les caracter minuscule
     };
     Xposition=Xposition+25;
  }
    Yposition=Yposition+25;
    Xposition=55;
  }
    traceTouche(283, 227,COLOR_BLACK,68,22,PSTR(" RETOUR"),1);
    traceTouche(39 , 227,COLOR_BLACK,68,22,PSTR("   MAJ"),1);
    traceTouche(117 , 227,COLOR_BLACK,68,22,PSTR("   MIN"),1);
    comptAff=1;
    break;
  case 1:
  lcd.printOptions(1,COLOR_WHITE,COLOR_BLACK);
    lcd.printXY(100,40);
    lcd.print(tableauChar);
    lcd.drawChar((100+(indexDePosition*8)),40,tableauChar[indexDePosition],1,COLOR_RED,COLOR_BLACK);//trace le caracter en cours en Rouge
    //lcd.fillRect((100+(indexDePosition*8)),40,(100+(indexDePosition*8)+8),(40+10),COLOR_BLACK);
  //lcd.drawChar(100,40,tableauChar,1,COLOR_WHITE,COLOR_BLACK);//trace les caracter
    break;
  };
  
   touchpad.service(); // appel de la routine service touchpad
  if (touchpad.getPressure()>10){ // si appui touchpad    
     
  for ( ligne=0; ligne<5;ligne++){
    for (colone=0;colone<10; colone++){
      
      if (testTouche((Xposition+(0*25)),(Yposition+(4*25)),20,20)==true){appui=1;indexDePosition=constrainCycle(indexDePosition-1,0,nbEntree-2);break;};
        if (testTouche((Xposition+(1*25)),(Yposition+(4*25)),20,20)==true){appui=1;indexDePosition=constrainCycle(indexDePosition+1,0,nbEntree-2);break;};
          
            if(testTouche((Xposition+(colone*25)),(Yposition+(ligne*25)),20,20)==true){
          #ifdef DEBUG_SERIAL    
       Serial.print("X="); Serial.println(Xposition+(colone*25));
        Serial.print("Y="); Serial.println(Yposition+(ligne*25));
        if (maj==true){Serial.print("Mess="); Serial.println(touchesMaj[ligne][colone]);}
      else{ Serial.print("Mess="); Serial.println(touchesMin[ligne][colone]); };
      #endif
      
       if (maj==true){tableauChar[indexDePosition]=touchesMaj[ligne][colone];}
     else{tableauChar[indexDePosition]=touchesMin[ligne][colone];};
      appui=1;
      indexDePosition=constrainCycle(indexDePosition+1,0,nbEntree-2);
      break;
     };   
  }
  if (appui==1){break;};
  }
 
    if(testTouche(283,227,68,22)==true){
      //delay(100);
      lcd.clear(couleur_fond);
      selecteurPage=selecteurPage/10;
      indexDePosition=0;
      comptAff=0;
    };
     if(testTouche(39,227,68,22)==true){
      maj=true;
      //delay(100);
      comptAff=0;
    };
    if(testTouche(117,227,68,22)==true){
      maj=false;
     // delay(100);
      comptAff=0;
    };
  };
return;}

Merci beaucoup je vais essayer......

Bonjour,

Le fonctionnement de tes librairies ont l'air assez differentes des miennes (UTFT),j'esperes reussir à les adapter....

j'ai un ecran 3,2 TFT 240X320 + SD de chez SAINSMART (avec quelques modif car des erreurs sur la carte adapt 5V -> 3.3V pour le lecteur sd). Je met les fichier de fond en bmp sur ma SD et je definis mes zones de contact du touchscreen dans mon prog et l'affichage de mes variables par dessus.

le temps d'affichage du BMP n'est pas trops long car sur le mien c'est une orreure ou alors je ne fait pas corectement les chose ! du coup chaque logo ou touche est un dessin fait en code pur !

as tu réusi a adapter le code ?

MINIXAV: j'ai un ecran 3,2 TFT 240X320 + SD de chez SAINSMART (avec quelques modif car des erreurs sur la carte adapt 5V -> 3.3V pour le lecteur sd).

Bonjour :), j'ai le même écran que toi, je n'ai pas encore essayé le lecteur SD car je n'ai pas de carte SD, pourrais-tu me dire quelle carte tu utilise (modèle, capacité..), et aussi est-ce que tu crois que j'aurais aussi des problèmes? En quoi consistent tes modifications exactement? J'utilise le shield adapteur pour brancher directement l'écran à l'arduino Mega. Merci :)

Et désolé de ne pas pouvoir répondre à ta question... peut-être que si tu montre ton code je pourrais y jeter un oeil :)

Bonjour,

Pour répondre a vos questions, j'ai abandonné le clavier numérique pour l'instant je modifie mes valeurs numériques avec deux boutons incrémentation décrémentation. Pour le Bmp (convertis en raw plus rapide) 1/2s à 1s pour afficher La modif pour la SD sur sainsmart V1.0 j'ai coupe la 2eme et 3eme piste en partant du bas _entre la pin51 et la 2eme résistance de 10K _entre la pin53 et la 3eme résistance de 10 K Et croiser les 2 pistes avec 2 fils en shuntant les résistances de 10k Shunt sur la première et la 4eme résistance de 10 k aussi les zener des cartes font le reste pour pour le 3.3V il reste encore les resistances de 2.2K