error: was not declared in this scope

Buenas noches, estoy desarrollando un firmware con NodeMCU para mandar los datos de un sensor de gas a la nube, para luego capturarlos en android.
el tema es que al tratar de compilarlo me sale el siguente errores relacionados con las funciones que he declarado previamente. Dejare el codigo para que lo puedan revisar si son tan amables.

ERROR

C:\Users\Usuario\Documents\Arduino\iotpanama_sgv1\iotpanama_sgv1.ino: In function 'void setup()':

iotpanama_sgv1:74:34: error: 'MQcalibracion' was not declared in this scope

  float Ro = MQcalibracion(MQ_PIN);
/* Firmware version alfa del Sensor de Gas domestico 
  la misma es capaz de conectarse a WiFi. Con esta aplicacion es capaz
  de detectar Alcohol, Gas Natural y Gas GLP.
  Tambien sera capaz de conectarse a cualquier red de WiFi de lugar donde 
  se encuentre el sensor.
  El calculo de las partes por millon se realiza de forma analitica
  Segun la curva del fabricante, en este caso para el senspr MQ5
  Desarrollado por el Ing. Jorge Quevedo, para IoTPanama.
*/


#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

// Se conecta a la base de datos Firebase y al wifi.
#define FIREBASE_HOST "sensores-de-gas-wifi.firebaseio.com" // https://sensores-de-gas-wifi.firebaseio.com/
#define FIREBASE_AUTH "1xlL03JblPwDi0SDjioODqfVfUBF06qBEL9gs2bs"
#define WIFI_SSID "IoTPanama"
#define WIFI_PASSWORD "Max.7391"
#define D0 16
#define D4 2
#define MQ_PIN A0

/************************ DECLARACIONES ************************************/
const int calibracionLed = 13;                      //Señal led de calibracion
int valorRL = 1;                                            //Valor de la resistecia de carga del sensor
float factor_R0_fabricante = 6.5;                 //Valor de resistencia del aire limpio derivado
                                                                    //datasheet del fabricate.

/****************************MACROS*****************************************/
int contadorCalibracion = 50;                  //contador para promedio de calibracion de la señal
int intervaloCalibracion = 500;                //intervalo de calibracion de cada toma de datos

int contadorLecturaDatos = 50;                 //define la cantidad de datos a tomar con el sensor en funcionamiento
int intervaloDatos = 5;                        //define el intervalo de los datos a ser leidos
                                              //en operacion normal
int valor_limite= 150;
int interTime = 200;
int n = 0;
int R0calibrado = 0;
float Ro;
int voltajeSensor = 0;

String tipoGas;


void setup() {
 Serial.begin(115200);
 pinMode(D0, OUTPUT);
 pinMode(D4, OUTPUT);
 //digitalWrite(D0, HIGH);

 // connect to wifi.
 Serial.print("connecting");
 WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
 while (WiFi.status() != WL_CONNECTED) {
   Serial.print(".");
   delay(500);
 }
 Serial.println();
 Serial.print("connected: ");
 Serial.println(WiFi.localIP());
 
 Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
 delay(1000);
 digitalWrite(D4, HIGH);
 delay(1000);
 digitalWrite(D4, LOW);
 delay(1000);

 digitalWrite(D4,HIGH);
 Serial.print("Calibrating..."); 
 
 float Ro = MQcalibracion(MQ_PIN);
 digitalWrite(D4,LOW); 
 
 Serial.println("Sensor calibrado");                                 
 Serial.print("Ro= ");
 Serial.print(Ro);
 Serial.println("kohm\n");
 delay(2000);
}

void loop() {
 long iPPM = 0;
 int Rs = MQLectura(MQ_PIN);
 
 float iPPM = MQcalculoPPM(Rs,Ro);
 MQSerialPrint(tipoGas, voltajeSensor, Rs, Ro, iPPM);
}

/***************************** MQCalibracion ****************************************
Input:   mq_pin - canal analogo
Output:  Ro del sensor
Remarks: esta funcion calibra el sensor cuando es encendido a partir del RO teorico
        para ajustar el RO real.
************************************************************************************/ 
float MQCalibracion(String mq_pin)
{
 int i;
 float ro = 0;

 for (i=0;i<contadorCalibracion;i++) {          //toma multiples datos
   ro += MQcalculoResistencia(analogRead(mq_pin));
   delay(intervaloCalibracion);
 }
 ro = ro/contadorCalibracion;                   //calcula el valor promedio
 ro = ro/factor_R0_fabricante;                  //relacion del valor tomado dividido con el factor
 Firebase.setFloat("RO Calibrado", ro);         //proporcionado por el fabricante en la grafica                            
 return ro;                                     //del datasheet

}

