mirror of
https://github.com/rfivet/stm32bringup.git
synced 2025-06-07 08:24:50 -04:00
Fix DHT11 temperature calculation for temperature below 0°C.
This commit is contained in:
parent
efd5cd28c7
commit
6f4e46a36f
14
dht11.c
14
dht11.c
@ -1,5 +1,5 @@
|
|||||||
/* dht11.c -- DHT11 humidity and temperature sensor reading */
|
/* dht11.c -- DHT11 humidity and temperature sensor reading */
|
||||||
/* Copyright (c) 2020-2021 Renaud Fivet */
|
/* Copyright (c) 2020-2025 Renaud Fivet */
|
||||||
|
|
||||||
#include "dht11.h" /* implements DHT11 API */
|
#include "dht11.h" /* implements DHT11 API */
|
||||||
|
|
||||||
@ -25,7 +25,7 @@
|
|||||||
unsigned char dht11_humid ; /* 5 .. 95 %RH */
|
unsigned char dht11_humid ; /* 5 .. 95 %RH */
|
||||||
signed char dht11_tempc ; /* -20 .. 60 C */
|
signed char dht11_tempc ; /* -20 .. 60 C */
|
||||||
unsigned char dht11_tempf ; /* .0 .. .9 C */
|
unsigned char dht11_tempf ; /* .0 .. .9 C */
|
||||||
|
int dht11_deciC ; /* -200 .. 600 */
|
||||||
|
|
||||||
void dht11_init( void) {
|
void dht11_init( void) {
|
||||||
/* At startup A13 is ALT DIO with Pull Up enabled */
|
/* At startup A13 is ALT DIO with Pull Up enabled */
|
||||||
@ -79,14 +79,12 @@ dht11_retv_t dht11_read( void) {
|
|||||||
dht11_tempc = values[ 2] ;
|
dht11_tempc = values[ 2] ;
|
||||||
dht11_tempf = values[ 3] ;
|
dht11_tempf = values[ 3] ;
|
||||||
if( dht11_tempf & 0x80) {
|
if( dht11_tempf & 0x80) {
|
||||||
dht11_tempc *= -1 ;
|
dht11_tempc = -( dht11_tempc + 1) ;
|
||||||
dht11_tempf = 10 - ( dht11_tempf & 0x7F) ;
|
dht11_tempf ^= 0x80 ;
|
||||||
if( dht11_tempf == 10) {
|
|
||||||
dht11_tempc -= 1 ;
|
|
||||||
dht11_tempf = 0 ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dht11_deciC = dht11_tempc * 10 + dht11_tempf ;
|
||||||
|
|
||||||
return DHT11_SUCCESS ;
|
return DHT11_SUCCESS ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
5
dht11.h
5
dht11.h
@ -1,5 +1,5 @@
|
|||||||
/* dht11.h -- DHT11 API */
|
/* dht11.h -- DHT11 API */
|
||||||
/* Copyright (c) 2020 Renaud Fivet */
|
/* Copyright (c) 2020-2025 Renaud Fivet */
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
DHT11_SUCCESS,
|
DHT11_SUCCESS,
|
||||||
@ -12,6 +12,7 @@ typedef enum {
|
|||||||
extern unsigned char dht11_humid ; /* 5 .. 95 %RH */
|
extern unsigned char dht11_humid ; /* 5 .. 95 %RH */
|
||||||
extern signed char dht11_tempc ; /* -20 .. 60 C */
|
extern signed char dht11_tempc ; /* -20 .. 60 C */
|
||||||
extern unsigned char dht11_tempf ; /* .0 .. .9 C */
|
extern unsigned char dht11_tempf ; /* .0 .. .9 C */
|
||||||
|
extern int dht11_deciC ; /* -200 .. 600 */
|
||||||
|
|
||||||
|
|
||||||
void dht11_init( void) ;
|
void dht11_init( void) ;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* dht11main.c -- sample DHT11 sensor */
|
/* dht11main.c -- sample DHT11 sensor */
|
||||||
/* Copyright (c) 2020-2023 Renaud Fivet */
|
/* Copyright (c) 2020-2025 Renaud Fivet */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
@ -17,8 +17,8 @@ int main( void) {
|
|||||||
if( 2 == (last % 5)) /* every 5 seconds starting 2s after boot */
|
if( 2 == (last % 5)) /* every 5 seconds starting 2s after boot */
|
||||||
switch( dht11_read()) {
|
switch( dht11_read()) {
|
||||||
case DHT11_SUCCESS:
|
case DHT11_SUCCESS:
|
||||||
printf( "%u%%RH, %d.%uC\n", dht11_humid, dht11_tempc,
|
printf( "%u%%RH, %d.%uC, %d\n", dht11_humid, dht11_tempc,
|
||||||
dht11_tempf) ;
|
dht11_tempf, dht11_deciC) ;
|
||||||
break ;
|
break ;
|
||||||
case DHT11_FAIL_TOUT:
|
case DHT11_FAIL_TOUT:
|
||||||
puts( "Timeout") ;
|
puts( "Timeout") ;
|
||||||
|
@ -196,13 +196,11 @@ And retest after the following modification.
|
|||||||
dht11_tempc = values[ 2] ;
|
dht11_tempc = values[ 2] ;
|
||||||
dht11_tempf = values[ 3] ;
|
dht11_tempf = values[ 3] ;
|
||||||
if( dht11_tempf & 0x80) {
|
if( dht11_tempf & 0x80) {
|
||||||
dht11_tempc *= -1 ;
|
dht11_tempc = -( dht11_tempc + 1) ;
|
||||||
dht11_tempf = 10 - ( dht11_tempf & 0x7F) ;
|
dht11_tempf ^= 0x80 ;
|
||||||
if( dht11_tempf == 10) {
|
|
||||||
dht11_tempc -= 1 ;
|
|
||||||
dht11_tempf = 0 ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dht11_deciC = dht11_tempc * 10 + dht11_tempf ;
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<h2>Stability</h2>
|
<h2>Stability</h2>
|
||||||
@ -239,6 +237,6 @@ or how bad the measurements are.
|
|||||||
<a href="33_ds18b20.html">Next</a>, I will use another digital thermometer as a
|
<a href="33_ds18b20.html">Next</a>, I will use another digital thermometer as a
|
||||||
reference.
|
reference.
|
||||||
|
|
||||||
<hr>© 2020-2024 Renaud Fivet
|
<hr>© 2020-2025 Renaud Fivet
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user