Go Down

Topic: erro: expected initializer before 'void'.... alguém me ajuda? (Read 785 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


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.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

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

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...
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up