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:
5. Es gibt auch eine Alternative zur Fliesskommazahl (hier serielle Ausgabe!):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]); }
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.Code:writeIntegerLength((((adcBat/102.4f)+0.1f)), DEC, 2); writeChar('.'); writeIntegerLength((((adcBat/1.024f)+10)), DEC, 2); writeString_P("V\n");







Zitieren



Lesezeichen