Hi Achim,
Achim Seeger schrieb:
> Hat keiner eine Idee wie ich das machen kann?
Der Zustand der vier Taster am Taster-Portexpander kommt zwar als Byte
an, ein einzelner Taster schaltet von diesen 8 Bit aber nur ein
einzelnes Bit ein oder aus.
Der Zustand der vier LEDs am LED-Portexpander wird zwar als Byte
geschrieben, eine einzelne LED repräsentiert aber nur ein einzelnes Bit
von diesen 8 Bit.
Das Bit eines Tasters bildest Du mit Deiner Software auf das Bit
derjenigen LED ab, die diesem Taster entsprechen soll. Du hast also 4
Input-Bits, die Du auf 4 Output-Bits abbildest. Und damit Du nicht die
drei anderen LEDs beeinflusst, wenn Du den Zustand einer einzelnen
änderst, merkst Du Dir immer den Zustand aller LEDs, manipulierst diesen
Zustand und sendest den an den LED-Portexpander.
Ein Bit setzt man am anschaulichsten z.B. mit
var sei ein uint8_t, 6 ist Bit 6. Bits fängt man bei 0 an zu bezeichen,
also Bit 0 bis 7 eines Bytes.
Ein Bit löscht man z.B. mit
Hier wird Bit 0 von var gelöscht.
Ob ein Bit gesetzt ist, prüft man z.B. mit
Hier wird Bit 7 geprüft. Der Ausdruck ist True, wenn es gesetzt ist,
andernfalls False.
Solltest Du in den geposteten Links mal nachlesen. Daß Du das nicht von
Heute auf Morgen kapierst, ist kein Beinbruch. Jeder fängt mal an.
Und nun prüfst Du das Input-Byte vom Taster-Portexpander einzeln auf
alle vier Tasterbits ab und setzt in einer Variable pro Taster das Bit
der LED, das diesem Taster entspricht, wenn dieser Taster gedrückt ist.
Ist er nicht gedrückt, löschst Du das Bit dieser LED. Bei negativer
Logik (ist bei Dir wohl der Fall), löschst Du das LED-Bit bei gedrückter
Taste und setzt es, wenn die Taste nicht gedrückt ist.
Diese Variable speichert den Zustand der LEDs. Den sendest Du zum Schluß
an den LED-Portexpander.
Diese Variable braucht noch einen Initialzustand. Bei negativer Logik
(active low) und alle LEDs ausgeschaltet ist dieser 0xff (== 255 == 0377
== 0b11111111), bei positiver Logik (active high) 0x00.
Diese Variable muß so lange leben, wie Du die Taster zum Schalten der
LEDs benutzen willst, also vermutlich immer.
Active low: Bit = 0 -> LED an, Bit = 1 -> LED aus
Active high: umgekehrt
Welche LED zu welchem Bit gehört, siehst Du daran, an welchem Pin des
Portexpanders es angeschlossen ist, und am Datenblatt des Portexpanders.
Grüße, Markus