Skip to content

Instantly share code, notes, and snippets.

@ypelletier
Created June 14, 2021 19:38
Show Gist options
  • Save ypelletier/84327434d393a1589bceece3b1375a90 to your computer and use it in GitHub Desktop.
Save ypelletier/84327434d393a1589bceece3b1375a90 to your computer and use it in GitHub Desktop.
Exemple d'utilisation de l'écran tactile ILI9341 avec un Raspberry Pi Pico.
'''
Exemple d'utilisation de l'écran tactile ILI9341
avec un Raspberry Pi Pico.
Des boutons à l'écran peuvent être touchés pour
afficher des formes géométriques.
Plus d'informations:
https://electroniqueamateur.blogspot.com/2021/06/utilisation-dun-ecran-tactile-tft-spi.html
'''
from machine import Pin, SPI
# Pour les 3 fichiers ci-dessous:
# https://github.com/rdagger/micropython-ili9341
import ili9341
from xglcd_font import XglcdFont
from xpt2046 import Touch
# définition de quelques couleurs
rouge = ili9341.color565(255, 0, 0)
vert = ili9341.color565(0,255, 0)
bleu = ili9341.color565(0,0, 255)
blanc = ili9341.color565(255, 255, 255)
noir = ili9341.color565(0,0,0)
# position des boutons
bouton1 = (20, 170, 120, 40) # x, y, largeur, hauteur
bouton2 = (175, 170, 120, 40)
# c'est la routine qui est déclanchée lorsque l'écran
# envoie un signal sur la broche "interrupt"
def routine_touch(x, y):
# inversion des coordonnées x et y (car mode paysage)
x, y = y, x
y = 240 - y
# a-t-on cliqué sur le premier bouton?
if ((x > bouton1[0]) and (x < bouton1[0] + bouton1[2])
and (y > bouton1[1]) and (y < bouton1[1] + bouton1[3])):
# on efface le dessin précédent
display.fill_rectangle(0, 0, 320, 150, noir)
# on affiche le dessin choisi
display.fill_circle(160, 80, 60, vert)
# a-t-on cliqué sur le deuxième bouton?
if ((x > bouton2[0]) and (x < bouton2[0] + bouton2[2])
and (y > bouton2[1]) and (y < bouton2[1] + bouton2[3])):
# on efface le dessin précédent
display.fill_rectangle(0, 0, 320, 150, noir)
# on affiche le dessin choisi
display.fill_rectangle(60, 40, 200, 100, rouge)
# initialisation de l'affichage en mode paysage (rotation 90)
spiTFT = SPI(0, baudrate=40000000, sck=Pin(6), mosi=Pin(7))
display = ili9341.Display(spiTFT, dc=Pin(13), cs=Pin(15), rst=Pin(14),
width=320, height=240, rotation = 90)
spiXPT = SPI(1, baudrate=1000000,sck=Pin(10), mosi=Pin(11), miso=Pin(8))
#initialisation du capteur tactile
xptTouch = Touch(spiXPT, cs=Pin(12), int_pin=Pin(2),
int_handler = routine_touch,
x_min=128, x_max=1919, y_min=224, y_max=1963)
# (x_min, x_max, y_min et y_max sont les valeurs ajustées pour mon écran)
# chargement de la police de caractère
unispace = XglcdFont('fonts/Unispace12x24.c', 12, 24)
# Affichage du message initial
display.draw_text(0, 50, 'Veuillez faire votre choix', unispace,
ili9341.color565(255, 128, 0))
#dessin du premier bouton
display.fill_rectangle(bouton1[0], bouton1[1], bouton1[2], bouton1[3], rouge)
display.draw_rectangle(bouton1[0], bouton1[1], bouton1[2], bouton1[3], blanc)
display.draw_text(bouton1[0]+20, bouton1[1]+6, 'Cercle', unispace, blanc,rouge)
#dessin du deuxième bouton
display.fill_rectangle(bouton2[0], bouton2[1], bouton2[2], bouton2[3], bleu)
display.draw_rectangle(bouton2[0], bouton2[1], bouton2[2], bouton2[3], blanc)
display.draw_text(bouton2[0]+4, bouton2[1]+6, 'Rectangle', unispace, blanc,bleu)
while True:
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment