ArduiTouch 3 - Dessin sur l'écran tactile


Dans cet article, je voudrais voir Bibliothèque touchevent Show.Il permet de réagir facilement à des événements sur un écran tactile.Vous pouvez facilement télécharger la Bibliothèque de github et la copier au Répertoire arduino Libraries.Dans l 'exemple, un programme de démonstration affiche l' application.Sur la base de ce programme de démonstration, je vais expliquer les fonctions de la bibliothèque dans le présent document.

En tant que matériel, nous en avons besoin. Adouci. Avoir Processeur esp32.

Code:

 

 

Cet exemple illustre l 'utilisation de la Bibliothèque touchevent.
 * Il utilise un écran TFT de 2,4 pouces et un écran tactile résistif.
 * les écrans utilisent le Contrôleur ili9341.
 * L'écran tactile est xpt2046.
 * Ce module est utilisé avec esp32, mais tous les autres modules
 * Le processeur compatible arduino devrait pouvoir fonctionner.
 Pour les pieds tubulaires utilisés, voir la définition dans le Code
 */

/ / bibliothèque nécessaire
"35; y compris <Protéine de séparation de soja.Heure>
"35; y compris "Fruit"
"35; y compris "Fruit" ili9341.h.
"35; y compris <écran tactile xpt2046.Heure>
"35; y compris <Source/Espace libre.Heure> / / police utilisée 5

"35; y compris Touch Event

/ / autres aiguilles utilisées
\ 35; définitions TFT - CS   5      / / sélection de puces stratifiées
\ 35; définitions TFT DC   4      / / affichage d / C
\ 35; définitions TFT - Mosi 23     Lichen
\ 35; définitions Horloge TFT  18     / / Afficher l 'horloge
\ 35; définitions Température d 'huile  22     Display Reset
\ 35; définitions TFT misère 19     Display MISO
\ 35; définitions Diode électroluminescente TFT  15     / / afficher le contexte del


\ 35; définitions Touche le CS. 14     Sélection de puce d 'écran tactile
\ 35; définitions Touche l 'IRQ 2     / / interruption d 'écran tactile


