Hallo, Ich möchte für ein Projekt mit einem Arduino einen HYT221 Temperatur/Luftfeuchte Sensor auslesen. Als ich nach passendem Code gesucht habe bin ich hierrauf gestoßen: http://www.mikrocontroller.net/attachment/110234/HYT-xxx.pdf soweit auch sehr verständlich....aber eine Passage versteh ich nicht. es sollen zwei Bitwerte zu eine Variablen kombiniert werden. Gegeben ist diese Code Passage: raw_T16 = Buffer[2] * 256 + Buffer[3]; oder raw_T16 = Buffer[2] < 8 | Buffer[3]; Beide Zeilen sollen das selbe tun. Die untere Kombiniert mit Hilfe eine "Bitwise or" das versteh ich. Aber ich verstehe den nutzen von "< 8" nicht. Die obere Zeile versteh ich Garnicht. soll das eine Multiplikation oder ein dereference Pointer sein? Und warum 256? Währe nett wenn ihr meinem Verständnis auf die Sprünge helfen könntet :)
raw_T16 = Buffer[2] * 256 + Buffer[3]; Beispiel im dezimal System: du hast zwei zaheln A=1 und B=2 jetzt möchtest du eine gemeinsame variable AB haben dies geht durch: AB=10*A+B nichts andres mach das *256 es scheibt um log2(256)=8 Stellen nach links. raw_T16 = Buffer[2] in der Variablen steht jetzt 00000000AAAAAAAA < 8 |in der Variablen steht jetzt AAAAAAAA00000000 da die werte um 8 bit nach links geschoben werden Buffer[3]; ist jetzt das Ergebniss der Addition AAAAAAAAAABBBBBBBBBB
Nochmal zur Multiplikation versus schieben. Du bist beim Computer im Binärsystem. Mal 2 ist also nichts anderes als alle Ziffern eins nach links zu schieben, so wie beim Dezimalsystem mal 10 auch alle Ziffern eins nach links schiebt. Beispiel Dezimal: 156 * 10 = 1560 Binär: 1011 * 2 = 10110
Danke für diese schnelle und präzise Antwort =) Das war genau was ich wissen wollte :)
Frank schrieb: > raw_T16 = Buffer[2] < 8 | Buffer[3]; Da ist ein Tippfehler drinnen, es muss heissen:
1 | raw_T16 = Buffer[2] << 8 | Buffer[3]; |
und ich klammere Shift-Operationen grundsätzlich, also
1 | raw_T16 = (Buffer[2] << 8) | Buffer[3]; |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.