them automatically to two decimal digits. The secret lies in the
print
method
of the
Serial
class. In recent versions of the Arduino platform, it works for all
possible data types, and when it receives a
float
variable, it rounds it to two
decimal digits before it gets output. You can specify the number of decimal
digits. For example,
Serial.println(3.141592, 4);
prints
3.1416
.
Only the output is affected by this; internally it is still a
float
variable. By the
way, on most Arduinos,
float
and
double
values are the same at the moment.
Only on the Arduino Due is
double
more accurate than
float
.
So, what does it actually cost to use
float
variables? Their memory consumption
is 4 bytes—that is, they consume as much memory as
long
variables. On the
other hand, floating-point calculations are fairly expensive and should be
avoided in time-critical parts of your software. The biggest costs are the
additional library functions that have to be linked to your program for
float
support.
Serial.print(3.14)
might look harmless, but it increases your program’s
size tremendously.
Comment line 37 out and recompile the program to see the effect. It will no
longer work properly, but we can see how this statement affects the program
size. With my current setup, it needs 3,002 bytes without
float
support for
Serial.print
and 5,070 bytes otherwise. That’s a difference of 2,068 bytes!
In some cases, you can still get the best of both worlds:
float
support without
paying the memory tax. You can save a lot of space by converting the
float
values to integers before sending them over a serial connection. To transfer
values with a precision of two digits, multiply them by 100, and don’t forget
to divide them by 100 on the receiving side. We’ll use this trick (including
rounding) later.
Increasing Precision Using a Temperature Sensor
Support for floating-point numbers is an improvement, but it mainly
increases the precision of our program’s output. We could’ve achieved a
similar effect using some integer math tricks. But now we’ll add an even better
improvement that cannot be imitated using software: a temperature sensor.
When I told you that sound travels through air at 343 m/s, I wasn’t totally
accurate, because the speed of sound isn’t constant—among other things, it
depends on the air’s temperature. If you don’t take temperature into account,
the error can grow up to a quite significant 12 percent. We calculate the
actual speed of sound C with a simple formula:
C = 331.5 + (0.6 * t)
Chapter 5. Sensing the World Around Us • 86
report erratum • discuss
www.it-ebooks.info