From 1d861783877eda29996a08184e62a181f96d6f75 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Wed, 26 Nov 2008 14:15:24 +0000 Subject: Adding support for printing floats and doubles (defaulting to 2 decimal places) --- cores/arduino/Print.cpp | 30 ++++++++++++++++++++++++++++++ cores/arduino/Print.h | 3 +++ 2 files changed, 33 insertions(+) diff --git a/cores/arduino/Print.cpp b/cores/arduino/Print.cpp index feff940..143f15d 100755 --- a/cores/arduino/Print.cpp +++ b/cores/arduino/Print.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include "wiring.h" #include "Print.h" @@ -78,6 +79,11 @@ void Print::print(long n, int base) printNumber(n, base); } +void Print::print(double n) +{ + printFloat(n*100, 2); +} + void Print::println(void) { print('\r'); @@ -132,6 +138,12 @@ void Print::println(long n, int base) println(); } +void Print::println(double n) +{ + print(n); + println(); +} + // Private Methods ///////////////////////////////////////////////////////////// void Print::printNumber(unsigned long n, uint8_t base) @@ -154,3 +166,21 @@ void Print::printNumber(unsigned long n, uint8_t base) '0' + buf[i - 1] : 'A' + buf[i - 1] - 10)); } + +void Print::printFloat(double number, uint8_t scale) +{ + double mult = pow(10,scale); + double rounded = floor(number /mult); + double biground = rounded * mult; + double remainder = (number - biground); + remainder = remainder / mult; + print(long(rounded)); + print("."); + + while (scale--) { + double toPrint = floor(remainder * 10); + print(int(toPrint)); + remainder -= (toPrint/10); + remainder *= 10; + } +} \ No newline at end of file diff --git a/cores/arduino/Print.h b/cores/arduino/Print.h index 8cec235..c95a0dc 100755 --- a/cores/arduino/Print.h +++ b/cores/arduino/Print.h @@ -32,6 +32,7 @@ class Print { private: void printNumber(unsigned long, uint8_t); + void printFloat(double, uint8_t); public: virtual void write(uint8_t); void print(char); @@ -42,6 +43,7 @@ class Print void print(long); void print(unsigned long); void print(long, int); + void print(double); void println(void); void println(char); void println(const char[]); @@ -51,6 +53,7 @@ class Print void println(long); void println(unsigned long); void println(long, int); + void println(double); }; #endif -- cgit v1.2.3-18-g5258