Fload value

hi all,

i have made:

lcd.setCursor(0, 1);                        
    int AFCvalue = analogRead(A1);               // Read the AFC input on analog pin 1:
    float AFC = AFCvalue * (4.5 / 1023.0);       // Convert the AFC value (which goes from 0 - 1023) to a voltage (0 - 5V)
   
   if (AFC>2)                                    // A videosignal wil be present higher then 2 volts!
   
{ 
    digitalWrite(Lockled, HIGH);                 // Turn Lock LED "ON" when Tuner are Locked on frequency
    lcd.setCursor(0,0);
    lcd.print("  L ");
    lcd.print(AFC); 
    delay(dt);
}  
   else 
{
    digitalWrite(Lockled, LOW);                  // Turn Lock LED "OFF" when Tuner have no signal 
    lcd.setCursor(0,0);
    lcd.print("  U ");
    lcd.print(AFC); 
    delay(dt);

The output on the LCD "2,38" volt.

My project need a more specific value. example 2,3875 volt. So 4 or maybe 5 digits more are exacter.

what code can i use to make this working?

Edwin

You need better hardware to get more precession from an A/D converter.

Grumpy_Mike:
You need better hardware to get more precession from an A/D converter.

thx :frowning:

Adafruit carries a couple of nice I2C ADC modules that will give much higher resolution results then the internal ADC does:

retrolefty:
Adafruit carries a couple of nice I2C ADC modules that will give much higher resolution results then the internal ADC does:
ADS1015 12-Bit ADC - 4 Channel with Programmable Gain Amplifier [STEMMA QT / Qwiic] : ID 1083 : $9.95 : Adafruit Industries, Unique & fun DIY electronics and kits
ADS1115 16-Bit ADC - 4 Channel with Programmable Gain Amplifier [STEMMA QT / Qwiic] : ID 1085 : $14.95 : Adafruit Industries, Unique & fun DIY electronics and kits

ah, this is great.

thanks

Midway:

    lcd.print(AFC);

The output on the LCD "2,38" volt.

My project need a more specific value. example 2,3875 volt. So 4 or maybe 5 digits more are exacter.

If you just want to see more decimal places on your display, do:

    lcd.print(AFC,4);

Of course, as other have pointed out, the extra decimals really mean nothing since the ADC on the Arduino is not that accurate. The best you could hope for is about 1 part in 500 accuracy, on a good day, with the wind in the right direction and all that. And the 3-figure output you've already gotten is more than good enough to represent that.

he output on the LCD "2,38" volt.

You will need to look into lcd.print() and see if / how you can specify more digits.

lcd.print(AFC,4);

this is what I'm looking for.

shame myself, i must know this.

thanks :slight_smile:

    lcd.print(AFC,4);

That works great! is there a way to turn off the rounding?
For example I have a float 118.225, I only want to display the first 2 decimal places but lcd.print(COM1A); returns 118.23.

is there a way to turn off the rounding?

Write your own function. Not rounding is not a good idea. Why do you want to do that?

PaulS:

is there a way to turn off the rounding?

Write your own function. Not rounding is not a good idea. Why do you want to do that?

I'm simulating an aviation radio. 118.225 is a communication frequency. The 3rd decimal place is used for tuning calculation but is not displayed to the pilot. So on my LCD I need it to say COM1 = 118.22 , but when I turn my rotary encoder I'm adding .025 to the frequency. So I need to keep the 3 decimal precision but only display the first 2.

I'm simulating an aviation radio. 118.225 is a communication frequency. The 3rd decimal place is used for tuning calculation but is not displayed to the pilot. So on my LCD I need it to say COM1 = 118.22 , but when I turn my rotary encoder I'm adding .025 to the frequency. So I need to keep the 3 decimal precision but only display the first 2.

Then, you'll need to write your own function.