Wawa:
Test code, without 'voltage', and without the needed boundaries etc.,
for resistor values from 100 to 1000 ohm.
Leo..
float R_fixed = 560.0; // pull up (or down) resistor value for testing
float R_x; // for unknown resistor value
void setup() {
Serial.begin (9600);
}
void loop() {
R_x = R_fixed * (( 1024. / (1024. - analogRead(A0))) - 1.); // this line for fixed pull up resistor
//Rx = R_fixed * (( 1024. / analogRead(A0)) - 1.); // or this line for fixed pull down resisor
Serial.println(R_x, 1); // one decimal place
delay(1000);
}
Ok, your formula works. R2 is the unknown resistor, R1 is the sense resistor and Vin is being read by the readVcc() functio, it returns 4V with the Nano powered from USB, weird...
xmed is the arithmetical medium of 30 analogRead().
R2 = R1 * (( 1024.0 / (1024.0 - xmed)) - 1.0);
I then calculate Vout using the traditional resistor divider formula in order to auto range.
Vout=Vin*(R2/(R1+R2));
10K -> 9.84 K
555 ohm -> 535.23 ohm
46K -> 46.29 K
4.7K -> 4.63 K
5K -> 5.01 K
2K -> 1.92 K
Not very good in high values, probably a 500K sense resistor is needed.
472K
Pin 3 - Vin = 5.00 - Vout = 5.00 [diff to Vin/2: 2.50] - R1 = 10.10 R2 = 10332.30
Pin 4 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 100.20 R2 = 51202.20
Pin 5 - Vin = 5.00 - Vout = 4.98 [diff to Vin/2: 2.48] - R1 = 1000.00 R2 = 255000.00
Pin 6 - Vin = 5.00 - Vout = 4.89 [diff to Vin/2: 2.39] - R1 = 10000.00 R2 = 455454.56
Pin 7 - Vin = 5.00 - Vout = 3.99 [diff to Vin/2: 1.49] - R1 = 100000.00 R2 = 397087.37
Pin 8 - Vin = 5.00 - Vout = 1.69 [diff to Vin/2: 0.81] - R1 = 999999.81 R2 = 510324.37
510.32 K
1M
Pin 3 - Vin = 5.00 - Vout = 5.00 [diff to Vin/2: 2.50] - R1 = 10.10 R2 = 10332.30
Pin 4 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 100.20 R2 = 51202.20
Pin 5 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 1000.00 R2 = 511000.00
Pin 6 - Vin = 5.00 - Vout = 4.94 [diff to Vin/2: 2.44] - R1 = 10000.00 R2 = 843333.37
Pin 7 - Vin = 5.00 - Vout = 4.44 [diff to Vin/2: 1.94] - R1 = 100000.00 R2 = 790434.75
Pin 8 - Vin = 5.00 - Vout = 2.80 [diff to Vin/2: 0.30] - R1 = 999999.81 R2 = 1275555.37
1.28 M
760K
Pin 3 - Vin = 5.00 - Vout = 5.00 [diff to Vin/2: 2.50] - R1 = 10.10 R2 = 10332.30
Pin 4 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 100.20 R2 = 51202.20
Pin 5 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 1000.00 R2 = 340333.34
Pin 6 - Vin = 5.00 - Vout = 4.93 [diff to Vin/2: 2.43] - R1 = 10000.00 R2 = 672666.68
Pin 7 - Vin = 5.00 - Vout = 4.30 [diff to Vin/2: 1.80] - R1 = 100000.00 R2 = 616083.93
Pin 8 - Vin = 5.00 - Vout = 2.41 [diff to Vin/2: 0.09] - R1 = 999999.81 R2 = 928436.68
928.44 K
680K
Pin 3 - Vin = 5.00 - Vout = 5.00 [diff to Vin/2: 2.50] - R1 = 10.10 R2 = 10332.30
Pin 4 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 100.20 R2 = 51202.20
Pin 5 - Vin = 5.00 - Vout = 4.99 [diff to Vin/2: 2.49] - R1 = 1000.00 R2 = 340333.34
Pin 6 - Vin = 5.00 - Vout = 4.92 [diff to Vin/2: 2.42] - R1 = 10000.00 R2 = 630000.00
Pin 7 - Vin = 5.00 - Vout = 4.24 [diff to Vin/2: 1.74] - R1 = 100000.00 R2 = 560645.12
Pin 8 - Vin = 5.00 - Vout = 2.25 [diff to Vin/2: 0.25] - R1 = 999999.81 R2 = 815602.62
815.60 K
And not very good for low values either
270 ohm
Pin 3 - Vin = 4.00 - Vout = 3.53 [diff to Vin/2: 1.53] - R1 = 10.10 R2 = 75.37
Pin 4 - Vin = 4.00 - Vout = 2.68 [diff to Vin/2: 0.68] - R1 = 100.20 R2 = 202.47
Pin 5 - Vin = 4.00 - Vout = 0.83 [diff to Vin/2: 1.17] - R1 = 1000.00 R2 = 261.08
Pin 6 - Vin = 4.00 - Vout = 0.10 [diff to Vin/2: 1.90] - R1 = 10000.00 R2 = 250.25
Pin 7 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 100000.00 R2 = 0.00
Pin 8 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 999999.81 R2 = 0.00
202.47 ohm
150 ohm
Pin 3 - Vin = 4.00 - Vout = 3.22 [diff to Vin/2: 1.22] - R1 = 10.10 R2 = 41.61
Pin 4 - Vin = 4.00 - Vout = 2.11 [diff to Vin/2: 0.11] - R1 = 100.20 R2 = 112.23
Pin 5 - Vin = 4.00 - Vout = 0.51 [diff to Vin/2: 1.49] - R1 = 1000.00 R2 = 146.70
Pin 6 - Vin = 4.00 - Vout = 0.05 [diff to Vin/2: 1.95] - R1 = 10000.00 R2 = 128.59
Pin 7 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 100000.00 R2 = 0.00
Pin 8 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 999999.81 R2 = 0.00
112.23 ohm
215 ohm
Pin 3 - Vin = 4.00 - Vout = 3.42 [diff to Vin/2: 1.42] - R1 = 10.10 R2 = 59.31
Pin 4 - Vin = 4.00 - Vout = 2.40 [diff to Vin/2: 0.40] - R1 = 100.20 R2 = 150.06
Pin 5 - Vin = 4.00 - Vout = 0.69 [diff to Vin/2: 1.31] - R1 = 1000.00 R2 = 207.55
Pin 6 - Vin = 4.00 - Vout = 0.07 [diff to Vin/2: 1.93] - R1 = 10000.00 R2 = 189.06
Pin 7 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 100000.00 R2 = 0.00
Pin 8 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 999999.81 R2 = 0.00
150.06 ohm
Here it is off by 2 resistors, again the best value was from the 1K resistor.
12 ohm
Pin 3 - Vin = 4.00 - Vout = 0.90 [diff to Vin/2: 1.10] - R1 = 10.10 R2 = 2.93
Pin 4 - Vin = 4.00 - Vout = 0.35 [diff to Vin/2: 1.65] - R1 = 100.20 R2 = 9.54
Pin 5 - Vin = 4.00 - Vout = 0.05 [diff to Vin/2: 1.95] - R1 = 1000.00 R2 = 11.86
Pin 6 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 10000.00 R2 = 0.00
Pin 7 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 100000.00 R2 = 0.00
Pin 8 - Vin = 4.00 - Vout = 0.00 [diff to Vin/2: 2.00] - R1 = 999999.81 R2 = 0.00
2.93 ohm