Go Down

Topic: Error cannot be used as a function (Read 174 times) previous topic - next topic

Jhony9625

Muy buenas tengo el siguiente código
Code: [Select]
#include "EmonLib.h"                   // Include Emon Library
EnergyMonitor emon1;                   // Create an instance
EnergyMonitor emon2;
EnergyMonitor emon3;
float Sensibilidad=0.104; //sensibilidad en V/A para nuestro sensor
float offset=0.150; // Equivale a la amplitud del ruido
int puerto;
float PotReal1;
float PotReal2;
float PotReal3;

void setup()

  Serial.begin(9600);
 
  emon1.current(A0, 60);             // Current: input pin, calibration.
  emon2.current(A1, 60);
  emon3.current(A2, 60);
  //calibration is explained bellow
}
 
void loop(){

  // Lectura sensores ACS712
  float Ip1=get_corriente(A3);//obtenemos la corriente pico
  float Ip2=get_corriente(A4);
  float Ip3=get_corriente(A5);
  float Irms1=Ip1*0.707; //Intensidad RMS = Ipico/(2^1/2)
  float Irms2=Ip2*0.707;
  float Irms3=Ip3*0.707;
  float PACS1=Irms1*110.0; // P=IV watts
  float PACS2=Irms2*110.0;
  float PACS3=Irms3*110.0;

  // Lectura sensores SCT-013-000
  double ISCT1 = emon1.calcIrms(1480);  // Calcula Irms only
  double PSCT1 = ISCT1*110.0;
  double ISCT2 = emon2.calcIrms(1480);
  double PSCT2 = ISCT2*110.0;
  double ISCT3 = emon3.calcIrms(1480);
  double PSCT3 = ISCT3*110.0;

  // Comparaciones entre cada sensor
  // Comparación 1
  if(PSCT1 <= 1){ //
    PotReal1 = PACS1;
    }
  else{
    PotReal1 = PSCT1;
    }
   
  // Comparación 2
  if(PSCT2 <= 1){
    PotReal2 = PACS2;
    }
  else{
    PotReal2 = PSCT2;
    }
   
  // Comparación 3
  if(PSCT3 <= 1){
    PotReal3 = PACS3;
    }
  else{
    PotReal3 = PSCT3;
    }
 
  // Se envía al puerto serial
  Serial.print(PotReal1,3);
  Serial.print(" ");
  Serial.print(PotReal2,3);
  Serial.print(" ");
  Serial.println(PotReal3,3);
}

// Función para sensor ACS712
float get_corriente(puerto)
{
  float voltajeSensor;
  float corriente=0;
  long tiempo=millis();
  float Imax=0;
  float Imin=0;
  while(millis()-tiempo<500) //realiza mediciones durante 0.5 segundos
  {
    voltajeSensor = analogRead(puerto) * (5.0 / 1023.0);//lectura del sensor
    corriente=0.9*corriente+0.1*((voltajeSensor-2.527)/Sensibilidad); //Ecuación  para obtener la corriente
    if(corriente>Imax)Imax=corriente;
    if(corriente<Imin)Imin=corriente;
  }
  return(((Imax-Imin)/2)-offset);
}


Cuando lo compilo me sale el siguiente error:
Code: [Select]


C:\Users\Jhonathan\Desktop\Codigo_completo2\Codigo_completo2.ino: In function 'void loop()':

Codigo_completo2:25: error: 'get_corriente' cannot be used as a function

   float Ip1=get_corriente(A3);//obtenemos la corriente pico

                             ^

Codigo_completo2:26: error: 'get_corriente' cannot be used as a function

   float Ip2=get_corriente(A4);

                             ^

Codigo_completo2:27: error: 'get_corriente' cannot be used as a function

   float Ip3=get_corriente(A5);

                             ^

C:\Users\Jhonathan\Desktop\Codigo_completo2\Codigo_completo2.ino: At global scope:

Codigo_completo2:77: error: redefinition of 'float get_corriente'

 float get_corriente(puerto)

                           ^

C:\Users\Jhonathan\Desktop\Codigo_completo2\Codigo_completo2.ino:77:7: note: 'float get_corriente' previously declared here

 float get_corriente(puerto)

       ^

exit status 1
'get_corriente' cannot be used as a function


Alguna idea de cómo solucionarlo? Haber qué burrada estoy cometiendo jeje

Danicap

Tienes que declarar las funciones antes del loop.

Arduinito

Por partes:

Danicap
Tienes que declarar las funciones antes del loop.
¡ NO ! Una cosa son las variables globales y otras las locales.


Jhony9625
Alguna idea de cómo solucionarlo? Haber qué burrada estoy cometiendo jeje
Sí, el fallo está en que no declaras el tipo de variable en el parámetro de la función get_corriente(puerto)

Si lo cambias a -> float get_corriente(int puerto) Se acaba el problema.
Lo puse como int ya que lo que estás enviado es un pin analógico, pero vamos es sólo recordar que tienes que definir el tipo de variable en el parámetro en las funciones.

Saludos.

Jhony9625

Muchas gracias Arduinito ya pudo compilar.

Go Up