GPIO_interrupt-Steuerung

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
Leopard
Foriker
Beiträge: 17
Registriert: Di 8. Jan 2019, 15:49
Kontaktdaten:

GPIO_interrupt-Steuerung

Beitrag von Leopard » Mi 13. Feb 2019, 19:24

Hallo Gambas-Freunde,

ich habe mit Gambas meine ersten Schrittchen gemacht (Ein- ud Ausgabe von Signalen auf den Standard-GPIO funktioieren problemlos (ist ja auch kein Hexenwerk)).

Jetzt arbeite ich daran, spontan auftretende Zustandsänderungen an den Eingängen abfangen / auswerten zu können, ohne dabei über ein Zeitfunktion periodisch deren Zustand abzufragen (z.B. mit digitalRead(17)), um auch bei sehr schnell aufeinanderfolgenden Zustandsänderungen keine zu verpassen oder das System sehr stark zu belasten.

Mein aktueller Ansatz geht in die Richtung mit der Funktion wiringPiISR() aus der WiringPi-Bibliothek. Mit dem nachfolgenden (Mini-) Programm wird ein Form mit einem Label angezeigt.

Code: Alles auswählen

 ‘Um den nachfolgenden Code auszführen brauchst du ein Form und ein Label. 

Library "/usr/lib/libwiringPi"

Public Extern wiringPiSetupGpio() As Integer
Public Extern pinMode(pin As Integer, pud As Integer)
Public Extern pullUpDnControl(pin As Integer, mode As Integer)
Public Extern digitalRead(pin As Integer) As Integer
Public Extern digitalWrite(pin As Integer, value As Integer)
Public Extern wiringPiISR(aa As Integer, bb As Integer, cc As Pointer) 

Public TestZaehler_FunktionAufruf As Integer

Public Sub Form_Open()

TestZaehler_FunktionAufruf = 0

wiringPiSetupGpio()

pinMode(17, 0)     'GPIO17 soll ein Eingang sein

TestFunktion1()
'ruft zu Testzwecken die Function TestFuktion1 auf

wiringPiISR(17, 1, TestFunktion1)


Public Function TestFunktion1()
' 'Diese Function wird aufgerufen, wenn am GPIO17 ein Ereignis aufgetreten ist: steigende Flanke 

TestZaehler_FunktionAufruf = TestZaehler_FunktionAufruf + 1

Label1.Text = "Die Function Testfunktion1 wurde " & TestZaehler_ProzedurAufruf & " Mal aufgerufen"

End


Das kleine Projekt startet ohne Fehler. Wenn ich jedoch an den GPIO17 (Pin11) 3,3V (Pin1) anlege, kommt folgende Fehlermeldung:

Bild

Leider hab ich keine zielführende Hilfe oder Hinweise zu "wiringPiISR()" gefunden, schon gar nicht im Zusammenhang mit Gambas.
In der Bibliothek pigpio habe ich auch keine vergleichbare Funktion gefunden, mit der ein Interrupt-Ereignis ausgewertet werden könnte. Vor langer Zeit habe ich sowas schon mal in Python realisiert. Vielleicht kann man das ja mit einer Shell-Anweisung erreichen, da kenne ich mich aber nicht aus. Ich bin für jede Hilfe dankbar.

Viele Grüße von

Leopard
Dateianhänge
Bildschirmfoto vom 2019-02-07 19-13-19mod.png
Bildschirmfoto vom 2019-02-07 19-13-19mod.png (79.03 KiB) 23 mal betrachtet

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste