Go Down

Topic: Problema con valores flotantes (Read 211 times) previous topic - next topic

GabrielMX

Buenas, estoy trabajando en un proyecto, una parte en la que estoy atorado es en esta, en la cual ocupo el valor después del punto para poderlo comparar. El problema es que cuando mido la cantidad correspondiente al las condiciones, jamas entra al IF. Por ejemplo si en la entrada analógica meto 3.3V, por ende al hacer las operaciones correspondientes el valor de la variable voltaje tomaría el valor de 0.3V, por ende debería de entrar al condicionante if(voltaje==3) e imprimir en el puerto serial lo escrito, el problema es que no es a si, jamas entra a un condicionante. Alguna sugerencia?.
Code: [Select]

int analog_in=0;
int adc=0;
int adcconvertido=0;
float adc2=0.0f;
float voltaje=0.0f;
void setup() {

Serial.begin(9600);

}

void loop() {
adc=analogRead(analog_in);
adcconvertido=adc*5.0/1023.0;


adc2=analogRead(analog_in);
voltaje=(adc*5.0/1023.0)-(adcconvertido);
Serial.println(voltaje);


if(voltaje==0.1){
  Serial.println("El voltaje es de 0.1");
}
if(voltaje==0.2){
  Serial.println("El voltaje es de 0.2");
 
}
if(voltaje==0.3){
  Serial.println("El voltaje es de 0.3");
}
}



TFTLCDCyg

#1
Mar 15, 2018, 02:15 pm Last Edit: Mar 15, 2018, 02:24 pm by TFTLCDCyg
El comparador debe usarse con números enteros no con flotantes. Para conseguirlo debes multiplicar voltaje por 10, almacenando el resultado en una variable de control. En este caso voltajeI = voltaje*10

Code: [Select]
int analog_in=0;
int adc=0;
float adcconvertido=0;
int adc2=0;
float voltaje=0.0f;

int voltajeI;

long previousMillis = 0;
long interval = 500;

void setup() {
 Serial.begin(9600);
 MP();
}
void loop() {}

void MP()
{
 while(1)
 {
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval)
  {
    previousMillis = currentMillis;  
    adc=analogRead(analog_in);
    adcconvertido=adc*5.0/1023.0;
    
    adc2=analogRead(analog_in);
    voltaje=(adc2*5.0/1023.0)-(adcconvertido);
    Serial.println(voltaje);
    
    voltajeI= voltaje*10;
  }

 if(voltajeI==1){
  Serial.println("El voltaje es de 0.1");
 }
 if(voltajeI==2){
  Serial.println("El voltaje es de 0.2");
 }
 if(voltajeI==3){
  Serial.println("El voltaje es de 0.3");
 }
 }
}


PD: no acostumbro usar void loop(){} en mis sketchs

GabrielMX

Gracias, esto ayudo, ahora el problema es que cuando pongo voltajes como 1.2 o 1.1 o 0.3, no funciona, de hecho si pongo 0.1V e imprimo la variable voltajeI en el puerto serial, me arroja como si fuera 0, cuando en realidad deberia de imprimir 0.1V. SI pongo voltajes como 5.1, 5.3, 5.2, 4.3,4.2, etc, funciona muy bien, pero cuando son voltajes abajo de 1.3, no los detecta. ¿Tienes idea de por que sucede esto?.

PD. Gracias por tu ayuda

TFTLCDCyg

#3
Mar 16, 2018, 02:32 pm Last Edit: Mar 16, 2018, 02:35 pm by TFTLCDCyg
Deberías subir el código de tu proyecto, además deberías compartirnos los objetivos que deseas conseguir con tu sketch, ya que no sabemos qué hardware estás usando, ni como lo has conectando.

Go Up