For completeness here is the .h file that I came up with
#include <Arduino.h>
template <class T>
void printBinBase(T var, boolean bytes = false, boolean newLine = false )
{
for (int bit = (sizeof(var) * 8) - 1; bit >= 0; bit--)
{
Serial.print( var >> bit & 1);
if (bytes)
{
if (!(bit & 7))
{
Serial.print(" ");
}
}
}
if (newLine)
{
Serial.println();
}
}
template <class T>
void printBin(T var)
{
printBinBase(var, false, false);
}
template <class T>
void printBinln(T var)
{
printBinBase(var, false, true);
}
template <class T>
void printBinBytes(T var)
{
printBinBase(var, true, false);
}
template <class T>
void printBinBytesln(T var)
{
printBinBase(var, true, true);
}
and an example sketch illustrating its use
#include <PrintBin.h>
void setup()
{
Serial.begin(115200);
functions();
uint32_t var = 0b01010101101010100101010110101010;
Serial.print("printBin(var)\t");
printBin(var);
Serial.println("\nnewline from sketch");
Serial.print("printBinln(var)\t");
printBinln(var);
Serial.println("\nnewline from sketch");
Serial.print("printBinBytes(var)\t");
printBinBytes(var);
Serial.println("\nnewline from sketch");
Serial.print("printBinBytesln(var)\t");
printBinBytesln(var);
Serial.println("\nnewline from sketch");
}
void loop()
{
}
void functions()
{
Serial.println("NOTE : unlike Serial.print(var, BIN); thes functions print leading zeroes");
Serial.println();
Serial.println("printBin(var); any integer variable as a series of bits");
Serial.println("printBinln(var); any integer variable as a series of bits with a newline");
Serial.println("printBinBytes(var); any integer variable as a series of bits split into bytes");
Serial.println("printBin(var); any integer variable as a series of bits split into bytes with a newline");
Serial.println();
Serial.println("Examples");
Serial.println();
}