Код в Bascom-AVR для работы с датчиком влажности/температуры DHT11. С большой долей вероятности подойдет и для датчика DHT22
$regfile = "m8def.dat"
$crystal = 1000000
$baud = 115200
Declare Sub Get_wenshidu(wendu As Byte , Shidu As Byte)
Config Serialin = Buffered , Size = 128
Config Serialout = Buffered , Size = 128
Dht_put Alias Portd.6
Dht_get Alias Pind.6
Dht_io_set Alias Ddrd.6
Dim I As Byte , Tmp As Byte
Dim J As Byte
Dim Mybyte As Byte
Dim Wenshi As String * 40
Dim Tmp_str8 As String * 8
Dim Count As Byte
Enable Interrupts
Set Dht_io_set
Set Dht_put
Print "Start......"
Do
Waitms 1500
Call Get_wenshidu(i , J)
Print "Temperature: " ; I ; "?"
Print "Humidity: " ; J ; "%"
Loop
Sub Get_wenshidu(wendu As Byte , Shidu As Byte)
Count = 0
Wenshi = ""
Set Dht_io_set
Reset Dht_put
Waitms 20
Set Dht_put
Waitus 40
Reset Dht_io_set
Waitus 40
If Dht_get = 1 Then
Shidu = 255
Exit Sub
End If
Waitus 80
If Dht_get = 0 Then
Shidu = 255
Exit Sub
End If
While Dht_get = 1 : Wend
Do
While Dht_get = 0 : Wend
Waitus 30
If Dht_get = 1 Then
Wenshi = Wenshi + "1"
While Dht_get = 1 : Wend
Else
Wenshi = Wenshi + "0"
End If
Incr Count
Loop Until Count = 40
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(wenshi , 8)
Shidu = Binval(tmp_str8)
Tmp_str8 = Mid(wenshi , 17 , 8)
Wendu = Binval(tmp_str8)
Tmp_str8 = Right(wenshi , 8)
Tmp = Binval(tmp_str8)
Mybyte = Wendu + Shidu
If Mybyte <> Tmp Then
Shidu = 255
End If
End Sub
Подключение датчика происходит по следующей схеме
Используя код выложеный выше, сигнальный провод от датчика подключается к PortD.6