carlosdelfino / Metronomo-Visual

Um Metrônomo que apresenta visualmente a contagem para que músicos possam manter o ritmo visual em eventos, seque seja necessário o uso de ponto eletrônico
http://carlosdelfino.eti.br/Metronomo-Visual
GNU Lesser General Public License v3.0
2 stars 1 forks source link

Adotar byte (até 8 leds) ou word (até 16 leds) para representar estado #3

Open carlosdelfino opened 4 years ago

carlosdelfino commented 4 years ago

Hoje é usado um array de booleanos para representar o estado dos LEDs em passo do beat, o ideal para economizar memória é usar um byte para até 8 LEDs ou uma word (2 bytes para até 16 LEDs)

https://github.com/carlosdelfino/Metronomo-Visual/blob/0d4cf65f5c6c8cb213f73792927eed524c182ee1/algoritimos.h#L21-L54

const byte matrixAlgoLED[2][16] =  {{
    b0001000,
    b0001000,
    b0001000,
    b0001000,
    b0001100,
    b0001100,
    b0001100,
    b0001100,
    b0001110,
    b0001110,
    b0001110,
    b0001110,
    b0001111,
    b0001111,
    b0001111,
    b0000000,
},{
...
}}
carlosdelfino commented 4 years ago

Esta proposta pode ser implementada juntamente com o que foi proposto em #2

carlosdelfino commented 4 years ago

O código abaixo, deve ser revisto e fica sugerido a escrita de uma nova função digitalWrite para uso com o Arduino Mega, alocando duas portas consecutivas e inteiras para manipular os LEDs

https://github.com/carlosdelfino/Metronomo-Visual/blob/0d4cf65f5c6c8cb213f73792927eed524c182ee1/Projeto_Metromo_Severo.ino#L359-L365

O Código para digitalWrite pode ser optimizado para uso especifico neste projeto em diversos detalhes, como remoção da verificação se o PWM está ativo, a segmentação caso se use word (2 bytes) para se obter a porta correta já que não serão consecutivas, e referenciamento próprio da porta com base no nosso mapa de LEDs.

https://github.com/arduino/ArduinoCore-avr/blob/2f67c916f6ab6193c404eebe22efe901e0f9542d/cores/arduino/wiring_digital.c#L138-L163

Talvez até mesmo adaptar e gerar uma nova versão das funções disponíveis em

https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring_digital.c