Logo Mon Club Elec

Test du Touchpad d’un afficheur graphique couleur 320×240

Le Touchpad est un élément essentiel de tout afficheur graphique couleur 320×240. Il permet aux utilisateurs de naviguer et d’interagir avec leurs appareils. Dans ce test, nous allons examiner le Touchpad d’un afficheur graphique couleur 320×240 afin de déterminer ses performances et sa qualité. Nous allons évaluer sa précision, sa sensibilité et sa réactivité, ainsi que sa facilité d’utilisation et sa durabilité. Nous allons également examiner les fonctionnalités supplémentaires qu’il offre et comment elles peuvent améliorer l’expérience utilisateur. Enfin, nous allons comparer le Touchpad à d’autres produits similaires afin de déterminer s’il est le meilleur choix pour les utilisateurs.

Test du Touchpad d’un afficheur graphique couleur 320×240

Test du Touchpad d’un afficheur graphique couleur 320×240

(cliquer sur l’image pour agrandir)

1.  Présentation

Test du Touchpad de l’afficheur graphique couleur 320×240 de chez Watterott.

Ce programme utilise les fonctionnalités suivantes :

Ressources utiles associées à ce programme :

2.  Matériel Nécessaire

2.1  L’espace de développement Arduino

  • … pour éditer, compiler le programme et programmer la carte Arduino.
Test du Touchpad d’un afficheur graphique couleur 320×240

2.2  Le matériel suivant pour réaliser le montage associé

Test du Touchpad d’un afficheur graphique couleur 320×240
  • Watterrott propose également un circuit imprimé de compatibilité pour la carte Arduino à coupler avec cet adaptateur d’écran , le mSD-shield (15 Euros) : http://www.watterott.com/de/Arduino-mSD-Shield L’utilisation est alors très simple puisqu’il suffit d’enficher le module sur la carte Arduino.
Test du Touchpad d’un afficheur graphique couleur 320×240
  • avec touchpad ADS7846 intégré à l’écran MI0283QT2
Test du Touchpad d’un afficheur graphique couleur 320×240

3.  Instructions de montage

  • Connexions à réaliser pour adaptateur écran MI0283QT2 240×320 pixels – 262 K couleurs

Note : ces connexions sont réalisées automatiquement si utilisation du circuit imprimé mSD-shield

  • Broches utilisées pour le contrôle de l’afficheur graphique
    • broche CS de l’adaptateur sur la broche 7
    • broche RST de l’adaptateur sur la broche 8
    • broche LED de l’adaptateur sur la broche 9
  • broches utilisées pour la communication SPI de l’adaptateur MI0283QT2
    • broche SDI de l’adaptateur sur la broche 11
    • broche SDO de l’adaptateur sur la broche 12
    • broche SCL de l’adaptateur sur la broche 13

4.  Le circuit du montage

Test du Touchpad d’un afficheur graphique couleur 320×240

Le schéma du montage à réaliser (cliquer pour agrandir)

5.  Explication du programme

5.1  Au niveau de la partie déclarative :

  • Déclaration des objets afficheur graphique et touchpad
  • Déclaration d’une constante utilisée avec le touchpad pour la calibration.

5.2  Au niveau de la fonction d’initialisation setup( ) :

  • Initialisation de l’écran et du touchpad
  • A noter l’appel de la fonction de calibration qui sera activée si l’Eeprom ne contient pas de paramètres de calibration.

5.3  Au niveau de la boucle principale, la fonction loop ( ) :

  • On appelle à intervalle régulier la fonction service() du touchpad.
  • Ensuite, on a accès à différentes fonctions qui permettent de tester le touchpad :
    • getPressure() pour connaître le niveau de pression sur l’afficheur
    • getX et get Y pour connaître les coordonnées du point appuyé sur l’écran

Le programme est globalement très commenté : bien lire les commentaires pour comprendre ce que l’on fait.

5.4  La fonction de calibration

  • Cette fonction est nécessaire au paramétrage initial du touchpad. Voir les commentaires pour les détails.

6.  Mise en oeuvre du programme

6.1  Préparation du montage et programmation de la carte Arduino :

  • Commencer par réaliser le montage indiqué sur plaque d’expérimentation
  • Ensuite, programmer la carte Arduino avec ce programme (en bas de page) selon la procédure habituelle

6.2  Fonctionnement

  • La première fois, on voit 3 petits cercles successifs qui vont permettre de calibrer le touchpad : appuyer sur chaque cercle de calibrage.
  • Une fois le calibrage réalisé, un point s’affiche à l’endroit où le stylet appuie et la pression et les coordonnées sont affichées sur l’écran en continu. Trop top !

7.  Le programme complet en langage Arduino

A copier/coller directement dans l’éditeur Arduino

// — Programme Arduino —
// Trame de code générée par le générateur de code Arduino
// du site www.mon-club-elec.fr

