Matrice triangulaire poly
On voit parfois traîner sur le net le schéma pour faire une matrice triangulaire poly. Le problème des boutons est qu'ils laissent passer le courant dans les deux sens et que cela fait des erreurs de lecture. En ajoutant une diode en série avec chacun des boutons, certains pensent que la lecture est poly. Le schéma est le suivant:

Sur une matrice aussi grande, ce n'est pas facile d'y voir quelque chose, je vais essayer avec trois entrées (et donc 3 boutons).

Nous allons voir que cela ne fonctionne pas. Dans un premier temps, je vais supposer que les diodes ont un seuil nul. Les boutons SW1 et SW3 sont appuyés. Les entrées sont en INPUT_PULLUP sauf une de temps en temps que l'on passera à OUTPUT en niveau LOW. Voici le tableau des lectures des entrées:
Entrée à LOW | lecture de DO | lecture de DO | lecture de DO |
D0 | (LOW) | HIGH | HIGH |
D1 | LOW | (LOW) | HIGH |
D2 | LOW | LOW | (LOW) |
Maintenant si on ferme aussi SW2, on obtient exactement les mêmes lectures. Cela ne fonctionne donc pas. Pour que cela fonctionne, il faudrait peut-être lire un LOW si on passe au travers d'une diode et un HIGH si on passe au travers de deux diodes ou plus. Mais avec une Arduino un LOW est certain en dessous de 30% de VCC et un HIGH à partir de 70%. Si un diode à un seuil de 0,3VCC, deux diodes auraient un seuil de 0,6VCC ce qui serait insuffisant.
Si vous avez une solution je suis preneur.
Si on veut une lecture poly, il faut se rabattre sur une matrice carrée.