Offline
Newbie
Karma: 0
Posts: 23
I just want to learn more :)
|
 |
« on: January 07, 2013, 04:08:48 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
Manchester (England England)
Offline
Brattain Member
Karma: 299
Posts: 26030
Solder is electric glue
|
 |
« Reply #1 on: January 07, 2013, 04:10:29 pm » |
You need better hardware to get more precession from an A/D converter.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 23
I just want to learn more :)
|
 |
« Reply #2 on: January 07, 2013, 04:18:44 pm » |
You need better hardware to get more precession from an A/D converter.
thx 
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 23
I just want to learn more :)
|
 |
« Reply #4 on: January 07, 2013, 04:30:12 pm » |
|
|
|
|
|
Logged
|
|
|
|
|
Ontario
Offline
God Member
Karma: 16
Posts: 735
|
 |
« Reply #5 on: January 07, 2013, 05:00:10 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 114
Posts: 2205
|
 |
« Reply #6 on: January 07, 2013, 05:36:57 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 23
I just want to learn more :)
|
 |
« Reply #7 on: January 07, 2013, 05:49:05 pm » |
lcd.print(AFC,4); this is what I'm looking for. shame myself, i must know this. thanks 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 4
|
 |
« Reply #8 on: January 07, 2013, 06:12:56 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 335
Posts: 36462
Seattle, WA USA
|
 |
« Reply #9 on: January 07, 2013, 06:15:58 pm » |
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?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 4
|
 |
« Reply #10 on: January 07, 2013, 06:27:06 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Seattle, WA USA
Offline
Brattain Member
Karma: 335
Posts: 36462
Seattle, WA USA
|
 |
« Reply #11 on: January 07, 2013, 06:28:48 pm » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
|