![]() |
DHT22 auslesen
Guten morgen,
ich lese gerade mit einen uC den DHT22 Sensor. Dieser Senssor gibt mir 40 Bit zurück. Ich stehe jetzt vor dem Problem wie ich die ersten 8Bit in ein Byte bekomme. wie macht man das genau ? mit shl oder shr mfg Schuby |
AW: DHT22 auslesen
In wiefern bekommst du denn die Bits zurück? Sind das 8 einzelne Booleanwerte?
LG Incocnito |
AW: DHT22 auslesen
Hallo,
hier ist Beschrieben wie die Daten aufgebaut sind. ![]() Die ersten 16-Bit sind die rel. Luftfeuchte. Die nächsten 16 Bit die Temperatur. Da du jedes Bit einzeln rein bekommst (HBF) speicherst du die am besten jeweils in einem Byte. Das Byte schiebst du dann mit shl jeweils um 1 Stelle weiter und addierst das neue Bit. |
AW: DHT22 auslesen
Ja das sind 40Bits die ich über einen uC bekomme, im mom schreibe ich die Bits im uC
in einen String also ob es eine 1 oder eine 0 ist, und dann sende ich den String über Serielle an mein Delphi Tool. Aber in mein Delphi Tool muss ich die 40 Bits in 5 Byte speichern. mfg schuby |
AW: DHT22 auslesen
.. kannst Du die 40 Bits im uC nicht in ein Buffer schreiben,
diesen übertragen und in deinem Programm als array[0..4] of Byte einlesen. Die Strings zu empfangen und umzuwandeln halte ich für etwas suboptimal. uC ist ein Raspi oder ein Arduino? Grüße Klaus |
AW: DHT22 auslesen
Ich Arbeite nicht mit Raspi oder ein Arduino,
mein uC ist ein Xmega. Ja sicher würde ich gerne in m,einen uC die ersten 16 Bit in ein Word speichern, aber ich weiß nicht wie. Vor 20 Jahren konnte ich das mal, mit shl und $80 Ichj weiß aber nicht mehr wie das richtig geht mfg Schuby |
AW: DHT22 auslesen
Delphi-Quellcode:
mit diesen Hilfskonstrukten, sollte es einfach sein,
type
TData = packed record hum: Word; tmp: Word; checksum: Byte; end; TDataRecord = packed record case Integer of 0: (data: TData); 1: (rawData: Array[0..4] of Byte); end; var dataSet: TDataRecord datasSet.rawData := // Daten aus dem uC tmp := dataSet.data.tmp; hum := dataSet.data.hum; die Daten aus einem Buffer zu extahieren, Grüße Klaus |
AW: DHT22 auslesen
Hallo Klaus, Danke für deine Hilfe.
Mir wäre es aber lieber wenn mir jmd sagen könnte wie ich ein ww 16Bit Word auffüllen kann ww : word; Bekomme ich eine 0 brauche ich nur ww shl 1; Kommt aber eine 1 ? wie schiebe ich dann eine 1 rein. mfg Schuiby |
AW: DHT22 auslesen
Es gibt auch die Klasse
![]() Kannst ja mal im Quellcode stöbern. Jedenfalls erleichtert die den Umgang mit Bits ein wenig. Ich würde mir aber auch einen record zusammenbauen, wo dann die zu erwartenden Felder direkt drinstehen, und diesen entsprechend befüllen. Das Bitschieben einer 1 müsste ungefähr so gehen: LVal := LVal + ($01 shl LPos ); // LPos 0, ... 7 für ein Byte |
AW: DHT22 auslesen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz