15.- The code: the idea

El codi gestionara la lectura del taulell (sensors reed actius) i els desarà en matrius per saber quines caselles han patit canvi.

Reed actiu = 1 = casella ocupada per una peça.
reed no actiu = 0 = casella buida.

El código gestionara la lectura del mostrador (sensores reed activos) y los guardará en matrices para saber qué casillas han sufrido cambio.

Reed activo = 1 = casilla ocupada por una pieza.
reed no activo = 0 = casilla vacía.

The code will manage the reading of the counter (active reed sensors) and store them in matrices to know which boxes have changed.

Active reed = 1 = square occupied by a piece.
reed inactive = 0 = empty square.


La seqüència d'un moviment de peça serà la següent: e2e4

              escaneig inicial               escaneig final

8            1 1 1 1 1 1 1 1                1 1 1 1 1 1 1 1
7            1 1 1 1 1 1 1 1                1 1 1 1 1 1 1 1
6            0 0 0 0 0 0 0 0                0 0 0 0 0 0 0 0
5            0 0 0 0 0 0 0 0                0 0 0 0 0 0 0 0        e2: 1 -> 0
4            0 0 0 0 0 0 0 0                0 0 0 0 1 0 0 0    
3            0 0 0 0 0 0 0 0                0 0 0 0 0 0 0 0        e4: 0-> 1
2            1 1 1 1 1 1 1 1                1 1 1 1 0 1 1 1
1            1 1 1 1 1 1 1 1                1 1 1 1 1 1 1 1

               a b c d e f g h                a b c d e f g h

Escaneig inicial: correspon a just abans de fer el moviment. 1er escaneo. First board scan.

        e2=1         e4=0

Escaneig final: quan ja s 'ha realitzat el moviment. Último escaneo. Last scan.

        e2=0        e4=1

Per tant tenim una casella que passa d'estat 1 a estat 0 = casella sortida salida. output square
                          i una altra que passa d'estat 0 a estat 1 = casella arribada. llegada. arrival square

El programa haurà de fer una lectura inicial i desar-la en una matriu i continuar llegint el taulell, al moment en que el jugador cliqui el botó de joc haurà de tornar a desar la lectura i comparar quina casella estava en 1 i ara en 0 i quina estava en zero i ara en 1. Seguidament, aquesta última lectura desada es convertirà en la lectura inicial de la jugaa següent.

Seguint només aquesta lògica ens trobem amb un problema, i és que pel cas que hi hagi hagut una captura de peça la senyal d'on hi havia la peça capturada es manté en '1' degut a que ara hi ha la peça que ha capturat.

Per tant, la casella de sortida la tinc però la d¡arribada no perquè no s'haurà donat la situació de que cap casella haurà passat de 0 a 1.

Per gestionar aquesta situació el que faré és desar les dues ultimes lectures en que hi hagi hagut un canvi respecte la lectura anterior i mirar quina casella ha passat de 1 a 0 a 1.

El programa tendrá que hacer una lectura inicial y guardarla en una matriz y continuar leyendo el mostrador, en el momento en que el jugador pulse el botón de juego tendrá que volver a guardar la lectura y comparar qué casilla estaba en 1 y ahora en 0 y cual estaba en cero y ahora en 1. Seguidamente, esta última lectura guardada se convertirá en la lectura inicial de la jugada siguiente.

Siguiendo sólo esta lógica nos encontramos con un problema, y es que para el caso de que haya habido una captura de pieza la señal de donde estaba la pieza capturada se mantiene en '1' debido a que ahora está la pieza que ha capturado .

Por lo tanto, la casilla de salida la tengo pero la de llegada no porque no se habrá dado la situación de que ninguna casilla habrá pasado de 0 a 1.

Para gestionar esta situación lo que haré es guardar las dos últimas lecturas en que haya habido un cambio respecto la lectura anterior y mirar qué casilla ha pasado de 1 a 0 a 1.

The program will have to make an initial reading and save it in an matrix and continue reading the board, at the moment when the player clicks the game button will have to return to save the reading and to compare which square was in 1 and now in 0 and which was at zero and now at 1. Next, this last saved reading will become the initial reading of the next game.

Following only this logic we find a problem, and is that in case there was a capture of a piece the signal from where the captured piece was is kept in '1' because now there is the piece that has captured .

Therefore, I have the starting square but the arrival box not because the situation has not been given that no square will have gone from 0 to 1.

