Comprei um módulo DHT11,e achei que não ia ser difícil sua implementação,mas foi...
Fique horas sem saber se era o Hardware,temporização ou rotina mal interpretada,desmembrei todas as partes da rotina principal e não achava alguma 'lógica errada' em nenhuma delas,mas era a forma de utilizar estas rotinas que eu estava fazendo 'errado'.
A rotina principal de leitura do módulo é:
- Código: Selecionar todos
u8 DHT11_Read_Data(void)
{
u8 buf[5];
u8 i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
HM=buf[0];
TP=buf[2];
HM1=buf[1];
TP1=buf[3];
}
}
else
return 1;
return 0;
}
Acontece que usando HM,TP,HM1 e TP1 como variáveis globais,a rotina retorna os valores corretamente,mas se eu usá-las no corpo da rotina,não consigo retornar os valores.
Exemplo:
- Código: Selecionar todos
u8 DHT11_Read_Data(u8 var,u8 var1,u8 var2,u8 var3)
{
u8 buf[5];
u8 i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
var=buf[0];
var1=buf[2];
var2=buf[1];
var3=buf[3];
}
}
else
return 1;
return 0;
}
Deste modo não consigo carregar as variáveis globais chamando a rotina como if(DHT11_Read_Data(HM,HM1,TP,TP1) ==0 ){...,não carrega os valores nas variáveis.
Como é o procedimento correto?