/*********************** MQCalculoResistencia **************************************
Input:   lectura de voltaje
Output:  calculo de la resistencia del sensor
Remarks: El sensor y la resistencia de carga forman un divisor de voltaje.
        Dado el voltaje a través de la resistencia de carga y su resistencia,
        se podría derivar la resistencia del sensor.
************************************************************************************/ 
float MQcalculoResistencia(int voltajeSensor)
{
 voltajeSensor = (voltajeSensor/1024*5); 
 return (((float)(5.0-voltajeSensor)/voltajeSensor));
}

/*****************************  MQLectura ******************************************
Input:   mq_pin - canal analogico
Output:  Rs del sensor
Remarks: Esta funcion usa el MQcalculoResistencia, para determinar el RS del sensor.
        El RS cambia a medida que el sensor está en las diferentes concentraciones
        del gas objetivo. Pueden cambiarse el intervalo de lecturas y la cantidad
        de datos a capturar para aumentar la precision de la lectura a promediar.
************************************************************************************/ 
float MQLectura(int mq_pin)
{
 int i;
 float rs=0;

 for (i=0;i<contadorLecturaDatos;i++) {
   rs += MQcalculoResistencia(analogRead(mq_pin));
   delay(intervaloDatos);
 }

 rs = rs/contadorLecturaDatos;

 return rs;  
}

/*****************************  MQcalculoPpm ******************************************
Input:   mq_pin - canal analogico
Output:  ppm
Remarks: Esta funcion determina el tipo de gas, además de reportar la concentración,
        en partes por millón (PPM). Este calculo es analitico, basado en las ecuaciones 
        generadas a partir de las graficas que se encuentran en los datasheet del sensor.
***************************************************************************************/ 
float MQcalculoPPM(int rs, int ro){
 float relacionRsRo;
 long ppm;
 relacionRsRo = rs/ro;
 if (relacionRsRo <= 0.145){
   relacionRsRo = 0.145;
 }
 if(relacionRsRo >= 6){
     tipoGas = "Aire";
     ppm = 0;
   } else if(relacionRsRo <= 4 && relacionRsRo >= 2.3){
     tipoGas = "CO";
     //x = 1E+06y-6.704
     ppm = 1E+06*pow(relacionRsRo,-6.704);
   } else if(relacionRsRo <= 3.49 && relacionRsRo >= 1.45){
     tipoGas = "Alcohol";
     //x= 67950y-4.519
     ppm = 67950*pow(relacionRsRo,-4.519);
   } else if(relacionRsRo <= 1.74 && relacionRsRo >= 0.65){
     tipoGas = "H2";
     //x = 1174.6y-3.858
     ppm = 1174.6*pow(relacionRsRo,-3.858);
   } else if(relacionRsRo <= 0.95 && relacionRsRo >= 0.20){
     tipoGas = "GLN";
     //x = 180.41y-2.558
     ppm = 180.41*pow(relacionRsRo,-2.558);
   } else if(relacionRsRo <= 0.70 && relacionRsRo >= 0.15){
     tipoGas = "GLP";
     //x = 77.037y-2.505
     ppm = 77.037*pow(relacionRsRo,-2.505);
   }
 };
 return ppm;
}

/*****************************  MQSerialPrint ******************************************
Input:   TipoGas, voltajeSensor, Rs, Ro, PPM
Output:  
Remarks: Esta funcion reporta los valores de las variables que intervienen el el
        cálculo del valor de las partes por millon (PPM).
        Esta funcion podra convertirse 
        
***************************************************************************************/ 
void MQSerialPrint(String tg, float vs, float rs, float ro, long ppm){
   Serial.print("Tipo Gas = ");
   Serial.print(tg);
   Serial.print("          ");
   Serial.print("Voltaje = ");
   Serial.print(vs);
   Serial.print("          ");
   Serial.print("RS_gas = ");
   Serial.print(rs);
   Serial.print("          ");
   Serial.print("R0 = ");
   Serial.print(ro);
   Serial.print("          ");
   Serial.print("RS/RO = ");
   Serial.println(rs/ro);
   Serial.print("          ");
   Serial.print("PPM = ");
   Serial.println(ppm);
   delay(1000)
return
}

iotpanama_sgv1.ino (7.84 KB)

Con que IDE lo estas compilando?

Si estas usando el IDE de arduino dudo que falle de ese modo. De todas formas una manera rápida de salvar el inconveniente es poner antes del setup esto

float MQCalibracion(String mq_pin);

Si vuelve a reclamarte por otro procedimiento o función haces lo mismo. Supongo que pasará lo mismo con estos.

float MQcalculoResistencia(int voltajeSensor);
float MQLectura(int mq_pin);
float MQcalculoPPM(int rs, int ro);
void MQSerialPrint(String tg, float vs, float rs, float ro, long ppm);