LCD-Display showing wrong numbers
As you have surmised, the problem is that the LCD retains what was there before and you need to clear it away.

That means, as the numbers increase you get, say,

4
10
48
89
194
309


etc.

When they go down though, because the LCD remembers what was there, only the characters you print will be replaced:

309 (309)
194 (194)
894 (89 - the 4 remains from before)
484 (48 - the 4 remains from before)
104 (10 - the 4 remains from before)
404 (4 - the 04 remains from before)


Also, as you have noticed, clearing the whole screen is not very nice since it makes it flash.

To combat that it is important that you only overwrite the characters that you need to overwrite and leave those that want to stay.  There's two common ways of doing this:


Append enough spaces after the number to force an overwrite:

lcd.print(throttle);
lcd.print("   "); // 3 spaces should be enough for 3 extra digits

Format the data with snprintf():

char temp[5]; // enough room for 4 numbers and one NULL character
snprintf(temp, 5, "%4d", throttle); // %4d = 4 digits, right aligned
lcd.print(temp);



The latter method, though it is more complex and uses more resources, can be preferred because it creates a much nicer output with the numbers properly right-aligned.  Also arbitrarily adding spaces after the number could overwrite things you want to keep.

You could also achieve a similar result doing it manually:

if (throttle &lt; 10) lcd.print(" "); // 0-9 add one space
if (throttle &lt; 100) lcd.print(" "); // 0-99 add one space
if (throttle &lt; 1000) lcd.print(" "); // 0-999 add one space
lcd.print(throttle);


Just like with cats, there's many ways to skin this problem...