Ampelschaltung - LED steuer mit Bit un Byte

Hallo Zusammen,

ich bin relativer neu Anfänger und habe das Buch "Die elektronische Welt mit Arduino entdecken".

Hier bin ich bei dem Kapitel zur Ampelschaltung angekommen und im letzten Teil geht es darum die 5 LED (3x Auto und 2x Fußgängerampel) mit einem Byte zu steuern. Doch das verstehe ich nicht (ich weiß nicht ob es am Buch oder an mir liegt).

Es geht eigentlich um Erweiterung ab Seite 285 in dem Buch wo ich nicht mehr weiterweiß.

Ich würde mich freuen, wenn mir das hier noch mal jemand erklären könnte.

Viele Grüße,
Patrick

DieStatemachine.pdf (961 KB)

stell bitte eine konkrete Frage was du nicht verstehst. Denn so kann ich nur interpetieren:

auf Seite 285 wird das Ampelbild in einem Byte abgespeichert. Dazu wird jeder Ampel eine Bit-Position zugewiesen. Ist das Bit gesetzt, leuchtet die Ampelfarbe, bei 0 ist sie aus.

ausgewertet wird dann das gesetzte Bit durch eine logische Undverknüpfung. Wenn das Bit gesetzt ist und mit 1 "verundet" wird, dann weist du also, dass die Ampelfarbe eingeschaltet werden soll.

Mehr lese ich da nicht raus.

noiasca:
stell bitte eine konkrete Frage was du nicht verstehst. Denn so kann ich nur interpetieren:

auf Seite 285 wird das Ampelbild in einem Byte abgespeichert. Dazu wird jeder Ampel eine Bit-Position zugewiesen. Ist das Bit gesetzt, leuchtet die Ampelfarbe, bei 0 ist sie aus.

ausgewertet wird dann das gesetzte Bit durch eine logische Undverknüpfung. Wenn das Bit gesetzt ist und mit 1 "verundet" wird, dann weist du also, dass die Ampelfarbe eingeschaltet werden soll.

Mehr lese ich da nicht raus.

Ich verstehe halt nicht wie die Ausgänge geschaltet werden. Davor werden ja alle Ausgänge einzeln jeweils über digitalWrite auf High oder Low gestellt. Dannach hat man ja eine Matirx erstellt um so das ganze zu vereinfach. Jedoch weiß ich nicht warum bei "0 1 1 0 0" bzw. dem Dezimalwert 12 genau die Rote Fußgängerampel und Grüne Auto Ampel angeht.

Also diese Code stelle "digitalWrite(ledPinRotAuto, (ampelwert&1)==1?HIGH:LOW);" wie das hier mit den LOW und HIGH und "ampelwert" abläuft.

Razor094:
Ich verstehe halt nicht wie die Ausgänge geschaltet werden. Davor werden ja alle Ausgänge einzeln jeweils über digitalWrite auf High oder Low gestellt. Dannach hat man ja eine Matirx erstellt um so das ganze zu vereinfach. Jedoch weiß ich nicht warum bei "0 1 1 0 0" bzw. dem Dezimalwert 12 genau die Rote Fußgängerampel und Grüne Auto Ampel angeht.

Also diese Code stelle "digitalWrite(ledPinRotAuto, (ampelwert&1)==1?HIGH:LOW);" wie das hier mit den LOW und HIGH und "ampelwert" abläuft.

Was gemeint ist (nehme ich an, ich habe die verlinkte Seite nicht gelesen):

Es gibt eine Ampel für Autos (3 Stellen, rot/gelb/grün) und Fußgänger (2 Stellen, rot/grün). Diese insgesamt 5 Stellen werden in einer Binärzahl (besteht aus Einsen und Nullen) zusammengefasst. Es wird geprüft, ob bestimmte Stellen dieser Zahl eine 1 oder eine 0 enthalten (das ist mit „verundet“ gemeint):

  01110
& 00001
------------
= 00000

Das & ist eine logische UND-Verknüpfung: Die Stellen, bei denen sowohl oben als auch unten (gemeint sind die Zahlen über dem Strich) eine 1 steht, werden auch unter dem Strich zu einer 1, sonst 0.

In der obigen Rechnung prüfst Du also, ob die Fußgängerampel grün zeigen soll (ob die zweite der beiden letzten Stellen eine 1 enthält). Das ist nicht der Fall - unter dem Strich steht eine Null.

Sieh Dir am besten mal an, wie logische Verknüpfungen funktionieren.

Uh, shit, ich muss zu meinem Samstags-Termin. Sorry.

Gruß

Gregor