namespace gc {
constexpr uint8_t ledPins[] {5,6,7,8,9,10,11,12};
}
//
// Display a bit string with leading zeros
//
template <typename T> void printBits(Stream &st, const T value) {
constexpr uint8_t maxBits = (sizeof(T) * 8);
constexpr T mask = (static_cast<T>(0x01) << (maxBits - 1));
st.print(value); st.print(" ");
uint8_t i = 0;
while (i < maxBits) {
st.print(((value << i++) & mask) ? 1 : 0);
// Output a space after each nibble.
if (!(i - ((i >> 2) << 2))) { st.print(" "); }
}
st.println();
}
//
// Light up LEDs
//
template <typename T, size_t N> void bitsToLed(const T value, const uint8_t (&leds)[N]) {
for (size_t i = 0; i < N; ++i) {
digitalWrite(leds[i],((value >> i) & 0x01));
}
}
void setup()
{
Serial.begin(115200);
randomSeed(analogRead(0)); // initialize the random number generator
for (auto &led : gc::ledPins ) {pinMode(led, OUTPUT);}
}
void loop()
{
uint8_t number = random(256);
printBits(Serial,number);
bitsToLed(number, gc::ledPins);
delay(10000);
}