Ausgabe PCF8574 mit Pigpio (Wert in Schleife incrementieren)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Frank-86
User
Beiträge: 3
Registriert: Donnerstag 26. September 2019, 15:19

Ich verwende die Pigpio-Bibliothek (Python 3) und gebe ein Datenbyte über den I2C-Bus aus (siehe Beispiel). Nun kann ich einen Ausgabewert dezimal oder als Hexwert ausgeben.
Das ist ok. Wenn ich aber den Wert in einer Schleife incrementiere und dafür eine Variable verwende, kann ich diese Variable nicht in der Ausgabezeile schreiben.
Gibt es eine Möglichkeit, dies besser zu lösen.

Danke

Frank-86


#!/usr/bin/python3
# coding = utf-8
# PCF8574 Output
# 29.09.2019

import time, sys
import pigpio

pi = pigpio.pi()


# Initialisierung

h = pi.i2c_open(1, 0x20) # open device at address 0x20 on bus 1
time.sleep(1)

for i in range (0,10):

#pi.i2c_write_byte(1, 0xfe) # Datenbyte für Ausgabe
pi.i2c_write_byte(1, i) # Datenbyte für Ausgabe
time.sleep(1)


pi.i2c_close(h) # close device

try:
while True:
time.sleep(5)
except KeyboardInterrupt:
pi.stop()
sys.exit()

Sorry, wusste leider nicht, wie ich das kleine Programm einhängen kann.
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich verstehe nicht, was Du für ein Problem hast. Wo willst Du was wie ausgeben? An dem Code kann ich das nicht erkennen.

Die Fehlerbehandung ist falsch und sollte wohl so aussehen:

Code: Alles auswählen

#!/usr/bin/python3
# PCF8574 Output
# 29.09.2019
import time
import pigpio

def main():
    # Initialisierung
    pi = pigpio.pi()
    try:
        h = pi.i2c_open(1, 0x20) # open device at address 0x20 on bus 1
        time.sleep(1)
        for i in range(10):
            #pi.i2c_write_byte(1, 0xfe) # Datenbyte für Ausgabe
            pi.i2c_write_byte(1, i) # Datenbyte für Ausgabe
            time.sleep(1)
        pi.i2c_close(h) # close device
        while True:
            time.sleep(5)
    except KeyboardInterrupt:
        pass
    finally:
        pi.stop()

if __name__ == '__main__':
    main()
Frank-86
User
Beiträge: 3
Registriert: Donnerstag 26. September 2019, 15:19

Hallo Sirius3, danke für die schnelle Rückmeldung. Ich möchte in der Zeile " pi.i2c_write_byte(1, i) # Datenbyte für Ausgabe" immer einen um eins erhöhten Wert (bis 10) über den Portexpander ausgeben. Dabei gibt es einen Fehler, wenn ich die Variable "i" verwende. Das Klappt nur , wenn ein Dezimal- oder Hexwert anstelle von "i" steht. Siehe auskommentierte Zeile. An den Ausgängen des PCF8574 sind LEDs angeschlossen, die dann entsprechend eingeschaltet werden sollen. Wie schon gesagt, der PCF8574 wird am I2C-Bus betrieben und dazu wird die Bibliothek pigpio (Python) verwendet.
Ich hoffe, dass ich mich jetzt besser ausgedrückt habe. Deinen Vorschlag habe ich noch nicht getestet.

Die Fehlerbehandlung habe ich aus einem Buch übernommen.

Danke
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Was sagt denn die Fehlermeldung? Das würde ja schon weiterhelfen.
Frank-86
User
Beiträge: 3
Registriert: Donnerstag 26. September 2019, 15:19

Beim ersten Start wurde die Variable "i" moniert. Nach einem Reset wurde das Programm neu gestartet und funktioniert so, wie erwartet. Vielleicht macht der Dämon, mit "sudo pigpiod" gestartet Schwierigkeiten. Ich verwende einen Raspi 3b+, der über xrpd (Netzwerkkabel, Win 10 pro) bedient wird.

Danke für die Hilfe, werde noch ein paar Tests machen.
Antworten