vou deixar aki o programa que estou a desenvolver, no qual me aparece esse tal erro que falei no titulo do topico.
alguma ajuda ou dica seria bem vinda...
#include <Wire.h>
byte fecth_humidity_temperature(unsigned int *p_Humidity, unsigned int *p_Temperature);
void print_float(float f, int num_digits)
#define TRUE 1
#define FALSE 0
void setup(void)
{
Serial.begin(9600);
Wire.begin();
//pinMode(4, OUTPUT);
//digitalWrite(4, HIGH);
delay(5000);
Serial.println("<<<<<<<<<<<<<<<");
}
void loop(void)
{
byte _status;
unsigned int H_dat, T_dat;
float RH, T_C;
while(1)
{
_status = fecth_humidity_temperature(&H_dat, &T_dat);
switch(_status)
{
case 0: Serial.println("Normal.");
break;
case 1: Serial.println("Stale Data.");
break;
case 2: Serial.println("In command mode.");
break;
default: Serial.println("Diagonostic.");
}
RH = (float) H_dat * 6.10e-3;// equação para calcular humidade relativa
T_C = (float) T_dat * 1.007e-2 -40.0;// eq. para calcular temperatura
print_float (RH,1);
Serial.print(" ");
print_float (T_C, 2);
Serial.println();
delay(1000);
}
}
byte fetch_humidity_temperature(unsigned int *p_H_dat, unsigned int *p_T_dat)
{
byte address, Hum_H, Hum_L, Temp_H, Temp_L, _status;
unsigned int H_dat, T_dat;
address = 0x27;
Wire.beginTransmission( address);
Wire.endTransmission();
delay(100);
Wire.requestFrom((int)address, (int) 4);// pedido de 4 bytes a partir do dispositivo slave com endereço "address"
Hum_H =Wire.read();
Hum_L =Wire.read();
Temp_H =Wire.read();
Temp_L =Wire.read();
Wire.endTransmission();
_status = (Hum_H >> 6) & 0x03;
Hum_H = Hum_H & 0x3f;
H_dat = (((unsigned int) Hum_H) <<8) | Hum_L;
T_dat = (((unsigned int) Temp_H) <<8) | Temp_L;
T_dat = T_dat / 4;
*p_H_dat = H_dat;
*p_T_dat = T_dat;
return(_status);
}
void print_float( float f, int num_digits)
{
int f_int;
int pows_of_ten[4] = {1, 10, 100, 1000};
int multiplier, whole, fract, d, n;
multiplier = pows_of_ten[num_digits];
if (f < 0.0)
{
f = -f;
Serial.print("-");
}
whole = (int) f;
fract = (int) (multiplier * (f- (float)whole));
Serial.print(whole);
Serial.print(".");
for (n=num_digits-1; n>=0; n--)
{
d = fract / pows_of_ten[n];
Serial.print(d);
fract = fract % pows_of_ten[n];
}
}
Resolvido!
#include <Wire.h>
#define TRUE 1
#define FALSE 0
void setup()
{
Serial.begin(9600);
Wire.begin();
//pinMode(4, OUTPUT);
//digitalWrite(4, HIGH);
delay(5000);
Serial.println("<<<<<<<<<<<<<<<");
}
void loop(void)
{
byte _status;
unsigned int H_dat, T_dat;
float RH, T_C;
while(1)
{
_status = fetch_humidity_temperature(&H_dat, &T_dat);
switch(_status)
{
case 0: Serial.println("Normal.");
break;
case 1: Serial.println("Stale Data.");
break;
case 2: Serial.println("In command mode.");
break;
default: Serial.println("Diagonostic.");
}
RH = (float) H_dat * 6.10e-3;// equação para calcular humidade relativa
T_C = (float) T_dat * 1.007e-2 -40.0;// eq. para calcular temperatura
print_float (RH,1);
Serial.print(" ");
print_float (T_C, 2);
Serial.println();
delay(1000);
}
}
byte fetch_humidity_temperature(unsigned int *p_H_dat, unsigned int *p_T_dat)
{
byte address, Hum_H, Hum_L, Temp_H, Temp_L, _status;
unsigned int H_dat, T_dat;
address = 0x27;
Wire.beginTransmission( address);
Wire.endTransmission();
delay(100);
Wire.requestFrom((int)address, (int) 4);// pedido de 4 bytes a partir do dispositivo slave com endereço "address"
Hum_H =Wire.read();
Hum_L =Wire.read();
Temp_H =Wire.read();
Temp_L =Wire.read();
Wire.endTransmission();
_status = (Hum_H >> 6) & 0x03;
Hum_H = Hum_H & 0x3f;
H_dat = (((unsigned int) Hum_H) <<8) | Hum_L;
T_dat = (((unsigned int) Temp_H) <<8) | Temp_L;
T_dat = T_dat / 4;
*p_H_dat = H_dat;
*p_T_dat = T_dat;
return(_status);
}
void print_float( float f, int num_digits)
{
int f_int;
int pows_of_ten[4] = {1, 10, 100, 1000};
int multiplier, whole, fract, d, n;
multiplier = pows_of_ten[num_digits];
if (f < 0.0)
{
f = -f;
Serial.print("-");
}
whole = (int) f;
fract = (int) (multiplier * (f- (float)whole));
Serial.print(whole);
Serial.print(".");
for (n=num_digits-1; n>=0; n--)
{
d = fract / pows_of_ten[n];
Serial.print(d);
fract = fract % pows_of_ten[n];
}
}
valeu....já tinha reparado que uma dessas dessa linhas estava a mais...e afinal eram as duas...obrigado
fabiohbm007:
Resolvido!
Portanto, em caso de erro apaga-se até dar certo?
O erro que vias acontecia porque não tinhas um ponto e virgula (
em frente a esta linha:
void print_float(float f, int num_digits)
Se colocares um ponto e virgula garanto-te que funciona e não precisas de apagar código.
bubulindo...eu também reparei nesse pormenor, realmente deixou de dar esse erro...mas depois compilei com esse ";" e dava-me erro no compilador devido á linha de codigo
byte fecth_humidity_temperature(unsigned int *p_Humidity, unsigned int *p_Temperature);
eliminando essas duas linhas e testando o sensor, trabalhou bem..
abraço
Não apaguei até dar certo... ajudei, só não ensinei...
O codigo postado tem escrito o protótipo das funções(que no arduino é feito automaticamente...) desnecessário, o erro está na chamada da função dentro do código que está escrito errado, assim como o prototipo dela.
_status = fecth_humidity_temperature(&H_dat, &T_dat);
mas a função chama-se
byte fetch_humidity_temperature(unsigned int *p_H_dat, unsigned int *p_T_dat)
{
assim sendo apaguei os prototipos e corrigi a grafia do nome da função...
Ok... no entanto, tendo em conta a sintaxe de C... colocar o protótipo das funcões é a maneira correcta de fazer o código. Não custa explicar a maneira correcta em vez de deixar só a fncionar. Imagina a diversão que será se alguém quiser sair da IDE do arduino para algo a sério...