Vrazil jsem ten chip a "datasheet" do googlu, vypadlo na mě
https://www.nxp.com/part/PCF8574T#/ a když se klikne na ten "datasheet" tak je tam popis zapojení, ukázka komunikace a použití a všechno jen přez čisté i2c (tak okolo stránky 13).
Pozor na to, ze ten obvod NENI symetrický - výstup na HIGH je max 0.3mA, zatímco výstup na LOW je 20-25 mA (a taky pokud chceš číst, tak nastavíš zápisem ten pin na VÝSTUP HIGH a pak ho čteš a dostaneš 0/1, zatímco kdybys zapsal výstup na LOW tak přečteš 0, nebo při dostatečně silném vstupním napětí pin odpálíš ). (BTW to taky znamená, že na tom expandéru jsou všechny vstupy nevyhnutelně (hardwarově) INPUT_PULLUP)
Takže nebudeš zapisovat na jeden řádek HIGH, ale LOW (a všechny ostatní piny - jak výstupní tak vstupní - zapíšeš HIGH) a pak to přečteš, a kde se ti na "vstupech" objeví LOW, tam to bylo stisknuto.
No a pak si rozebereš, co ta odpověď vlastně znamená.
Osobně mi přijde jednodušší použít MCU pin na čtení (INPUT_PULLUP) a zapisovat vyhradně na ten expandér, ale asi to není kritické.
---
Takže komunikace přez i2c - pošlu adresu, zapíšu samé jedničky (až na jednu nulu - kterou to scanuju), přečtu výsledek (projdu vstupy, kde je 0, tam to je spojené - a na základě toho vychytám stisknutá tlačítka - podle zapojení - buď v jedné řadě, nebo v jednom sloupci).
Posunu si kde budu scanovat teď, a zase to celé znova, jen ta scanovací nula bude na dalším místě.