Go Down

Topic: erro: expected initializer before 'void'.... alguém me ajuda? (Read 966 times) previous topic - next topic

bruguink

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...

Code: [Select]
#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];
    }
}
 

fabio_h

#1
Apr 17, 2013, 05:14 pm Last Edit: Apr 17, 2013, 05:25 pm by fabiohbm007 Reason: 1
Resolvido!
Code: [Select]
#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];
   }
}

bruguink

valeu....já tinha reparado que uma dessas dessa linhas estava a mais...e afinal eram as duas...obrigado

bubulindo


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:
Code: [Select]
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.
This... is a hobby.

bruguink

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
Code: [Select]
byte fecth_humidity_temperature(unsigned int *p_Humidity, unsigned int *p_Temperature);

eliminando essas duas linhas e testando o sensor, trabalhou bem..

abraço

fabio_h

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.
Code: [Select]
   _status = fecth_humidity_temperature(&H_dat, &T_dat);

mas a função chama-se
Code: [Select]
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...

bubulindo

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...
This... is a hobby.

Go Up