// Die Klasse LEDstates, welche mehrere digitale Pins parallel verwalten und schalten kann
class LEDstates {
public:
void setup(int count, int pins[]){
m_count = count;
m_pins = pins;
// Pinmode auf OUTPUT stellen
for (int i = 0; i<count; ++i) {
pinMode( pins[i], OUTPUT);
}
}
int count() { return m_count; }
void set(int ledstates) {
// ledstates = Ein Bitfeld, in dem die Bits der anzuschaltenden LEDs gesetzt sind
// Alle LEDs durchlaufen und endsprechend ein/ausschalten
for (int i=0; i<m_count; ++i) {
// Bitmaske für die i-te LED über Shift-Operator << generieren
int bitmask = (1 << i); // Bitshift links
// Testen, ob Bit gesetzt
bool isOn = ( (ledstates & bitmask) > 0);
// LED ein/ausschalten
digitalWrite( m_pins[i], isOn);
}
}
private:
int m_count = 0; // Anzahl der PINS
int *m_pins; // Zeiger auf Integer-Array mit PIN Nummern
};
const int NUM_PINS = 6;
// C-Array mit den ausgewählten PINS
int PINS[NUM_PINS] = {A0, A1, A2, 2, 4, 7};
// Klassename LEDstates, wir erstellen eine Klassenvariable LEDs
LEDstates LEDs;
void setup() {
Serial.begin(9600);
// Klassenobjekt LEDs konfigurieren -> Anzahl der PINS/LEDS wird übergeben
// und der C-Array mit den PIN IDs
LEDs.setup(NUM_PINS, PINS);
// alle LEDs ausschalten
LEDs.set(255);
}
void loop() {
int permutations = 1 << LEDs.count(); // = 2^NUM_LEDS
for (int i=0; i<permutations; ++i) {
LEDs.set(i);
Serial.println(i);
delay(200);
}
}