pourquoi dans la calibration vous effectuez la moyenne au sein de la boucle for ?
for(i=0;i<50;i++)
{
value=analogRead(0);
V=value*5.00/1023;
Sum+=V;
delay(10);
Vcal=Sum/50; // <<==== ??????????????????
}
devrait être simplement
for (byte i = 0; i < 50; i++)
{
Sum += analogRead(0) * 5.00 / 1023;
delay(10);
}
Vcal = Sum / 50.0;
faites le ménage dans vos variables, il y a Sum qui est à la fois globale et locale... en pratique seule la valeur de calibration devrait être globale, vous pouvez dégager les autres
au lieu de diviser par 0.5, multipliez par 2.