In order to use Xiao RP2040 to individually control the brightness of nine LED lights without interference, I used a Charlie plexing pattern to use six pins to control nine LED lights. The same way as last week when detecting the type of chess pieces, I still use Ir sensors and Ir emitters to receive different reflection values from the bottom of the chess pieces to distinguish the type of chess pieces. By studying the possible paths of different types of chess pieces, we aim to control the brightness and darkness of nine LEDs when detecting different types of chess pieces.




In order to use Xiao RP2040 to individually control the brightness of nine LED lights without interference, I used a Charlie plexing pattern to use six pins to control nine LED lights. The same way as last week when detecting the type of chess pieces, I still use Ir sensors and Ir emitters to receive different reflection values from the bottom of the chess pieces to distinguish the type of chess pieces. By studying the possible paths of different types of chess pieces, we aim to control the brightness and darkness of nine LEDs when detecting different types of chess pieces.

Here is the Arduino code.


                    const int sensorPin = A2; 

                    void setup() {
                    Serial.begin(9600);
                    pinMode(sensorPin, INPUT);  
                    initializePins();
                    }

                    void loop() {
                    int sensorValue = analogRead(sensorPin); 
                    if (300 < sensorValue && sensorValue < 500) {
                        Serial.println("Piece Type: King");
                        partKing();
                    } else if (200 < sensorValue && sensorValue < 300) {
                        Serial.println("Piece Type: Queen");
                        partQueen();
                    } else if (800 < sensorValue && sensorValue < 900) {
                        Serial.println("Piece Type: Rook");
                        partRook();
                    } else if (700 < sensorValue && sensorValue < 800) {
                        Serial.println("Piece Type: Bishop");
                        partBishop();
                    } else if (950 < sensorValue && sensorValue < 962) {
                        Serial.println("Piece Type: Knight");
                        partKnight();
                    } else if (962 < sensorValue && sensorValue < 970) {
                        Serial.println("Piece Type: Pawn");
                        partPawn();
                    } else {
                        Serial.println("Color Detected: Unknown");
                        initializePins(); 
                    }
                    delay(500); 
                    }

                    void initializePins() {
                    pinMode(D4, INPUT);
                    pinMode(D5, INPUT);
                    pinMode(D6, INPUT);
                    pinMode(D7, INPUT);
                    pinMode(D8, INPUT);
                    pinMode(D9, INPUT);
                    }


                    void partKing() {

                    pinMode(D4,OUTPUT);
                    digitalWrite(D4,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);

                    initializePins();
                    }

                    void partQueen() {

                    pinMode(D4,OUTPUT);
                    digitalWrite(D4,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D4,OUTPUT);
                    digitalWrite(D4,HIGH);
                    pinMode(D9,OUTPUT);
                    digitalWrite(D9,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);
                    
                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D6,OUTPUT);
                    digitalWrite(D6,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D6,OUTPUT);
                    digitalWrite(D6,HIGH);
                    pinMode(D9,OUTPUT);
                    digitalWrite(D9,LOW);
                    delay(1);

                    initializePins();
                    }

                    void partRook() {

                    pinMode(D4,OUTPUT);
                    digitalWrite(D4,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D4,OUTPUT);
                    digitalWrite(D4,HIGH);
                    pinMode(D9,OUTPUT);
                    digitalWrite(D9,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D6,OUTPUT);
                    digitalWrite(D6,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);

                    initializePins();
                    }

                    void partBishop() {

                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D6,OUTPUT);
                    digitalWrite(D6,HIGH);
                    pinMode(D9,OUTPUT);
                    digitalWrite(D9,LOW);
                    delay(1);

                    initializePins();
                    }

                    void partKnight() {

                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D9,OUTPUT);
                    digitalWrite(D9,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D6,OUTPUT);
                    digitalWrite(D6,HIGH);
                    pinMode(D8,OUTPUT);
                    digitalWrite(D8,LOW);
                    delay(1);

                    initializePins();
                    }

                    void partPawn() {
                    pinMode(D5,OUTPUT);
                    digitalWrite(D5,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);

                    pinMode(D4,INPUT);
                    pinMode(D5,INPUT);
                    pinMode(D6,INPUT);
                    pinMode(D7,INPUT);
                    pinMode(D8,INPUT);
                    pinMode(D9,INPUT);

                    pinMode(D6,OUTPUT);
                    digitalWrite(D6,HIGH);
                    pinMode(D7,OUTPUT);
                    digitalWrite(D7,LOW);
                    delay(1);
                    
                    initializePins();
                    }