Hallo Zusammen,
ich komme bei einem Thema einfach nicht weiter und bitte um Eure Unterstützung.
ich weiß auch nicht, ob meine Vorgehensweise richtig / sinnvoll ist.
ich habe an einem PICO 2 (SPI) ein TFT-Touch-Screen angeschlossen.
Soweit funktifunktionieren das TFT und der Touch.
Ich habe die Konfiguration der SPI, des TFT's und des TOUCH in eine separate Datei ausgelagert.
Ich kann in der main.py Elemente erstelllen und auf dem TFT darstellen. Auch der Interrupt von Touch funktioniert. Leider nich so wie er soll.
Mein angedachter Programmaufbau:
main.py
from hardware.py import *
import programm
TFT = config_tft()
TOUCH = config_touch(TFT)
def touch_main_press(x, y):
print(f"MAIN: X: {x}, Y: {y}")
# wenn x,y in einem bestimmten Bereich liegen
print("Programm starten")
programm.prog_start(TFT, TPUOUCH)
# Interrupt für den Touch umstellen auf "touch_main_press"
TOUCH.int_pin.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING,
int_handler = touch_main_press)
print("main-prog")
Display More
hardware.py
from machine import Pin, SPI
from ili9341 import *
from xpt2046 import *
spi = SPI(0, baudrate=10000000, bits=8, firstbit=SPI.MSB, polarity=0, phase=0,
sck=Pin(18), mosi=Pin(19), miso=Pin(16))
class config_tft(Display):
def __init__(self):
super().__init__(spi, cs=Pin(9), rst=Pin(21), dc=Pin(20),
width=240, height=320, rotation=90, mirror=False,
bgr=False, gamma=False, x_offset=0, y_offset=0)
TFT = Display(spi, cs=Pin(9), rst=Pin(21), dc=Pin(20),
width=240, height=320, rotation=90, mirror=False,
bgr=False, gamma=False, x_offset=0, y_offset=0)
TFT_BL = PWM(Pin(15, Pin.OUT))
TFT_BL.freq(1000)
TFT_BL.duty_u16((0xffff * (100)) // 100)
TFT.invert(True)
TFT.clear()
class config_touch(Touch):
def __init__(self, TFT):
super().__init__(spi, cs=Pin(8),
int_pin=Pin(22), int_handler=self.touch_class_press,
width=240, height=320, x_min=198, x_max=3979, y_min=292, y_max=380)
self.TOUCH = Touch(spi, cs=Pin(8),
int_pin=Pin(22), int_handler=self.touch_class_press,
width=240, height=320, x_min=198, x_max=3979, y_min=292, y_max=380)
def touch_class_press(self, x, y):
print(f"CLASS: X: {x}, Y: {y}")
Display More
programm.py
def touch_prog_press(x, y):
print(f"MAIN: X: {x}, Y: {y}")
# Interrupt für den Touch umstellen auf "touch_main_press"
TOUCH.int_pin.irq(trigger=Pin.IRQ_FALLING | Pin.IRQ_RISING,
int_handler = touch_prog_press)
def prog_start(TFT, TOUCH):
print("programm")
Mein Problem:
wenn ich main.py starte, reagiert der Pico auf den Touch, jedoch führt er die Funktion touch_class_press aus der hardware.py und nicht die touch_main_press aus der main.py aus.
Später sollen in der main.py vier Felder erstelt werden.
Wenn eines der Felder angetippt wird, soll ein weiteres Programm gestartet werde.
Der TFT und der Touch wird dann übergeben und der Interrupt für den Touch im Programm neu gesetzt werden.
ich hoffe, ich konnte mich verständlich ausdrücken. ![]()
Mein Gedanke ist, den Quellcode der einzelnen Programme (main, Hardwareconfig und Prog...) zu separieren und übersichtlicher zu gestallten.
Meine Fragen:
- Ist mein Gedankenansatz / Vorgehensweise richtig?
- wie kann ich, den Interrupt-handler für den TOUCH, im neuen Programm ändern?
- gibt es eine besser vorgehensweise?
grüße aus dem Sauerland
Stefan
- Imprtiert die hardware.py