// Auteur du Programme : X. HINAULT – Tous droits réservés
// Programme écrit le : 20/10/2010.

// ——- Licence du code de ce programme —–
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License,
//  or any later version.
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

// ////////////////////  PRESENTATION DU PROGRAMME ////////////////////

// ——– Que fait ce programme ? ———
 /* Test des fonctions getPressure, getX et getY
    du touchpad avec affichage des valeurs au format texte
    et du point courant sur l’écran
 */

// — Fonctionnalités utilisées —

// Utilise adaptateur pour écran MI0283QT2 240×320 pixels – 262 K couleurs
// Utilise le touchpad ADS7846 intégré de l’écran MI0283QT2

// ——– Circuit à réaliser ———

// Connexions à réaliser pour adaptateur écran MI0283QT2 240×320 pixels – 262 K couleurs
// ces connexions sont réalisées automatiquement si utilisation du circuit imprimé mSD-shield

// —– broches utilisées pour le contrôle de l’afficheur graphique
// broche CS de l’adaptateur sur la broche 7
// broche RST de l’adaptateur sur la broche 8
// broche LED de l’adaptateur sur la broche 9

// —– broches utilisées pour la communication SPI de l’adaptateur MI0283QT2
// broche SDI de l’adaptateur sur la broche 11
// broche SDO de l’adaptateur sur la broche 12
// broche SCL de l’adaptateur sur la broche 13

// /////////////////////////////// 1. Entête déclarative ///////////////////////
// A ce niveau sont déclarées les librairies incluses, les constantes, les variables, les objets utiles…

// — Déclaration des constantes —

// — Inclusion des librairies —
#include <MI0283QT2.h> // librairie de l’afficheur TFT MI0283QT2
// Avant utilisation, faut installer manuellement cette librairie
// dans le dossier <Libraries> du dossier Arduino

#include <ADS7846.h> // inclusion de la librairie pour le touchpad
// Avant utilisation, faut installer manuellement cette librairie
// dans le dossier <Libraries> du dossier Arduino
#define TOUCHPAD_EEPROMADDR (0x00) //adresse eeprom des données de calibration du touchpad

// — Déclaration des constantes des broches E/S numériques —

// — Déclaration des constantes des broches analogiques —

// — Déclaration des variables globales —
int posX=0; // variable position courante renvoyée par drawText
int pression=0, X=0, Y=0; // variable X,Y appui touchpad

// — Déclaration des objets utiles pour les fonctionnalités utilisées —

MI0283QT2 lcd; // création d’un objet de type MI0283QT2 appelé lcd

ADS7846 touchpad; // création un objet touchpad de type ADS7846

// ////////////////////////// 2. FONCTION SETUP = Code d’initialisation //////////////////////////
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// — ici instructions à exécuter 1 seule fois au démarrage du programme —

// ——- Initialisation fonctionnalités utilisées ——-  

//initialisation écran MI0283QT2  240×320 pixels
lcd.init(4); //spi-clk = Fcpu/4
lcd.clear(RGB(255,255,255)); // efface ecran en blanc

//—- initialisation du touchpad de l’afficheur
touchpad.init(); // initialisation du Touchpad
touchpad_calibration(); // appelle la fonction de calibration du touchpad – voir code après fonction loop

//configuration écran MI0283QT2  240×320 pixels – après calibrage touchpad
lcd.setOrientation(270); // configure orientation afficheur en degrés : 0,90,180,270
// Par défaut 0 = point 0,0 en regard connecteur USB

lcd.clear(RGB(255,255,255)); // efface ecran en blanc
lcd.led(50); // fixe luminosité

//—- configuration du touchpad de l’afficheur  – après calibrage touchpad
touchpad.setOrientation(270); // configure orientation touchpad en degrés : 0,90,180,270
// Par défaut 0 = point 0,0 en regard connecteur USB
// IMPORTANT : touchpad et afficheur doivent avoir la meme orientation !

// ——- Broches en sorties numériques ——-  

// ——- Broches en entrées numériques ——-  

// ——- Activation si besoin du rappel au + (pullup) des broches en entrées numériques ——-  

} // fin de la fonction setup()
// ********************************************************************************

////////////////////////////////// 3. FONCTION LOOP = Boucle sans fin = coeur du programme //////////////////
// la fonction loop() s’exécute sans fin en boucle aussi longtemps que l’Arduino est sous tension

