ArduiTouch 3 - Zeichnen am Touch Screen - AZ-Delivery


En este artículo, me gustaría ver Biblioteca touchevent Actuación.Hace que sea muy fácil reaccionar a los eventos en la pantalla táctil.Puede descargar fácilmente la Biblioteca de github y copiarla al catálogo de ediciones Ardino.En el ejemplo se muestra una aplicación de demostración.Sobre la base de esta demostración, explicaré en este documento las funciones de la biblioteca.

Como hardware, lo necesitamos. - adotoshi. Tener CPE esp32.

Código:

 

 

* Este ejemplo ilustra el uso de la Biblioteca touchevent
 Usa una pantalla TF de 2,4 pulgadas y una pantalla de tocador de resistencia eléctrica
 * controladores ilii9341 para monitores
 La pantalla táctil es xpt2046
 * Este módulo se utiliza junto con el esp32, pero cualquier otro módulo
 Los procesadores compatibles de arduino deberían funcionar
 Para los pies de tubo utilizados, consulte la definición del Código
 */

/ / / biblioteca necesaria
35; incluye <Proteína de separación.Hora>
35; incluye Fruta.
35; incluye Fruit, i.l.9341.h.
35; incluye <Pantalla táctil xpt2046.Hora>
35; incluye <Fuente/Espacio libre 9pt7b.Hora> / / / tipo de letra usado 5

35; incluye Contacto.

/ / / alfileres usados
- definición. TF - CS   5      / / / selección del chip estratificado
- definición. FTF Stream   4      / / / mostrar D / C
- definición. TDT - Mosi 23     / / / musgo
- definición. Reloj txt  18     / / / mostrar el reloj
- definición. Temperatura del aceite de transmisión  22     Mostrar la recaída
- definición. Tot miso 19     - Sí.
- definición. TDT diodos emisores de luz  15     Mostrar Fondo LED


- definición. Tocar CS 14     / / selección de chips de pantalla táctil
- definición. Tocar IRQ 2     Fallo de pantalla táctil


Preparad monitores y controladores de pantalla táctil
Fruit il9341 Tipo t = Fruit il9341(TF - CS, FTF Stream, Temperatura del aceite de transmisión);
Pantalla táctil xpt2046 Tocar(Tocar CS, Tocar IRQ);

/ / init touchevent con una aguja que apunta al Controlador de la pantalla táctil
Evento de contacto Veinte(Tocar);

/ / / algunas variables globales
Interior Silicio controlado = 0;
Criterios uint16 Antecedentes[4] = {Ili 9341 blanco,Ili 9341 rojo,Ili9341 - u verde,Ili 9341 amarillo};
Punto t Cargar;
Tipo booleano Pintura;

Incidente de tarjeta de crédito
Nulidad Ida(Reino Tu) {   Conversión(Tu) {     Casos 0: Si (Silicio controlado <3) { De derecha a izquierda a la siguiente pantalla         Silicio controlado++;         Imprimir pantalla(Silicio controlado);       }       Romper;     Casos 1: Si (Silicio controlado > 0) { / / / de izquierda a derecha a la pantalla superior         Silicio controlado--;         Imprimir pantalla(Silicio controlado);       }       Romper;   }   Veinte.Modo de dibujo(Silicio controlado==0);
}

Nulidad Oncrick Inc.(Punto t Página 2) {   Si (Silicio controlado > 0) { / / / mostrar la posición de clic en cualquier pantalla con excepción de 0     Tipo t.Tipo de letra(&Espacio libre 9pt7b);     Tipo t.Filerect Inc.(0,40,240,70,Ili 9341 blanco);     Tipo t.Settextcolor Company(Ili 9341 negro,Ili 9341 blanco);     Tipo t.Establecer cursor(10,60);     Tipo t.Imprimir("CLIC");     Tipo t.Imprimir(Página 2.Diez);     Tipo t.Imprimir(Página 2.Sí.);   }
}

Nulidad Doble ratón(Punto t Página 2) {   Si (Silicio controlado > 0) { / / / visualizar posición de doble pulsación en cualquier pantalla excepto 0     Tipo t.Filerect Inc.(0,40,240,70,Ili 9341 blanco);     Tipo t.Tipo de letra(&Espacio libre 9pt7b);     Tipo t.Settextcolor Company(Ili 9341 negro,Ili 9341 blanco);     Tipo t.Establecer cursor(10,60);     Tipo t.Imprimir(Doble golpe.);     Tipo t.Imprimir(Página 2.Diez);     Tipo t.Imprimir(Página 2.Sí.);   } Hora prevista de despegue {     Veinte.Modo de dibujo(Falso);   }
}

