// Charlieplex 30 LED - 4 Ring Test Code
// 6 pins control 30 LEDs
const int numPins = 6;
const int pins[numPins] = {2, 3, 4, 5, 6, 7}; // P1-P6
// LED matrix: [anode_pin, cathode_pin]
const int ledMap[30][2] = {
{0, 1}, // LED1: P1->P2
{0, 2}, // LED2: P1->P3
{0, 3}, // LED3: P1->P4
{0, 4}, // LED4: P1->P5
{0, 5}, // LED5: P1->P6
{1, 0}, // LED6: P2->P1
{1, 2}, // LED7: P2->P3
{1, 3}, // LED8: P2->P4
{1, 4}, // LED9: P2->P5
{1, 5}, // LED10: P2->P6
{2, 0}, // LED11: P3->P1
{2, 1}, // LED12: P3->P2
{2, 3}, // LED13: P3->P4
{2, 4}, // LED14: P3->P5
{2, 5}, // LED15: P3->P6
{3, 0}, // LED16: P4->P1
{3, 1}, // LED17: P4->P2
{3, 2}, // LED18: P4->P3
{3, 4}, // LED19: P4->P5
{3, 5}, // LED20: P4->P6
{4, 0}, // LED21: P5->P1
{4, 1}, // LED22: P5->P2
{4, 2}, // LED23: P5->P3
{4, 3}, // LED24: P5->P4
{4, 5}, // LED25: P5->P6
{5, 0}, // LED26: P6->P1
{5, 1}, // LED27: P6->P2
{5, 2}, // LED28: P6->P3
{5, 3}, // LED29: P6->P4
{5, 4} // LED30: P6->P5
};
void setup() {
// Initialize all pins as inputs (high impedance)
for (int i = 0; i < numPins; i++) {
pinMode(pins[i], INPUT);
}
}
void loop() {
// Test 1: Light each LED one at a time
for (int led = 0; led < 30; led++) {
lightLED(led);
delay(100);
}
delay(500);
// Test 2: Light all LEDs in each ring
// Ring 1 (LED1-3)
for (int i = 0; i < 200; i++) {
for (int led = 0; led < 3; led++) {
lightLED(led);
delayMicroseconds(500);
}
}
// Ring 2 (LED4-9)
for (int i = 0; i < 200; i++) {
for (int led = 3; led < 9; led++) {
lightLED(led);
delayMicroseconds(500);
}
}
// Ring 3 (LED10-18)
for (int i = 0; i < 200; i++) {
for (int led = 9; led < 18; led++) {
lightLED(led);
delayMicroseconds(500);
}
}
// Ring 4 (LED19-30)
for (int i = 0; i < 200; i++) {
for (int led = 18; led < 30; led++) {
lightLED(led);
delayMicroseconds(500);
}
}
delay(500);
// Test 3: Spinning effect
for (int round = 0; round < 10; round++) {
for (int led = 0; led < 30; led++) {
lightLED(led);
delay(30);
}
}
delay(1000);
}
void lightLED(int led) {
// Turn all pins to input (high impedance)
for (int i = 0; i < numPins; i++) {
pinMode(pins[i], INPUT);
}
// Set anode HIGH and cathode LOW
int anodePin = ledMap[led][0];
int cathodePin = ledMap[led][1];
pinMode(pins[anodePin], OUTPUT);
pinMode(pins[cathodePin], OUTPUT);
digitalWrite(pins[anodePin], HIGH);
digitalWrite(pins[cathodePin], LOW);
}