void loop(){ // debut de la fonction loop()

// — ici instructions à exécuter par le programme principal —

    touchpad.service(); // lance la fonction de service du touchpad
    // acquisition des coordonnées x,y et pressure si appui – modif des variables public

    //—- affiche valeur pression —
    pression=touchpad.getPressure(); // renvoie la valeur courante de la pression sur le touchpad
    posX=0; //réinitialise posX
    posX=lcd.drawText(0,0,« Pression= »,2,bleu,blanc);
    posX=lcd.drawText(posX,0,pression,2,rouge,blanc);
    posX=lcd.drawText(posX,0, »  « ,2,bleu,blanc); // espace de propreté

    //—- affiche valeur X  —
    X=touchpad.getX(); // renvoie la valeur courante de X du touchpad
    posX=0; //réinitialise posX
    posX=lcd.drawText(0,20,« X= »,2,bleu,blanc);
    posX=lcd.drawText(posX,20,X,2,rouge,blanc);
    posX=lcd.drawText(posX,20, »  « ,2,bleu,blanc); // espace de propreté

    //—- affiche valeur Y  —
    Y=touchpad.getY(); // renvoie la valeur courante de Y du touchpad
    posX=0; //réinitialise posX
    posX=lcd.drawText(0,40,« Y= »,2,bleu,blanc);
    posX=lcd.drawText(posX,40,Y,2,rouge,blanc);
    posX=lcd.drawText(posX,40, »  « ,2,bleu,blanc); // espace de propreté

    //————- affiche le point d’appui ————-
    lcd.drawPixel(X,Y,bleu);

} // fin de la fonction loop() – le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// ////////////////////////// AUTRES FONCTIONS DU PROGRAMME ////////////////////

//—- fonction de calibration du touchpad
void touchpad_calibration(void) {

  int i; // variable locale utilisée par la fonction

  // crée un tableau des 3 points de calibration pour le LCD
  // le type CAL_POINT est une structure de 2 long x et y
  // les valeurs CAL_POINT_X1, CAL_POINT_Y1, etc… sont préfinies cf ADS7846.h
  CAL_POINT lcd_points[3] = {{CAL_POINT_X1,CAL_POINT_Y1},
                             {CAL_POINT_X2,CAL_POINT_Y2},
                            {CAL_POINT_X3,CAL_POINT_Y3}};

 // crée un tableau de 3 points de calibration pour le touchpad
 CAL_POINT touchpad_points[3], *p;

  // si des données de calibration existent déjà, sort de la fonction de calibration
  // ceci évite de calibrer à chaque fois, mais uniquement au premier lancement programme
  // Le nombre d’écriture en EEPROM est limité : on pourra donc calibrer le touchpad uniquement au premier lancement
  if(touchpad.readCalibration(TOUCHPAD_EEPROMADDR)) {
    return;
  }

  // répète tant que pas prise en compte de 3 appuis – 1 appui pour chaque point de calibration
  i = 0;
  do {

    //affiche le point de calibration pour la valeur de i (affiche 3 cercles)
    lcd.drawCircle(lcd_points[i].x, lcd_points[i].y, 1, RGB(0,0,255)); // mini cercle bleu au point de calibration courant
    lcd.drawCircle(lcd_points[i].x, lcd_points[i].y, 4, RGB(0,255,0)); // petit cercle vert centré sur point calibration courant
    lcd.drawCircle(lcd_points[i].x, lcd_points[i].y, 8, RGB(255,0,0));// cercle rouge centré sur point calibration courant

    touchpad.service(); // lance la fonction de service du touchpad
    // acquisition des coordonnées x,y et pressure si appui – modif des variables public

    if(touchpad.getPressure() > 5) { // si la pression sur le touchpad supérieure à 5 = si un appui a eu lieu
      touchpad_points[i].x = touchpad.getXraw(); // mémorise la valeur X renvoyée par le touchpad non calibré
      touchpad_points[i].y = touchpad.getYraw(); // mémorise la valeur Y renvoyée par le touchpad non calibré
      i++; // incrémente i seulement si un appui a eu lieu.. l’appel de service se fait en boucle si pas appui
      lcd.clear(RGB(255,255,255)); // efface l’écran en blanc entre chaque point de calibration
    } // fin if getPressure() > 5

  }while(i<3); // répète lecture touchpad tant que pas 3 appuis – 1 pour chaque point de calibration

  //calcule la calibration du touchpad en faisant correspondre les valeurs X,Y du lcd
  // et les valeurs X,Y du touchpad obtenues à l’aide des points de calibration
  touchpad.setCalibration(lcd_points, touchpad_points);

  // enregistre en eeprom la matrice des valeurs de calibration du touchpad
  // la calibration est mémorisée meme après mise hors tension de la carte Arduino
  touchpad.writeCalibration(TOUCHPAD_EEPROMADDR);
  // Le nombre d’écriture en EEPROM est limité : on pourra donc calibrer le touchpad uniquement au premier lancement

} //——————- fin fonction calibration touchpad ————-

// ////////////////////////// Fin du programme ////////////////////

 

Noter cet article

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Archive Mon Club Elec

Articles populaires

Newsletter

Inscrivez-vous maintenant et bénéficiez d'un soutien continu pour réaliser vos travaux électriques en toute sécurité.