/* Charlieplexing example: 3 pins driving 6 LEDs. */
#define ROWS 3
#define COLS 2
byte LED_PINS[] = { 2, 3, 4 };
const byte LED_PIN_COUNT = sizeof(LED_PINS);
bool ledState[ROWS][COLS];
void clearMatrix(bool matrix[ROWS][COLS]) {
for(int i = 0; i < ROWS; i++) {
for(int j = 0; j < COLS; j++) {
matrix[i][j] = false;
}
}
}
void displayLEDMatrix(bool matrix[ROWS][COLS], int ms) {
byte k = 0;
unsigned long startMillis = millis();
while(millis() - startMillis < ms) {
for(byte i = 0; i < LED_PIN_COUNT; i++) {
for(byte j = 0; j < LED_PIN_COUNT; j++) {
if(i != j) {
if(matrix[i][j>i ? j-1 : j]) {
//Serial.println(String()+"Pin "+i+" is HIGH and pin "+j+" is low");
pinMode(LED_PINS[i], OUTPUT);
pinMode(LED_PINS[j], OUTPUT);
digitalWrite(LED_PINS[i], HIGH);
digitalWrite(LED_PINS[j], LOW);
// Keep LED on for 1 milliseconds:
delay(1);
pinMode(LED_PINS[i], INPUT);
pinMode(LED_PINS[j], INPUT);
}
}
}
}
}
clearMatrix(matrix);
}
void setup() {
Serial.begin(9600);
}
void loop() {
bool ledPattern[ROWS][COLS] = {false};
ledPattern[0][0] = true;
ledPattern[1][0] = true;
ledPattern[2][0] = true;
displayLEDMatrix(ledPattern, 500);
ledPattern[0][1] = true;
ledPattern[1][1] = true;
ledPattern[2][1] = true;
displayLEDMatrix(ledPattern, 500);
}