As there is just one ADC in an Arduino, it's multiplexed, and switching ADCs takes time to get a proper reading. The common trick is to take two readings, discarding the first, to allow the ADC to get charged properly, like this:
void mjerenje() // function for measuring batteries, diesel and water tank
{
value = analogRead(A0); // Ignore this one.
value = analogRead(A0); // The actual reading.
value = (value * 18 / 1023); // value conversion for batteries
Same for the other readings. This should help stabilising signals big time. Next: use a metal film resistor (much better temperature stability than regular carbon resistors).
Now there is another problem, and that is the resolution. You're using only the lowest 156 points of the 1024-point scale. That's not much. You can overcome this by using the external reference (the AREF pin): create a second voltage divider (using metal film resistors), and connect the mid point of that one to the AREF. A 1K + 200Ω resistor would be a good combination. Make that 10k and 2k for lower current. This would get you to about 900 points difference between full and empty.
Both the reference voltage and the result of the voltage divider are dependent on the sometimes unstable Vcc of the Arduino, but that instability doesn't matter as it's a ratio, so it cancels out, for the most stable results possible.
To lower the current you may consider doubling the value of the pull-up resistors. At 1k you have up to 5 mA passing through.