Solución varias barras de botones(parte a)

Solución varias barras de botones(parte a)

de Luis Michelena -
Número de respuestas: 2
Estuve pensando un poco más el tema, y me parece que la forma de solucionarlo es utilizando un rebote, es decir: cuando una placa recibe un bit en 0, se fija si tiene ese botón en 1(no me refiero a si tiene ese led prendido), si está apretado, produce un rebote con su estado actualizado, salvo por ese bit, que debe mantenerse en 1. de esta forma no se modifica el contenido de los mensajes.
Por otra parte, no hemos tenido en cuenta que pasa cuando se desconecta la barra de botones, en que todos los valores pasan a estar en 1, por lo que, cuando estemos probando con todas las placas, todos los leds deberían estar siempre prendidos. Propongo que en ese caso se mande un update con todos los botones en 0.
Saludos,
Luis
En respuesta a Luis Michelena

Re: Solución varias barras de botones(parte a)

de Gonzalo Gabriel Perretti Roth -
Buenas como va?

Talves entendi mal, pero lo que debe 'rebotar' me parece es el estado actual de sus botones con un OR del estado que les llego, no?

Y que ese rebote se haga solo si el estado nuevo cambia el estado anterior que me mandaron (este abria que guardarlo para no mandar constantemente, lo que hace es que cuando me llegue mi rebote no haga nada. comenzado con 00000000).

Ejemplo: me llega 10000000
y yo tengo 01000000 en mis botones
si el estado anterior es distinto al que me llego, mando 11000000
sino no hago nada.

Que les parece?

Igual esta solucion implica que tengamos 'logica de botonera' y acceso a botonera en la parte donde se controlan los leds.





En respuesta a Gonzalo Gabriel Perretti Roth

Re: Solución varias barras de botones(parte a)

de Luis Michelena -
A tiene 000 en leds y botones
B tiene 010 en botones y 111 en leds
C tiene 001 en botones y leds
A en botones cambia a 100(apreté) => manda 100
B recibe 100 => manda 110 (él sabe que el led 1 tiene que estar prendido)
C recibe 110 => manda 111
A recibe 111 => cambia leds, pero no manda, porque la info de sus botones apretados está incluida.
B recibe 111 => no manda.
Resumiendo:
R recibe
L led
B botón
E envía: Tengo que enviar? .

E = (~R)&B
L= R|B
if(E)
envío(L)

Es decir el código que hacía parapadear las luces estaba casi bien, el tema era que se guardaba el estado de los leds, en vez del estado de los botones.