charlieplexing, non capisco come fare

con il sistema charlieplexing per accendere molti led da pochi IO sfruttando LOW, HIGH e HZ non capisco come si fa

dato lo schemino qui sopra, come accendo singolarmente 1 solo led?

void setup()
{
}

void loop()
{
      pinMode(3, INPUT);
      pinMode(4, OUTPUT);
      pinMode(5, OUTPUT);
      pinMode(6, OUTPUT);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(6, LOW);
   
}

cosi' me ne accende 2

non vedo mezzo schema ma credo che ci siano errori di connessione

Praticamente per far illuminare un certo LED do L al pin che é collegato al catodo di quel LED e do H al pin che é collegato al Anodo. Gli altri pin gli faccio entrata perché cosí hanno un impedenza alta e nessun altro led si illumina.
Esempio prendendo il Tuo schema:
voglio far illuminare LED1:
do H al pin 6
do L al pin 5
i pin 4 e 3 li definisco entrate.

ciao Uwe

io proprio non riesco a farlo funzionare, concettualmente e' banale, ma do il singolo comando come scritto da te uwe ma nulla

qui ho un esempio di 3 pin / 6 led funzionante, ma proprio non riesco ad accenderli se faccio lo sketch io con + di 3 pin

int previousByte;
int incomingByte;        //variable used for storing incoming data

void setup(){
  Serial.begin(9600);    //start serial communication
}

void loop(){
  if(Serial.available() > 0){      //if there is data available...
    previousByte = incomingByte;   //store the old data as previousbyte
    incomingByte = Serial.read();  //read the new data
    incomingByte = incomingByte - 48;    //Subtract 48 form it - 0 has the ASCII value 48, so to get it back to 0, we take away 48
    Serial.flush();                      //clear the serial 'data bank'
  }
  
  if(incomingByte != previousByte){    //if the new data is different to the old suuff...
   //turn all pins to output, so we can turn them to low.
   pinMode(4, OUTPUT);
   pinMode(3, OUTPUT);
   pinMode(2, OUTPUT);
    digitalWrite(2, LOW);      //turn all the pins low
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    switch(incomingByte){      //turn on the correct pins for the LED selected:
    
      case 1:
      pinMode(4, INPUT);
      pinMode(3, OUTPUT);
      pinMode(2, OUTPUT);
      digitalWrite(3, LOW);
      digitalWrite(2, HIGH);
      break;
      
      case 2:
      pinMode(4, INPUT);
      pinMode(3, OUTPUT);
      pinMode(2, OUTPUT);
      digitalWrite(3, HIGH);
      digitalWrite(2, LOW);
      break;
      
      case 3:
      pinMode(2, INPUT);
      pinMode(3, OUTPUT);
      pinMode(4, OUTPUT);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      break;
      
      case 4:
      pinMode(2, INPUT);
      pinMode(3, OUTPUT);
      pinMode(4, OUTPUT);
      digitalWrite(4, HIGH);
      digitalWrite(3, LOW);
      break;
      
      case 5:
      pinMode(3, INPUT);
      pinMode(4, OUTPUT);
      pinMode(2, OUTPUT);
      digitalWrite(2, HIGH);
      digitalWrite(4, LOW);
      break;
      
      case 6:
      pinMode(3, INPUT);
      pinMode(4, OUTPUT);
      pinMode(2, OUTPUT);
      digitalWrite(4, HIGH);
      digitalWrite(2, LOW);
      break;
      
      default:
      Serial.println("Please select a number between 1 and 6");
      break;
    }
   previousByte = incomingByte;  //this makes the code more efficient, by only repeating the above when needed
  }
}

grazie uwe, ora ci son riuscito, l'errore era non dare INPUT agli IO che non erano implicati nell'accensione del led

void setup()
{
}

void loop()
{
      pinMode(5, INPUT);
      pinMode(4, INPUT);
      pinMode(3, OUTPUT);
      pinMode(2, OUTPUT);
      digitalWrite(3, LOW);
      digitalWrite(2, HIGH);
}