سلام من برنامه dht11 که بسکام نوشته شده از یک سایت روسی بود دانلود کردم فقط یک مشکل دارم اونم میخام اعداد به صورت اعشاری نمایش داده بشه یا بهتر بگم دقت دما و روطبت را میخام به صورت یک ردقم اعشاری نمایش بده برنامه این است
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.4 , Db4 = Pinb.3 , Db5 = Pinb.1 , Db6 = Pinb.2 , Db7 = Pinb.5
Config Lcd = 16 * 2
Cursor Off
Declare Sub Get_th(t As Byte , H As Byte)
'vamos ligar o sensor no pino D.6
Dht_put Alias Portc.5 ' aqui usamos como saída
Dht_get Alias Pinc.5 ' e aqui usamos como entrada !
Dht_io_set Alias Ddrc.5 ' aqui mudamos entrada < - > saída
Dim T As Byte 'Temperatura
Dim H As Byte 'Umidade
Dim Crc As Byte 'CRC do medidor
Dim Mybyte As Byte
Dim Sensor_data As String * 40 'buffer para os 5 bytes
Dim Tmp_str8 As String * 8 'string temporária para receber 8 bits
Dim Count As Byte 'contador para os bits recebidos
Enable Interrupts
Set Dht_io_set
Set Dht_put
Lcd "AVRproject.ru"
Lowerline
Lcd "DHT11 sensor"
Do
Waitms 1500
Call Get_th(t , H)
Cls
Lcd "TMP: " ; T ; "C"
Lowerline
Lcd "PHP: " ; H ; "%"
Loop
Sub Get_th(t As Byte , H As Byte)
Count = 0
Sensor_data = ""
Set Dht_io_set 'vira saída
Reset Dht_put 'nivel 0 na saída
Waitms 25 'tempo de espera pro dht11 25mseg
Set Dht_put 'volta nivel 1 na saída
Waitus 40 'espera 40 useg
Reset Dht_io_set 'vira entrada
Waitus 40 'espera mais 40 useg
If Dht_get = 1 Then 'se continua 1 tem algo errado
H = 1 'pois deveria estar em 0 !
Exit Sub
End If
Waitus 80 'espera 80 useg
If Dht_get = 0 Then 'agora tem de estar 1 !
H = 2 'se tiver 0 , deu erro
Exit Sub
End If
While Dht_get = 1 : Wend 'espera iniciar transmissão
Do
While Dht_get = 0 : Wend 'começou a transmissão
Waitus 30 'voltou a nivel 1, espera 30 useg
If Dht_get = 1 Then 'se apos 30 useg continua 1, então o bit é 1
Sensor_data = Sensor_data + "1" 'coloca 1 no buffer de dados
While Dht_get = 1 : Wend 'espera esse bit 1 terminar
Else 'se apos 30 useg virou 0, então o bit é 0
Sensor_data = Sensor_data + "0" 'coloca zero no buffer
End If
Incr Count ' incrementa contador de bits
Loop Until Count = 40 ' repete para 40 bits totais
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(sensor_data , 8) '8 bit avale rtomat
H = Binval(tmp_str8) 'tabdil be meghdar adadi
Tmp_str8 = Mid(sensor_data , 17 , 8) '8 adadeh a temperatura
T = Binval(tmp_str8)
Tmp_str8 = Right(sensor_data , 8) 'os ultimos 8 são o CRC
Crc = Binval(tmp_str8) '
Mybyte = T + H ' o CRC é a soma da umidade + temperatura
If Mybyte <> Crc Then ' considerando 8 bits
H = 3 ' se não bateu, erro !
End If
End Sub
ممنون میشه اگه راهنمای کنید
$regfile = "m8def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.4 , Db4 = Pinb.3 , Db5 = Pinb.1 , Db6 = Pinb.2 , Db7 = Pinb.5
Config Lcd = 16 * 2
Cursor Off
Declare Sub Get_th(t As Byte , H As Byte)
'vamos ligar o sensor no pino D.6
Dht_put Alias Portc.5 ' aqui usamos como saída
Dht_get Alias Pinc.5 ' e aqui usamos como entrada !
Dht_io_set Alias Ddrc.5 ' aqui mudamos entrada < - > saída
Dim T As Byte 'Temperatura
Dim H As Byte 'Umidade
Dim Crc As Byte 'CRC do medidor
Dim Mybyte As Byte
Dim Sensor_data As String * 40 'buffer para os 5 bytes
Dim Tmp_str8 As String * 8 'string temporária para receber 8 bits
Dim Count As Byte 'contador para os bits recebidos
Enable Interrupts
Set Dht_io_set
Set Dht_put
Lcd "AVRproject.ru"
Lowerline
Lcd "DHT11 sensor"
Do
Waitms 1500
Call Get_th(t , H)
Cls
Lcd "TMP: " ; T ; "C"
Lowerline
Lcd "PHP: " ; H ; "%"
Loop
Sub Get_th(t As Byte , H As Byte)
Count = 0
Sensor_data = ""
Set Dht_io_set 'vira saída
Reset Dht_put 'nivel 0 na saída
Waitms 25 'tempo de espera pro dht11 25mseg
Set Dht_put 'volta nivel 1 na saída
Waitus 40 'espera 40 useg
Reset Dht_io_set 'vira entrada
Waitus 40 'espera mais 40 useg
If Dht_get = 1 Then 'se continua 1 tem algo errado
H = 1 'pois deveria estar em 0 !
Exit Sub
End If
Waitus 80 'espera 80 useg
If Dht_get = 0 Then 'agora tem de estar 1 !
H = 2 'se tiver 0 , deu erro
Exit Sub
End If
While Dht_get = 1 : Wend 'espera iniciar transmissão
Do
While Dht_get = 0 : Wend 'começou a transmissão
Waitus 30 'voltou a nivel 1, espera 30 useg
If Dht_get = 1 Then 'se apos 30 useg continua 1, então o bit é 1
Sensor_data = Sensor_data + "1" 'coloca 1 no buffer de dados
While Dht_get = 1 : Wend 'espera esse bit 1 terminar
Else 'se apos 30 useg virou 0, então o bit é 0
Sensor_data = Sensor_data + "0" 'coloca zero no buffer
End If
Incr Count ' incrementa contador de bits
Loop Until Count = 40 ' repete para 40 bits totais
Set Dht_io_set
Set Dht_put
Tmp_str8 = Left(sensor_data , 8) '8 bit avale rtomat
H = Binval(tmp_str8) 'tabdil be meghdar adadi
Tmp_str8 = Mid(sensor_data , 17 , 8) '8 adadeh a temperatura
T = Binval(tmp_str8)
Tmp_str8 = Right(sensor_data , 8) 'os ultimos 8 são o CRC
Crc = Binval(tmp_str8) '
Mybyte = T + H ' o CRC é a soma da umidade + temperatura
If Mybyte <> Crc Then ' considerando 8 bits
H = 3 ' se não bateu, erro !
End If
End Sub
ممنون میشه اگه راهنمای کنید
دیدگاه