Todo el tiempo el puerto se mantiene en HIGH

Buenas, estoy tratando de implementar un código en lo que se hace los siguiente:
Dependiendo de el valor de corriente que lee un sensor, que un pin digital envié 5V o no, es decir, cuando el valor leído supere el valor I_Switch, que se envié la señal, y de lo contrario que se envíen 0V.
Tengo un problema con el código: EL pin digital da todo el rato la señal HIGH, es decir, no hace caso a la condición impuesta por el else. La lectura del sensor se hace correctamente, ya que lo he comprobado en el monitor de serie. Cuando los valores del monitor serie cambian, el estado del pin no cambia. Os agradecería vuestra ayuda ya que soy bastante nuevo en esto. Gracias de antemano!

   const int MOSFET=2; //Pin de salida para MOSFET
   const int Iin=A2; //Pin de entrada para corriente
   
   float Sensibilidad=0.66; //sensibilidad en Voltios/Amperio para sensor de 30A
   float Analog_relation= 5.0 / 1023.0; // relacion de voltios y valores analogicos.
   int n_muestras=200;
   int offset=2.5;
   int I_switch=0.75;
      
void setup() {
     pinMode(MOSFET, OUTPUT); 
   Serial.begin(9600);//Abrir comunicacion entre ordenador y arduino
}

void loop()
{
    float I=get_corriente(n_muestras);
    Serial.print("Corriente: ");//muestreo
    Serial.println(I,3); 
    delay(100);  
   
   if (I>=I_switch) //Cuando se detecte intensidad en el secundario
   {
    digitalWrite(MOSFET,HIGH);//
   }  
   else  //Cuando no haya intensidad en el secundario
   {
    digitalWrite(MOSFET,LOW);
   } 
   /*
   digitalWrite(MOSFET,HIGH);
   delay(500);
   digitalWrite(MOSFET,LOW);
   delay(500);
   */
 } 
 
 float get_corriente(int n_muestras)
{
  float voltajeSensor;
  float corriente=0;
  for(int i=0;i<n_muestras;i++)
  {
    voltajeSensor = analogRead(Iin) * Analog_relation;// Lectura del sensor en voltios
    corriente=corriente+(voltajeSensor-offset)/Sensibilidad; //Ecuación  para obtener la corriente
  }
  corriente=corriente/n_muestras;
  return(corriente);
}

Hola, echando un vistazo rápido fijas la variable Sensibilidad en 0.66. ¿No debería ser 0.066)?. pruébalo a ver si es de eso, si no ya le echaremos un vistazo mas a fondo al código.
saludos.

Equivocaste el tipo de estas variables

int offset=2.5; 
int I_switch=0.75;

Un entero no puede almacenar decimales, entonces

I_switch = 0

por eso siempre se cumple

if (I>=I_switch) {

Lo correcto es

float offset=2.5;
float I_switch=0.75;

Saludos

se me paso comprobar el tipo de variables, con tipo float funciona perfectamente, gracias!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.