To manage this situation what I will do is to save the last two readings in which there has been a change from the previous reading and look at which square has gone from 1 to 0 to 1.

Exemple: d4xe5

         escaneig inicial          escaneig intermig      escaneig penultim           escaneig final

8        1 1 1 1 1 1 1 1            1 1 1 1 1 1 1 1            1 1 1 1 1 1 1 1               1 1 1 1 1 1 1 1
7        1 1 1 1 0 1 1 1            1 1 1 1 0 1 1 1            1 1 1 1 0 1 1 1               1 1 1 1 0 1 1 1
6        0 0 0 0 0 0 0 0            0 0 0 0 0 0 0 0            0 0 0 0 0 0 0 0               0 0 0 0 0 0 0 0
5        0 0 0 0 1 0 0 0            0 0 0 0 1 0 0 0            0 0 0 0 0 0 0 0               0 0 0 0 1 0 0 0
4        0 0 0 1 0 0 0 0            0 0 0 0 0 0 0 0            0 0 0 0 0 0 0 0               0 0 0 0 0 0 0 0
3        0 0 0 0 0 0 0 0            0 0 0 0 0 0 0 0            0 0 0 0 0 0 0 0               0 0 0 0 0 0 0 0
2        1 1 1 1 1 1 1 1            1 1 1 1 1 1 1 1            1 1 1 1 1 1 1 1               1 1 1 1 1 1 1 1
1        1 1 1 1 1 1 1 1            1 1 1 1 1 1 1 1            1 1 1 1 1 1 1 1               1 1 1 1 1 1 1 1

            a b c d e f g h            a b c d e f g h             a b c d e f g h                 a b c d e f g h

Escaneig inicial (últim escaneig del torn anterior): tenim que d4 està apunt de capturar e5.
Escaneo inicial (corresponde al último escaneo con cambio de situación de la jugada anterior): tenemos que d4 está apunto de comer a e5.
First scan (it corresponds to the last scan from de previous play with change in the matrix) d4 is going to capture e5:

        d4= 1        e5=1

Escaneig intermig: un instant després d4 passa de 1 a 0 (aixeco la peça per matar).
Escaneo intermedio: justo un instante después d4 pasa de 1 a 0 porque levantamos la pieza.
Middle scan: we've just lift the piece in d4 to proceed the capture so d4 goes from 1 to 0

        d4=0        e5=1

Escaneig penúltim: com que aixequem e5 per retirar la peça del tauell tenim que e5 passa de 1 a 0, aquest és el 2on canvi abans del clic del botó.
Penúltimo escaneo: como levantamos e5 para retirarla, tenemos que e5 pasa de 1 a 0. este es el penúltimo cambio antes de que el jugador clique el boton de juego.
Penultimate scan: we lift the piece on e5 to remove it from the board so the situation is form 1 to 0. thi is the penultimate change of the board before the player click his button.

        d4=0        e5=0

Escaneig final: en el següent escaneig amb canvi e5 torna a 1 ja que hi ha la pe+a que ja capturat (la que ve de d4). Per tant tenim un canvi de 1 a 0 i un canvi de 1 a 0 a 1.
Último escaneo (con cambio): e5 vuelve a estar en 1 porque ahora hemos colocado la pieza que ha capturado. Por lo tanto vemos que en una casilla, con las 3 lecturas que nos interesan, ha habido los cambios de 1 a 0 a 1, ya tenemos la casilla de llegada cuando hay captura.
Last scan: e5 turns into a 1 again because now there is the capturing piece. We can see that we hava a square that have had the 3 values in one player time, 1 to 0 to 1 again so we have the arrival square for a captured piece situation.

        d4=0        e5=1

casella sortida d4 casella arribada e5.

Això valdrà pel cas que hi hagi captura però no pel cas de moviment normal per tant, per saber en quin cas estem només comptant el número de '1ns' que hi havia al inici amb els que hi ha al final sabrem en quin dels 2 casos estem.
Esto valdrá por el caso de que haya captura pero no para el caso de movimiento normal por tanto, para saber en qué caso estamos sólo contando el número de '1nos' que había en el inicio con los que hay al final sabremos en cuál de los 2 casos estamos.
This will be valid for the case that there is capture but not for the case of normal movement therefore, to know in which case we are only counting the number of 'ones' that was at the beginning with those at the end we will know in which of the 2 cases we are.










Comentaris

Entrades populars d'aquest blog

45.- Weighting the pieces

3.- Sensors II

21.- Electronic scheme (updated 26/08/2020)