Lesen ob Stromkreis geschlossen ist mit C#

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo!

    Ich habe an einen Raspberry eine LED mit Widerstand angeschlossen. Diese lässt sich mittels eines C# Programmes und dem Nuget-Paket "System.Device.Gpio" problemlos ein und ausschalten. Jetzt möchte ich zusätzlich einen Taster einbauen. Im Programm soll erkannt werden ob der Taster gedrückt ist oder nicht bzw. ob der Stromkreis offen oder geschlossen ist. Mein Code sieht bis jetzt so aus:

    Angeschlossen ist das ganze an Pin 17 und 24. Leider wird mir im Programm immer "High" als Status angezeigt, egal ob der Taster gedrückt ist oder nicht. Hat jemand einen Tipp wo der Fehler liegt?

  • Moin spooky,

    wie setzt System.Device.Gpio denn Pin-Nummer zu GPIO um?

    Pin24 ist GPIO8 und auch SPI CS0 als Funktion.

    73 de Bernd

    //EDIT Eben erst gesehen. Du kann nur "1" auslesen. Du schaltest gegen Pin17 = 3,3Volt. Und du hast einen Pullup gesetzt.

    Schalte mal gegen Minus/GND!!

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    Einmal editiert, zuletzt von Bernd666 (2. November 2021 um 12:22)

  • Moin spooky,

    ich kommentiere mal die Zeilen.

    Code
    int pin24 = 24;
    
    GpioController controller = new GpioController();   // Zuweisung Klasse
    
    controller.OpenPin(pin24, PinMode.InputPullUp);   // Pin als Eingang und Pullup schalten
    
    controller.Write(pin24, PinValue.High);    // Und das schaltet Pin24 HIGH?? Was aber nicht gehen sollte, weil Eingang 
                                               // und darum überflüssig

    Zeigst du, bitte, mal den ganzen Code?!

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin spooky,

    danke für den Code.

    Warum nutzt du in allen buttonX_Click  den pin15 = 22? Aber auch in dieser Funktion:

    private void backgroundWorker1_DoWork.

    Beschreibe doch mal was du alles anschliessen willst.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Danke schonmal für deine Mühe ;)

    Ist eigentlich nur Copy und Paste. Ich weiß das der Code gekürzt bzw. stark vereinfacht werden kann. Aber für Testzwecke und weils schnell gehen sollte eben C&P.

    Ich brauche eigentlich nur den einen Taster. Die LED ist nicht wichtig.

  • Sry, ich glaube es macht keinen guten Eindruck wenn ich meinen Test Code mit den vielen unnötigen Buttons so einfach poste. Ich poste den Code deswegen nochmals so wie er ungefähr aussehen sollte wenn das ein fertiges Programm (GUI oder Konsole) werden sollte:

    Der Raspberry soll später einfach nur eine Meldung zB per Mail schicken wenn der Taster geschlossen ist. Das ganze würde ich gerne für längere Zeit in einer Dauerschleife so laufen lassen. Ich kann mir leider trotzdem nicht erklären warum das Programm den geschlossenen (Hardware) Taster nicht erkennt. Bei den Buttons lief alles einwandfrei, auch die LED lässt sich ein und ausschalten.

  • Beitrag von Bernd666 (2. November 2021 um 22:06)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Moin spooky,

    int pin15 = 22;

    Damit ist der Pin22(GPIO25) gemeint. Da hast du auch den Taster dran?

    Die andere Seite des Tasters geht an GND?

    Du drückst auch mal länger als eine Sekunde. So lang dauert die Pause!

    Ich habe hier keine Programmierumgebung für C#.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Taster und LED sind richtig angeschlossen. Im Terminal überprüft und da klappts.

    Ich bin draufgekommen was das Problem ist. Der Befehl

    Code
    controller.Read(pin15)

    liest nicht den Zustand des Pins aus, sondern nur die Pinnummer. Deswegen kommt immer true als Antwort zurück. Scheint mit C# nicht so einfach zu sein das auszulesen. Werde das ganze mit einen anderen Nuget Packet austesten. Für Device.Gpio finde ich leider nichts wies richtig gemacht wird.

    Trotzdem vielen Dank für deine Hilfe!

  • Moin spooky,

    keine Ahnung ob für dich das Thema noch aktuell ist..

    Aber was meintest du mit

    Bei den Buttons lief alles einwandfrei, auch die LED lässt sich ein und ausschalten.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!