Hallo oberallgeier,
oh je, dann fehlte mir also tatsächlich nur das genaue lesen und interpretieren deines Kommentars im Code: "Es wird die LED auf n Pulse geprüft"
Jedenfalls war ich schon auf dem Dampfer dies so zu interpretieren.
Nun also mit Volldampf zur Iteration.
Hier erst einmal nur die Idee dies zu realisieren.
Deine Hauptschleife läuft von 128 an abwärts. Wenn wir hier noch eins abziehen, dann kommen wir auf ein Bitmuster von "0111 1111".
Wenn wir nun in 7 Iterationen fertig sein wollen, brauchen wir somit nur die 7 1-en 'irgendwie' zu bearbeiten.
Um, wie es sich gehört, bei der ersten Iteration anzufangen, muss der zu prüfende Wert in der Mitte vom kompletten Bereich (127) liegen.
Bei unserem bisherigen Bitmuster reicht es also, die höchste, gerade zu bearbeitende, Bitstelle auf 0 zu setzen um den Bereich zu halbieren.
Dieses Bitmuster ist nun genau das, was wir für den zu iterierenden PWM-Wert benötigen.
Iteration 7-0:
- Schiebe ein Bit um 7-0 Stellen nach links
- Lösche an dieser Stelle aus dem aktuellen Bitmuster/PWM-Wert das Bit
- Ergibt Bitmuster/PWM-Wert "0011 1111"
- Messen
- Ergebnis: Hindernis (zu weit gemessen)
--- Lasse Iterations-Bit wie es ist ===> Fall 7-0.0
- Ergebnis: Kein Hindernis (zu kurz gemessen)
--- Setze Iterations-Bit wieder auf 1 ===> Fall 7-0.1
Iteration 7-1:
Fall 7-0.0
- Schiebe ein Bit um 7-1 Stellen nach links
- Lösche an dieser Stelle aus dem aktuellen Bitmuster/PWM-Wert das Bit
- Ergibt Bitmuster/PWM-Wert "0001 1111"
- Messen
- Ergebnis: Hindernis (zu weit gemessen)
--- Lasse Iterations-Bit wie es ist ===> Fall 7-1.0.0
- Ergebnis: Kein Hindernis (zu kurz gemessen)
--- Setze Iterations-Bit wieder auf 1 ===> Fall 7-1.0.1
Fall 7-0.1
- Schiebe ein Bit um 7-1 Stellen nach links
- Lösche an dieser Stelle aus dem aktuellen Bitmuster/PWM-Wert das Bit
- Ergibt Bitmuster/PWM-Wert "0101 1111"
- Messen
- Ergebnis: Hindernis (zu weit gemessen)
--- Lasse Iterations-Bit wie es ist ===> Fall 7-1.1.0
- Ergebnis: Kein Hindernis (zu kurz gemessen)
--- Setze Iterations-Bit wieder auf 1 ===> Fall 7-1.1.1
Und schon können wir über die 7 zu bearbeitenden Bits loopen. (Vornehm sagen wir nun iterieren.)
Klar, für "Iteration 7-x" machen wir eine for()-Schleife mit "for (n = 7; n > 0; n--)"
Damit haben wir im Zähler n dann den Schiebewert um uns eine Bit-Maske zu basteln: Bit-Maske = (1<<n)
Und nun noch das Bit-Masken-Bit im Bitmuster/PWM-Wert löschen mit: Bitmuster/PWM-Wert &= ~Bit-Maske
Wenn wir bei "Ergebnis: Hindernis .." nun das Bit wieder setzen sollen, nutzen wir wieder die Bit-Maske um die 1 an der richtigen Stelle im Bitmuster/PWM-Wert wieder einzutragen. Bitmuster/PWM-Wert |= Bit-Maske
Eine Besonderheit gibt es noch.
Die übliche Extremwertbetrachtung kann uns zu einem Bitmuster/PWM-Wert von "0000 0000" bringen.
Hier musst du überlegen, ob es a) zulässig ist, und b) wie man diese Situation sonst abfängt.
That's all.
Cäh in C-Wandlung die 2.te:
Bei der Bitmanipulation wird nun auch mit dem Bit-bezogenem & (and) und dem Bit-bezogenem | (or) eine Kombination bei der Zuweisung mit dem = gemacht. Geht hier somit auch, und wird in C immer wieder gerne genutzt.
Zu der Kurzform n++ kommt noch die Form ++n hinzu. Unterschied? Bei n++ wird 'hinterher', bei ++n 'vorher' an n manipuliert. Lustig wird es damit bei Dingen wie einem Funktionsaufruf á la "TuWas (n++);" oder eben "TuWas (++n);"
Und nun noch ein bisschen smalltalk: Ich wünsche dir/euch? viel Spaß, guten Schnee und angenehmen Aufwind für den Tauern-Aufenthalt. Lass den Schlapptop zu Hause und brich dir nicht die Knochen.
P.S.:Wenn du beim Umsetzen in C Kummer haben solltes, kann bestimmt geholfen werden.
@robo.fr
Da kann man mal sehen, was so alles aus der Kombination waste-IR-Decoder und US-Cirp und Erweiterungsplatine an Arbeit entstehen kann. Irgendwie hatte ich es im Blut, als ich mich doch erst geziert hatte deine Erweiterungsplatine zu nutzen. Das hat man nun davonNur gut, dass oberallgeier hier die ganze Arbeit macht!
Gruß Sternthaler
Da fällt mit noch ein, dass ich etwas zur Sonne schreiben wollte.
Genormt ist der Pin 3 am Port B laut CCG. Im Moment sind da wohl einige abgeschaltet. Zumindest auf der Nordhalbkugel.
Um aber Sonne an und aus zu simulieren, könnte es doch ausreichen, eine Messung mit ganz großer Lichtleistung zu machen und eine Messung mit reduziertem Licht. Irgendwo wird sich bestimmt ein Reflektor finden. Eine Messung sind dann natürlich wieder ein paar 100 Bits die jeweiles gezählt werden. Wenn nun die gezählten Hell-/Dunkelmessungen irgendwie in ein Verhältnis gesetzt werden können, wäre das eventuell die Lösung.
Nun aber Schluß
Lesezeichen