O primeiro passo foi gravar no microcontrolador o bootloader do Arduino, juntamente com o exemplo Blink, com o auxílio de um UsbTinyISP:
- Carreguei a aplicação Blink em um Arduino Uno.
- Retirei o ATmega do Uno e usei o UsbTiny para ler a sua memória Flash e salvar em um arquivo no PC.
- Liguei ao UsbTiny um ATmega novo, gravei a Flash lida e programei os fuses com os valores usados no Arduino.
O teste seguinte foi exercitar todos os LEDs, o buzzer e o botão. Exceto pelos LEDs ligados ao 74HC595 e ao botão, bastou copiar a sequência usada no Blink, alterando o pino utilizado (observando a correspondência entre os pinos do ATmega e a numeração usada nas bibliotecas do Arduino e lembrando que os pinos A0 a A5 podem ser usados como pinos digitais 14 a 14).
O uso do 74HC595 é simplificado pela existência da função ShiftOut no Arduino:
- // Acende/Apaga os LEDs da barra conforme um valor
- void barraLeds (int val)
- {
- shiftOut (shiftData, shiftClk, MSBFIRST, val & 0xFF);
- digitalWrite (shiftReg, HIGH);
- digitalWrite (shiftReg, LOW);
- digitalWrite (ledBar8, (val & 0x100) ? HIGH : LOW);
- digitalWrite (ledBar9, (val & 0x200) ? HIGH : LOW);
- }
- // Iniciação em setup()
- pinMode (botaoReset, INPUT);
- digitalWrite (botaoReset, HIGH);
- // Testa se botão apertado
- if (digitalRead (botaoReset) == LOW)
- {
- // botão está apertado
- }
O resultado final esta nos arquivos do blog, em PC1.zip.
É chegado o momento de fazer a aplicação propriamente dita. O código não é muito sofisticado. Usa e abusa do random (por enquanto sem iniciar a semente para permitir repetir o comportamento durante os testes):
- Ao ligar, aciona em ordem sequência os LEDs de "alimentação". O LED da "refrigeração" é aceso na cor verde.
- Os LEDs de "processamento" e "ocupado" são piscados continuamente de forma aleatória.
- O LED de "heartbeat" varia continuamente de intensidade (aproveitei aqui o código do exemplo ArduinoISP)
- Os LEDs de "temperatura" são acesos progressivamente até a metade da barra e depois oscilam ligeiramente.
- O painel fica neste comportamento "normal" até ocorrer (aleatoriamente) uma falha. Isto é sinalizado acendendo o botão de "falha" e mudando o LED de "refrigeração" para vermelho.
- A partir daí a "temperatura" vai subindo. Atingido um certo nível, o LED "perigo" é aceso.
- Ao atingir a "temperatura" máxima, o LED "pânico" acende e o buzzer é acionado.
- O painel permanece assim até que o botão de "reset" seja apertado, voltando ao comportamento "normal".
Nenhum comentário:
Postar um comentário