O ATmega328 deste projeto pode ser programado através da IDE do Arduino, bastando conectar um adaptador serial USB TTL (o ATmega precisa ter o bootloader do Arduino).
Lembrando, a ligação do cubo de LEDs ao ATmega é composta de duas partes:
- "Plano": um dos terminais dos LEDs de cada um dos quatro planos (ou níveis) estão interligados entre si e a um pino do ATmega
- "LED": o outro terminal dos LEDs é interligado na vertical e a um pino do ATmega
Para isto precisamos acionar um plano de cada vez. O pino ligado a este plano será configurado como saída, para acender vermelho colocamos o pino em HIGH e para acender verde colocamos o pino em LOW Os pinos ligados aos demais planos serão configurados como entrada, para ficarem em alta impedância.
Em seguida é preciso colocar a tensão correta no outro terminal do LED. Quando estamos acendendo um LED vermelho, o pino correspondente a ele precisa estar em nível HIGH e os demais em nível LOW. Para acender na cor verde é preciso inverter isto: o pino correspondente ao LED aceso fica me nível LOW e os apagados em nível HIGH.
Entendido isto, bastam duas matrizes com as listas de pinos dos planos e LEDs e alguns laços:
- int nivel[] = { 4, 5, 6, 7 };
- int led[] = {
- 0, A4, A2, 10,
- A5, A0, 3, 9,
- A3, 1, 13, 8,
- A1, 2, 12, 11
- };
- void setup()
- {
- for (int i = 0; i < 4; i++)
- {
- pinMode (nivel[i], INPUT);
- digitalWrite (nivel[i], LOW);
- }
- for (int i = 0; i < 16; i++)
- {
- pinMode (led[i], OUTPUT);
- digitalWrite (led[i], LOW);
- }
- }
- void loop()
- {
- for (int iNiv = 0; iNiv < 4; iNiv++)
- {
- pinMode (nivel[iNiv], OUTPUT);
- digitalWrite (nivel[iNiv], HIGH);
- for (int iLed = 0; iLed < 16; iLed++)
- {
- digitalWrite (led[iLed], LOW);
- }
- for (int iLed = 0; iLed < 16; iLed++)
- {
- digitalWrite (led[iLed], HIGH);
- delay (1000);
- digitalWrite (led[iLed], LOW);
- }
- digitalWrite (nivel[iNiv], LOW);
- for (int iLed = 0; iLed < 16; iLed++)
- {
- digitalWrite (led[iLed], HIGH);
- }
- for (int iLed = 0; iLed < 16; iLed++)
- {
- digitalWrite (led[iLed], LOW);
- delay (1000);
- digitalWrite (led[iLed], HIGH);
- }
- pinMode (nivel[iNiv], INPUT);
- }
- }
O vídeo abaixo mostra o resultado.
No próximo post vamos ver uma demonstração mais sofisticada do cubo.
Nenhum comentário:
Postar um comentário