// Type aliases
using RGBPins_t = uint8_t[3];
using RGBValues_t = RGBPins_t;
// Global constant(s)
namespace gc {
constexpr RGBPins_t RGBPins {A0, A1, A2};
} // namespace gc
// Functions
// RGB analog
void lightLedUp(const RGBPins_t& Pins, const RGBValues_t& Colour) {
for (size_t I {0}; I < sizeof(RGBPins_t); ++I) { analogWrite(Pins[I], Colour[I]); }
}
// RGB digital
void lightLedUp(const RGBPins_t& Pins, uint8_t Value) {
for (size_t Shift {0}; Shift < sizeof(RGBPins_t); ++Shift) { digitalWrite(Pins[Shift], Value & (1 << Shift)); }
}
// Main
void setup() {
for (const auto& Pin : gc::RGBPins) { pinMode(Pin, OUTPUT); }
randomSeed(A5);
}
void loop() {
RGBValues_t RGBValues {static_cast<uint8_t>(random(256)), static_cast<uint8_t>(random(256)),
static_cast<uint8_t>(random(256))};
lightLedUp(gc::RGBPins, RGBValues);
delay(1000);
// lightLedUp(gc::RGBPins, static_cast<uint8_t>(random(8)));
// delay(1000);
}