Nulidad Propiedades del evento(Punto t Página 2) {   / / / dibujar una línea desde el último lugar a la posición actual   Si (Pintura) Tipo t.La soga.(Cargar.Diez,Cargar.Sí.,Página 2.Diez,Página 2.Sí.,Ili 9341 negro);   Cargar = Página 2;
}

Nulidad Ontouch Inc.(Punto t Página 2) {   Cargar = Página 2;   Pintura = ¿En serio?;
}

Nulidad Onutouch Inc.(Punto t Página 2) {   Pintura = Falso;
}

Nulidad Sólo clic largo(Punto t Página 2) {   Si (Silicio controlado > 0) { / / / visualizar posición de doble pulsación en cualquier pantalla excepto 0     Tipo t.Tipo de letra(&Espacio libre 9pt7b);     Tipo t.Filerect Inc.(0,40,240,70,Ili 9341 blanco);     Tipo t.Settextcolor Company(Ili 9341 negro,Ili 9341 blanco);     Tipo t.Establecer cursor(10,60);     Tipo t.Imprimir("Clic largo");     Tipo t.Imprimir(Página 2.Diez);     Tipo t.Imprimir(Página 2.Sí.);   }
}

Nulidad Configuración() {   Transporte.Iniciar(115200);   Modo pinmode(TDT diodos emisores de luz, Salida);   Escritura digital(TDT diodos emisores de luz, Alto);    Abrir presentación   / / / iniciar el controlador   Tipo t.Iniciar();   Tocar.Iniciar();   Resolución de visualización   Transporte.Imprimir("Tftx ="); Transporte.Imprimir(Tipo t.Anchura()); Transporte.Imprimir("FY ="); Transporte.Imprimir(Tipo t.Altura());   / / ejemplo de init touchevent   Veinte.Resolución de configuración(Tipo t.Anchura(),Tipo t.Altura());   Veinte.Configuración de setdlclick(300);   Veinte.Secador táctil(Ida);   Veinte.Clic de Touchdown(Oncrick Inc.);   Veinte.Registerendontouchdbclick(Doble ratón);   Veinte.Registerendontouchlong Inc.(Sólo clic largo);   Veinte.Diagrama de contacto(Propiedades del evento);   Veinte.Registro de aterrizaje(Ontouch Inc.);   Veinte.Acondicionamiento de registro(Onutouch Inc.);   / / / mostrar
 Imprimir pantalla(Silicio controlado);
}

