Coloquei LEDcubeLib.zip nos arquivos do blog com a biblitoteca padrão, desenvolvida por Rolf van Widenfelt e Mitch Altman. Para usar com a IDE do Arduino, os arquivos LEDcube.h, LEDcube.cpp e ledcube_iodefs.h devem ser colocados em uma pasta LEDcube criada dentro da pasta onde ficam os sketches.
A biblioteca define (em LEDcube.h) uma classe para interação com o cubo. Dando uma pequena simplificada, a declaração desta classe é:
- class LEDcube{
- public:
- LEDcube(void);
- void Begin(void);
- void SetColor(uint8_t);
- void Clear(void);
- void DrawPixel(uint8_t x, uint8_t y, uint8_t z);
- uint8_t GetButton(uint8_t);
- };
O programa abaixo acende sequencialmente os LEDs:
- #include <LEDcube.h>
- // objeto para manipulação dos LEDs
- LEDcube cube;
- // iniciação
- void setup()
- {
- cube.Begin();
- }
- // Loop principal
- void loop()
- {
- for (int z = 0; z < 3; z++)
- for (int y = 0; y < 3; y++)
- for (int x = 0; x < 3; x++)
- {
- cube.SetColor (COLOR_ON);
- cube.DrawPixel (x, y, z);
- delay (1000);
- cube.SetColor (COLOR_OFF);
- cube.DrawPixel (x, y, z);
- }
- }
Um vetor, de nome fb, possui 27 posições, uma para cada LED. Os métodos Clear e DrawPixel afetam apenas este vetor em memória. A mágica toda é comandada pelo Timer1. O método Begin chama a rotina start_timer1 que programa o Timer1 para gerar uma interrupção a cada milisegundo.A cada interrupção um nível (ou plano) do cubo é desenhado. Para maior velocidade, isto é feito manipulando diretamente os registradores do ATmega conforme o conteúdo do vetor fb. O olho humano não é capaz de registrar mudanças tão rápidas, portanto enxergamos como se os três níveis estivessem acesos simultaneamente.
Num próximo post veremos uma biblioteca que eu escrevi que oferece uma interface de programação diferente para controle dos LEDs.
Nenhum comentário:
Postar um comentário