/ / préparation de l 'affichage et Programme d' entraînement d 'écran tactile
Fruits il9341 Type T = Fruits il9341(TFT - CS, TFT DC, Température d 'huile);
écran tactile xpt2046 Toucher(Touche le CS., Touche l 'IRQ);

/ init touchevent avec pointeur pointant vers un pilote d 'écran tactile
événement de contact Vingt.(Toucher);

/ / quelques variables globales
Paysage intérieur Silicium contrôlable = 0;
UNIT16 standard Généralités[4] = {Il9341 blanc,Il9341 rouge,Il9341 - U vert,Il9341 jaune};
Point ts Charger;
Type booléen Peinture;

Cas de carte
Nullité Aller simple(Royaume - Uni Toi.) {   Conversion(Toi.) {     CAS 0: Si (Silicium contrôlable <3) { / / passer de droite à gauche à l 'écran suivant         Silicium contrôlable++;         écran de dessin(Silicium contrôlable);       }       Rompre;     CAS 1: Si (Silicium contrôlable > 0) { / / passer de gauche à droite à l 'écran précédent         Silicium contrôlable--;         écran de dessin(Silicium contrôlable);       }       Rompre;   }   Vingt..Paramétrer un mode de dessin(Silicium contrôlable==0);
}

Nullité Onclick(Point ts Page) {   Si (Silicium contrôlable > 0) { / / afficher la position du clic sur tout écran autre que 0     Type T.Définir la police(&Espace libre);     Type T.Filerect(0,40,240,70,Il9341 blanc);     Type T.Settextcolor(Il9341 noir,Il9341 blanc);     Type T.Définir le curseur(10,60);     Type T.Imprimer(Clic);     Type T.Imprimer(Page.Dix.);     Type T.Imprimer(Page.Oui.);   }
}

Nullité Double - clic de la souris(Point ts Page) {   Si (Silicium contrôlable > 0) { / / afficher la position du double clic sur tout écran autre que 0     Type T.Filerect(0,40,240,70,Il9341 blanc);     Type T.Définir la police(&Espace libre);     Type T.Settextcolor(Il9341 noir,Il9341 blanc);     Type T.Définir le curseur(10,60);     Type T.Imprimer(Double - clic);     Type T.Imprimer(Page.Dix.);     Type T.Imprimer(Page.Oui.);   } Heure de départ prévue {     Vingt..Paramétrer un mode de dessin(Faux);   }
}

Nullité Propriété d 'événement(Point ts Page) {   / / dessiner une ligne de la dernière position à la position actuelle   Si (Peinture) Type T.Tirer la corde(Charger.Dix.,Charger.Oui.,Page.Dix.,Page.Oui.,Il9341 noir);   Charger = Page;
}

Nullité Entouch(Point ts Page) {   Charger = Page;   Peinture = Vraiment?;
}

Nullité Onuntouch(Point ts Page) {   Peinture = Faux;
}

Nullité Clic long(Point ts Page) {   Si (Silicium contrôlable > 0) { / / afficher la position du double clic sur tout écran autre que 0     Type T.Définir la police(&Espace libre);     Type T.Filerect(0,40,240,70,Il9341 blanc);     Type T.Settextcolor(Il9341 noir,Il9341 blanc);     Type T.Définir le curseur(10,60);     Type T.Imprimer("Clic long");     Type T.Imprimer(Page.Dix.);     Type T.Imprimer(Page.Oui.);   }
}

Nullité Set() {   Télécharger.Allez.(115200);   Mode pinmode(Diode électroluminescente TFT, Output);   écriture numérique(Diode électroluminescente TFT, Haut);    / / ouvrir l 'affichage   / / démarrage du pilote   Type T.Allez.();   Toucher.Allez.();   / / afficher la résolution d 'affichage   Télécharger.Imprimer("Tftx ="); Télécharger.Imprimer(Type T.Largeur()); Télécharger.Imprimer("Fty ="); Télécharger.Imprimer(Type T.Altitude());   / / init - touchevent   Vingt..Résolution(Type T.Largeur(),Type T.Altitude());   Vingt..Setdblclick(300);   Vingt..Essuie - glace tactile(Aller simple);   Vingt..Enregistrer un clic tactile(Onclick);   Vingt..Registeron touchdblick(Double - clic de la souris);   Vingt..Registeron touchlong(Clic long);   Vingt..Tactile Diagram(Propriété d 'événement);   Vingt..Enregistrement(Entouch);   Vingt..Enregistrement(Onuntouch);   / / affichage
 écran de dessin(Silicium contrôlable);
}

/ / remplir des écrans de différentes couleurs pour différents numéros d 'écran
Nullité écran de dessin(Royaume - Uni Non.) {   Type T.écran de fichiers(Généralités[Non.]);   Type T.Définir la police(&Espace libre);   Type T.Settextcolor(Il9341 noir,Il9341 blanc);   Type T.Définir le curseur(10,20);   Type T.Imprimer("Numéro d'écran.);   Type T.Imprimer(Non.);    }

Nullité Run() {   Vote d 'événement tactile   Vingt..écran tactile Poll();
}

La classe touchevent extrait la valeur courante de l 'écran tactile et tente de détecter un événement dans sa fonction principale, Poll Touchscreen ().Si un événement est détecté et qu 'une fonction de rappel est enregistrée pour cet événement, cette fonction est appelée à l' emplacement actuel des coordonnées d 'écran.Une exception est une fonction de retour de l 'événement swipe, dans laquelle la direction du Mouvement d' effacement est transmise comme paramètre.

Vous pouvez enregistrer une fonction de retour pour les événements suivants.

 

  • Ontouchdown (point TS - U p) Cliquez ici pour toucher l 'écran.
  • Ontouchup (espace (point TS - U p) Cette fonction est toujours appelée lorsque l 'écran touche à sa fin.
  • Entouchclick (non valable) (point TS - U p) Cette fonction est appelée lorsque vous touchez l 'écran.Le contact ne doit pas dépasser le temps prévu pour un clic long.(1 secondes par défaut)
  • Point TS - UCette fonction est appelée lorsque l 'écran est touché deux fois brièvement par le cou intérieur pendant une durée presque réglable (500 millisecondes par défaut).Chaque double clic déclenche un événement de clic lors du premier clic.
  • Ontouchlong (point TS - U p) Cette fonction est appelée lorsque l 'écran tactile est au moins une fois réglable (1S par défaut).Dans ce cas, l 'événement du clic n' est pas déclenché.
  • Ontouchdraw (point TS - U p) Cette fonction est appelée lorsque le point de contact est modifié pendant le contact.Movethreshold (valeur par défaut de 10) peut être utilisé pour ajuster la sensibilité.L 'événement n' est appelé que si le mode dessin est actif.
  • Ontouchswipe (Direction uint8 - U - t) Appelle cette fonction lorsque l 'écran est supprimé.La longueur minimale de nettoyage peut être fixée à X (valeur par défaut = 500) et y (valeur par défaut = 700).La fonction est orientée comme paramètre.0 = de droite à gauche, 1 = de gauche à droite, 2 = de haut en bas, 3 = de bas en haut.Si le mode de dessin N 'est pas activé, l' événement ne sera pas déclenché.

Voici un résumé de toutes les fonctions de cette catégorie:

  • Poll Touchscreen ();
    Demande la position actuelle de l 'écran tactile et appelle la fonction de rappel enregistrée en fonction de l' événement détecté
  • Résolution de jeu d 'espace (int16u - t - X, int16u - t - yrresolution);
    La résolution de pixel de l 'écran peut être définie (240 et 320 par défaut)
  • Void - setdrawmode (burdrawmode);
    Ouvre ou désactive le mode de caractères (paramétré par défaut comme désactivé).
  • étalonnage nul (UNIT16 à xmin, UNIT16 à ymin, UNIT16 à xmax, UNIT16 à ymax);
    Pour étalonner un écran tactile.Ces valeurs indiquent le coin supérieur gauche et le coin inférieur droit dans les coordonnées de l 'écran tactile (les valeurs par défaut sont 230, 350, 3700 et 3900).
  • Définir un seuil de déplacement (seuil UNIT16 'U - t);
    Définit la modification des coordonnées de l 'écran tactile (valeur par défaut de 10) qui doit intervenir lors de la détection de l' événement ondraw.
  • Essuie - glace (interrupteur Unit 16u T, interrupteur unit16u t);
    Définit une longueur d 'effacement dans les coordonnées de l' écran tactile pour détecter un événement d 'effacement (valeur par défaut = 500700).
  • Void setlongclick (unit16u t - clicklong);
    Définit le temps nécessaire pour détecter la longueur du clic du contact (millisecondes) (valeur par défaut de 1000 millisecondes).
  • Double - cliquez sur le blanc (bint16u t - dbclick);
    Définit la durée maximale (millisecondes) de détection de double clics entre deux clics (la valeur par défaut est de 500 millisecondes).
  • Void registerontouchdown (void (* retour) (TS - U point p));
    Enregistre la fonction de retour pour l 'événement ontouchdown.
  • Void registertouchup (void (* retour) (TS - U point p));
    Enregistre la fonction de retour pour l 'événement ontouchup.
  • Void registerontouchclick (void (* Callback) (TS - U - point p));
    Enregistre la fonction de retour pour l 'événement ontouchclick.
  • Void registerontouchdblick (void (* Callback) (TS - U point p));
    Enregistrer la fonction de retour pour l 'événement ontouchdblclick.
  • Void registerontouchlong (void (* retour) (TS - U point p));
    Enregistre la fonction de retour pour l 'événement ontouchlong.
  • Void registerontouchdraw (void (* retour) (TS - U point p));
    Enregistre la fonction de retour pour l 'événement ontouchdraw.
  • Void Register touchswipe (void) (Return) (Point 8 u) t));
    Enregistre la fonction de retour pour l 'événement onswipdown.
  • Brisinarea (point TS - U p, int 16 u t x1, int 16 u t Y1, int 16 u t x2, int 16 u t y2);
    Si le point P est dans le rectangle x1, Y1 et x2, Y2, la fonction auxiliaire renvoie whar.

 

Une fois le programme de démonstration lancé, l 'écran 0 de la première page est affiché dans un arrière - plan blanc.Sur cette page, le modèle de caractères est actif et vous pouvez le dessiner avec des doigts ou un crayon plus souple et plus obtus.

Double - cliquez pour terminer le mode caractère.Vous pouvez nettoyer entre les deux côtés.Page 1 de l 'arrière - plan rouge, page 2 jaune, page 3 verte.Lorsque vous passez à la page 0, le mode caractères s' active automatiquement à nouveau.

Amusez - vous bien à cliquer et à essuyer.

 

AfficheEsp-32Projets pour avancé

3 commentaires

OlliBaba

OlliBaba

Der Touch funktioniert nur mit 2 Änderungen:
Für das 2,4" mod Touch Display muss es heißen:
#define TOUCH_IRQ 27 //touch screen interrupt 27 anstatt 2 bei altem Display
und die Änderung von Manfred muss auch drin stehen:
digitalWrite(TFT_LED, LOW); // Display-Beleuchtung einschalten —>LOW nicht HIGH

André

André

Ja,
digitalWrite(TFT_LED, LOW); // Display-Beleuchtung einschalten
ist richtig
Die Lösung für die Touch fuktion ist:
Jumper von GPIO2 entfernen!
Für den TouchScreen Interrupt wird der GPIO2 Pin verwendet, der zum Flashen des ESP32 auf Low sein muss. Da der Interrupt Ausgang des Touchscreen Controller einen Pull Up Widerstand hat ist dieser Pin nicht auf Low, sodass das Hochladen des Programms nicht funktioniert.

Manfred

Manfred

Der Touch funktioniert nicht !
Diese Zeile ist falsch ,
digitalWrite(TFT_LED, HIGH); // Display-Beleuchtung einschalten
digitalWrite(TFT_LED, LOW); // Display-Beleuchtung einschalten
das ist richtig!
was ist noch falsch ?

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés

Messages de blogs recommandés

  1. Installez maintenant ESP32 via l'administrateur de la carte
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA-Over the Air-ESP Programmation par WiFi