Rellenar pantallas de diferentes colores para diferentes números de pantalla
Nulidad Imprimir pantalla(Reino No) {   Tipo t.Pantalla de archivo(Antecedentes[No]);   Tipo t.Tipo de letra(&Espacio libre 9pt7b);   Tipo t.Settextcolor Company(Ili 9341 negro,Ili 9341 blanco);   Tipo t.Establecer cursor(10,20);   Tipo t.Imprimir("Número de pantalla.);   Tipo t.Imprimir(No);    }

Nulidad Correr() {   Voto por incidente de Touchdown   Veinte.Pantalla táctil();
}

La categoría touchevent recupera los valores actuales de la pantalla táctil en su función principal, polltouchscreen () e intenta detectar el incidente.Si se detecta un incidente y se registra una función de realimentación para ese acontecimiento, se llama a esta función desde la posición actual en las coordenadas de la pantalla.Una excepción es la función de rotación del suceso de swipe, en que se borra la dirección móvil como transmisión de parámetro.

Se puede registrar una función de respuesta para los siguientes eventos.

 

  • Ontouchdown (punto TS - u) Llama a esta función cuando toques la pantalla.
  • Ontouchup (hueco (punto TS - u p) Cuando la pantalla se toca, siempre se llama esta función.
  • Ontouchclick (punto TS - u) Esta función se llama al tocar la pantalla brevemente.El contacto no puede superar el tiempo establecido para hacer clic sobre una larga duración.(predeterminado 1 segundo)
  • Ontouchdbclick (TS - u Point p)Llama a esta función cuando la pantalla se toque brevemente dos veces en el cuello interior de un tiempo casi ajustable (predeterminado 500 ns).Cada evento de doble pulsación activará un evento de pulsación en la primera pulsación.
  • Ontouchlong (punto TS - u) Marque esta función cuando toque la pantalla al menos una vez para ajustar el tiempo (predeterminado 1s).En este caso, el hecho de hacer clic no se activará.
  • Ontouchdraw (punto TS - u) Esta función se llama al cambiar el punto de contacto durante el contacto.El muestreswold (valor por defecto de 10) puede utilizarse para ajustar la sensibilidad.Sólo se llama evento si el modo de "dibujar" está activo.
  • Ontouchswipe (dirección uit8 - u t) Llama a esta función cuando se borre la pantalla.La longitud mínima de la limpieza puede fijarse en X (valor predeterminado = 500) y y (valor predeterminado = 700).La función se basa en la dirección como parámetro.0 = de derecha a izquierda, 1 = de izquierda a derecha, 2 = de arriba a abajo, 3 = de abajo a arriba.Si el patrón de dibujo no está activado, el evento no se activará.

A continuación se resumen todas las funciones de esta categoría:

  • Polltouchscreen ();
    Consulta la posición actual de la pantalla táctil y llama a la función de eco registrada sobre la base de los eventos detectados
  • Resolución de la colección intersticial (resolución int16u t x, resolución int16u T - resolución);
    Resolución pixel (predeterminada 240 y 320) para pantallas
  • Void set drawmode (bourdrawmode);
    Abrir o cerrar modo de carácter (predeterminado para cerrar).
  • Calibración inválida (uint16 a xmin, uint16 a ymin, uint16 a xmax, uint16 a ymax);
    Para calibrar la pantalla táctil.Estos valores indican la esquina superior izquierda y la esquina inferior derecha de la pantalla táctil en las coordenadas 230, 350, 3700 y 3900.
  • Umbral móvil (umbral uit16 'u t);
    Cambios en las coordenadas de la pantalla táctil (valor predeterminado: 10) necesarios para detectar el incidente de ondraw.
  • Limpieza de espacios abiertos (interruptor Unión 16u T, interruptor Unión 16u t);
    Establezca la longitud de la borrar en las coordenadas de la pantalla táctil para detectar el incidente de borrar (valor predeterminado = 500700).
  • Void settlongclick (uint16u T clicklong);
    Establecer el tiempo (MS) necesario para hacer clic sobre la larga duración de la prueba de contacto (con un valor predeterminado de 1.000 ms).
  • Doble clic en blanco (uint16u T dblclick);
    Establezca el tiempo máximo (MS) de detección de doble pulsación entre las dos pulsaciones (con un valor predeterminado de 500 ms).
  • Void registernontouchdown (void (* Return) (TS - u Point p));
    Función de respuesta registrada para el incidente de ontuchdown.
  • Void registertouchup (void (* Return) (TS - u Point p));
    Función de respuesta registrada para el incidente de ontuchup.
  • Void registernontouchclick (void (* Callback) (TS - u Point p));
    Registro de la función de eco del evento de ontucclick.
  • Void registernon touchdbclick (void (* Callback) (TS - u Point p));
    Función de respuesta registrada para el incidente de ontuchdbclick.
  • Void registernontouchlong (void (* Return) (TS - u Point p));
    Registro de la función de retransmisión para el incidente de touchlong.
  • Void registernontouchdraw (void (* Return) (TS - u Point p));
    Registro de la función de retransmisión para el incidente de ontouchdraw.
  • Dispositivo de registro void touchswipe (void) (en dirección uit8 u t));
    Registro de la función de eco de eventos de onswipdown.
  • Boisnarea (punto TS - U, punto 16 u t X1, punto 16 u t Y1, punto 16 u t X2, punto 16 u t y2);
    Si el punto P está en un rectángulo X1, Y1 y X2, Y2, la función auxiliar se devuelve a whar.

 

Una vez iniciado el programa de demostración, la primera página "pantalla 0" se muestra en un fondo blanco.En esta página, el patrón de caracteres es es activo y puede dibujar con un dedo o un lápiz más suave.

Las dos pulsaciones terminarán el modo del carácter.Ahora puedes limpiar entre los dos lados.En la página 1 del Fondo rojo, la página 2 amarilla, la página 3 Verde, haga clic en todas las páginas excepto en la página 0, haga doble clic y mantenga la posición.Al cambiar a la página 0, el modo de carácter se activará automáticamente de nuevo.

Disfruta el placer de pulsar y limpiar.

 

DisplaysEsp-32Projekte für fortgeschrittene

3 comentarios

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 ?

Deja un comentario

Todos los comentarios son moderados antes de ser publicados