Hi,
ein paar Punkte:
1. Das Programm RP6Control_10_Move_2 läuft permanent durch und darf nicht durch eine blockierende Tastaturabfrage aufgehalten werden.
2. Die Umrechnung vom Wert in adcBat in eine Spannung U [V] geht nicht einfach mit dem Teilen durch 100, sondern: U = adcBat * 5 /1024
3. Wenn du so U ausrechnest, brauchst du U als Fließkomma-Variable: double U;
4. Zur Ausgabe einer solchen Zahl auf dem LCD brauchst du eine eigene Funktion:
Code:
/**
* Write a floating point number to the LCD.
*
* Example:
*
* // Write a floating point number to the LCD (no exponent):
* writeDoubleLCD(1234567.890, 11, 3);
*
* The value of prec (precision) defines the number of decimal places.
* For 32 bit floating point variables (float, double ...) 6 is
* the max. value for prec (7 relevant digits).
* The value of width defines the overall number of characters in the
* floating point number including the decimal point. The number of
* pre-decimal positions is: (width - prec - 1).
*/
void writeDoubleLCD(double number, uint8_t width, uint8_t prec)
{char buffer[width + 1];
dtostrf(number, width, prec, &buffer[0]);
writeStringLCD(&buffer[0]);
}
5. Es gibt auch eine Alternative zur Fliesskommazahl (hier serielle Ausgabe!):
Code:
writeIntegerLength((((adcBat/102.4f)+0.1f)), DEC, 2);
writeChar('.');
writeIntegerLength((((adcBat/1.024f)+10)), DEC, 2);
writeString_P("V\n");
6. Das Programm macht schon dauernd einige LCD-Ausgaben, so dass du überlegen solltest, wie du deine Ausgaben allein auf das LCD bekommen kannst. Da muss sicher auch das Move_2 Programm geändert werden. Oder du weichst auf die serielle Ausgabe zum Terminal aus.
Lesezeichen