reed switch

se il pezzo fosse solo uno, la cosa dovrebbe essere semplice, dovrebbe bastare leggere il cambio di tensione (anzi, di corrente sarebbe meglio) di tutti i PA e PB. Ma visto che i pezzi sono tanti, la cosa diventa quasi impossibile con quello schema (non so se matematicamente sia possibile). Se tutti i reed shift sono della stessa resistenza, analizzando la corrente e conoscendo a priori che si sposta una sola pedina, e lo stato iniziale delle pedine, analizzando la corrente dovresti farcela, anche se è molto complicato.

Per quanto riguarda l'errore umano, basta fare una griglia led: led spento = stato ok, led acceso = se c'è una pedina allora non ci deve essere(esempio mossa errata), se non c'è la pedina, ci deve essere.
per esempio mentre muovi, appena togli la pedina la casella si illuminerà per avvertirti che lì manca la pedina. se la appoggi da un'altra parte, calcola la mossa: se errata, si accende anche il led della casella in cui c'è la pedina, altrimenti si spegne il led di partenza. ciò è anche molto utile per indicare che la mossa è stata accettata, e quindi per debuggare il programma.

Però non riconosce le pedine: per riconoscere le pedine lo schema elettrico è da cambiare sicuramente, e ogni pezzo ha un magnete,e quindi dovrebbe attivare il reed shift, in modo differente (non so se quei sensori funzionano così).

Un trucco può essere di leggere i sensori uno per uno usando un multiplexer o simili. togli un sacco di complessità software, possibilità di errore di lettura, e semplifichi la parte hardware. Poi fai un pool sul multiplexer, se non supporta un interrupt di avviso cambio stato su un pin.