Understanding the hall sensor input matrix
We're using "multiplexing" to read our grid of 16 hall effect sensors. This means we don't need to use 16 individual input pins for reading inputs (which would just about max out an Arduino, and would be too many pins for a NodeMCU ESP8266 type microcontroller). Instead, we split our grid into "rows" and "columns". Then we activate each row, and read the values from each column. This means we need four i/o pins for the rows (outputs) and four i/o pins for the columns (inputs). Let's look a little closer.... Each hall sensor needs power (3.3v-5v supply) a ground connection and has a "floating" signal pin. When a magnet is presented to the sensor, the signal pin is forced "low" (to ground). When the magnet is removed, the signal pin is left floating (note, it is not driven "high" but allowed to "float" to whichever default value we want it to take - the technical term is "open drain" but we don...