*Pointer,Variaveis locais...ou ok?

Não sou bom na linguagem C,então quase sempre caio em 'armadilhas' que me faz perder tempo.
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 é:
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:
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?
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?