Pour n'utiliser que 5 entrées, il faut utiliser le montage dit "matrice triple". Avec 5 entrées, on peut aller jusqu'à 30 boutons.

On met toutes les entrées en INPUT_PULLUP et on en met une seule en sortie à LOW. Un tiers des inters se voit si on lit dans un sens, un tiers si on lit dans l'autre sens, et un tiers réagissent quel que soit le sens. On fait donc les deux lectures et on peut en déduire lequel des trois est appuyé.
On ne peut lire qu'un seul bouton à la fois
Voici un programme de test:
// Matrice triangulaire triple, pour chacun des couples d'entrées, trois boutons sont mis:
// (2,3), (2,4), (2,5), (2,6), (2,7), (3,4), (3,5), (3,6), (3,7), (4,5), (4,6), (4,7), (5,6), (5,7) et (6,7)
void setup()
{
Serial.begin(115200); // Régler aussi la console à 115200 bauds!
for (byte broche=2; broche <=7; broche++) pinMode(broche, INPUT_PULLUP); // Repos, toutes les broches en INPUT_PULLUP
}
byte lecture(byte ligne, byte colonne)
// Cette fonction retourne 0 si le bouton sans la diode est appuyé, 1 ou 2 si un
// des deux boutons avec une diode est appuyé, 3 si aucun des trois n'est appuyé
// Il faut que ligne > colonne
{
byte resultat = 0;
// lecture dans un sens
digitalWrite(ligne, LOW); pinMode(ligne, OUTPUT); // Mettre la ligne à LOW et la colonne étant déja en INPUT_PULLUP
if (digitalRead(colonne) == HIGH) resultat = 2;
pinMode(ligne, INPUT_PULLUP); // Remettre la ligne en entrée
// lecture dans l'autre sens
digitalWrite(colonne, LOW); pinMode(colonne, OUTPUT); // Mettre la colonne à LOW et la ligne en INPUT_PULLUP
if (digitalRead(ligne) == HIGH) resultat += 1;
pinMode(colonne, INPUT_PULLUP); // Remettre la colonne en entrée
// Fin
return resultat;
}
void loop()
{
Serial.println("\n\n(2,3) (2,4) (2,5) (2,6) (2,7) (3,4) (3,5) (3,6) (3,7) (4,5) (4,6) (4,7) (5,6) (5,7) (6,7)");
// Pour les boutons sans diode
for (byte ligne=2; ligne<=6; ligne++) for (byte colonne=ligne+1; colonne<=7; colonne++) // Pour tous les couples
if (lecture(ligne, colonne) == 0) Serial.print("appui ");
else Serial.print(" - "); // Bouton non appuyé
Serial.println();
// Pour les boutons avec une diode anode vers le bouton
for (byte ligne=2; ligne<=6; ligne++) for (byte colonne=ligne+1; colonne<=7; colonne++) // Pour tous les couples
if (lecture(ligne, colonne) == 1) Serial.print("appui ");
else Serial.print(" - "); // Bouton non appuyé
Serial.println();
// Pour les boutons avec une diode cathode vers le bouton
for (byte ligne=2; ligne<=6; ligne++) for (byte colonne=ligne+1; colonne<=7; colonne++) // Pour tous les couples
if (lecture(ligne, colonne) == 2) Serial.print("appui ");
else Serial.print(" - "); // Bouton non appuyé
Serial.println();
delay(500); // Pas trop souvent
}
Pour ce qui est du multiplexage, je ne sais rien, je ne m'y suis jamais intéressé. En fait une Uno plus multiplexeurs, j'appelle cela un Mega.
Je suis en train de voir la lecture analogique qui permet de mettre 25 boutons sur une seule broche si un seul bouton est appuyé à la fois.