diff --git a/hardware/cores/arduino/Print.cpp b/hardware/cores/arduino/Print.cpp index feff940a5..143f15d11 100755 --- a/hardware/cores/arduino/Print.cpp +++ b/hardware/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/hardware/cores/arduino/Print.h b/hardware/cores/arduino/Print.h index 8cec23567..c95a0dc09 100755 --- a/hardware/cores/arduino/Print.h +++ b/hardware/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