smbus readAD

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

    ich habe ein Programm geschrieben, in dem Analogwerte eingelesen werden sollen. Dies funktionierte bislang immer wunderbar, doch nun möchte ich das Einlesen der Werte über eine eigene Class machen, ich habe mal ein Beispielcode erzeugt:

    nun taucht dort immer folgende Fehlermeldung auf:

    Traceback (most recent call last):
    File "/home/pi/Desktop/test.py", line 22, in <module>
    test_thread = threading.Thread(target=test())
    File "/home/pi/Desktop/test.py", line 13, in __init__
    self.einlesen()
    File "/home/pi/Desktop/test.py", line 17, in einlesen
    an0 = readAD()
    NameError: name 'readAD' is not defined

    warum ist readAD nicht definiert? wenn ich das ganze ohne Klasse mache geht es, was muss ich tun, damit es auch mit einer Klasse funktioniert?

    Vielen Dank im Voraus.

    Yoyoba


    PS: das Print ("init") habe ich nur zu testzwecken um zu sehen ob er in das Unterprogramm hineingeht.

    Einmal editiert, zuletzt von yoyoba (20. Dezember 2015 um 20:17)

  • Diese Programm macht zwar etwas, aber ganz bestimmt nicht das, was du glaubst was es tut.

    Du leitest von Thread ab, aber dann uebergibtst du das an einen Thread als Target - das ergibt keinen Sinn. Und der einzige Grund, warum es so aussieht, als ob es halbwegs richtig ist, ist der, dass du in deiner Klasse auch schen bei Konstruktion eine Endlosschleife betrittst - das ist stilistisch bloede (weil es dem Programmierer, der deine Klasse benutzt, keinen Hinweis darauf gibt, dass dem so ist).

    Das, was du wirklich willst sieht ungefaehr so aus:

  • Danke für die Antwort, obwohl das Thema gelöst schien. Leider verstehe ich nicht ganz, wie die "def run" gestartet wird in deinem Beispiel?

    Eine Frage habe ich noch, will keinen neuen Thread aufmachen wenn ich hier scheinbar grade den richtigen für die Antwort habe :D

    Wie starte ich im folgenden Beispiel die zweite Klasse, es wird immer nur die erste Klasse aufgerufen bzw "test1" geprinted.

    Hier mein Code:


    Besten Dank!

    Yoyoba

  • Du musst dir dringet mal die Dokumentation des Moduls threading.Thread durchlesen. Dann wird auch klar, warum "run" automatisch aufgerufen wird. Und du hast schon wieder denselben Fehler gemacht, wie in deinem ersten Skript: du erzeugst eine Instanz einer Klasse "eins,' und rufst dann gleich darauf "test1" auf - dadurch wird gleich die while-Schleife betreten - und der zweite Thread nie gestartet (der erste auch nicht).

    Ausserdem hast du offensichtliche Fehler hier - timesleep gibt es nicht. Bitte poste Code, der auch laeuft, nicht Code, den du aus dem Kopf wiedergegeben hast!

    In der Dokumentation steht klar, warum: target ist ein "callable", soll heissen: ein Ding, das der Thread im Hintergrund aufruft. DU darfst das aber nicht aufrufen, sonst funktioniert das mit dem threading ja gar nicht.

    So geht es:

Jetzt mitmachen!

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