hola,
La función
Dcc.initAccessoryDecoder() de la librería escribe la CV29, CV7 y CV8, como la llamada a
leeDireccionDcc() esta después siempre encuentra CV8 a 13 y no inicializa las CV1/CV9, lo hice así para no llamar a funciones de la librería antes de inicializarla. (Si
leeDireccionDcc() la colocas antes te funcionará como quieres.)
Tal como esta sólo tienes que resetear el decodificador con CV8 = 8 (o lo que quieras) y ya se pondrá la dirección 1 al arrancar de nuevo.
Otra cosa, hablando de CV1 y CV9, para no complicar la explicación en el ejemplo no comenté que estas CV definen la dirección como un decodificador clásico de 4 salidas ya que he usado la formula:
dccBase = (CV9 * 64 + CV1) * 4 - 3
O sea CV1 = 1, CV9 = 0 las direcciones empezarán por la 1 y con CV1 = 2, CV9=0 las direcciones empezaran por la 5.
NOTA: Tal como lo tienes en el listado que pasas con el Multimaus empieza con la dirección 1, pero con Lenz no, será la 256, por el tema del desplazamiento de las 4 direcciones entre Roco y Lenz.
Si deseas que se pueda elegir la dirección de 1 en 1 en lugar de 4 en 4 has de cambiar la formula a
dccBase = CV9 * 256 + CV1
La librería es bastante completa y compleja y cada vez que la miro encuentro algo.
Por ejemplo, contempla la opción de usar direccionamiento por salidas con
FLAGS_OUTPUT_ADDRESS_MODE en
Dcc.init() que es la que he usado con lo que la formula debería haber sido
dccBase = CV9 * 256 + CV1 y ademas tiene una función que programa las CV1 y CV9 con el próximo paquete de accesorios que le llegue, o sea que si detectas la pulsación del botón puedes llamar a la función de la librería
Dcc.setAccDecDCCAddrNextReceived(true) y automáticamente guardará CV1 y CV9 con el próximo paquete de accesorios, no hay que hacer nada más.
Si luego quieres que a los 15 segundos deje de estar activo solo tienes que llamar
Dcc.setAccDecDCCAddrNextReceived(false) y pasará a modo normal.
saludos,
Paco