Tarefa sobre Conversor Analógico-Digital
O joystick fornecerá valores analógicos correspondentes aos eixos X e Y, que serão utilizados para: Controlar a intensidade luminosa dos LEDs RGB, onde:
- O LED Azul terá seu brilho ajustado conforme o valor do eixo Y. Quando o joystick estiver solto (posição central - valor 2048), o LED permanecerá apagado. À medida que o joystick for movido para cima (valores menores) ou para baixo (valores maiores), o LED aumentará seu brilho gradualmente, atingindo a intensidade máxima nos extremos (0 e 4095).
- O LED Vermelho seguirá o mesmo princípio, mas de acordo com o eixo X. Quando o joystick estiver solto (posição central - valor 2048), o LED estará apagado. Movendo o joystick para a esquerda (valores menores) ou para a direita (valores maiores), o LED aumentará de brilho, sendo mais intenso nos extremos (0 e 4095).
- Os LEDs serão controlados via PWM para permitir variação suave da intensidade luminosa. Exibir no display SSD1306 um quadrado de 8x8 pixels, inicialmente centralizado, que se moverá proporcionalmente aos valores capturados pelo joystick.
- Alternar o estado do LED Verde a cada acionamento.
- Modificar a borda do display para indicar quando foi pressionado, alternando entre diferentes estilos de borda a cada novo acionamento.
- Ativar ou desativar os LED PWM a cada acionamento.
- LED RGB, com os pinos conectados às GPIOs (11, 12 e 13).
- Botão do Joystick conectado à GPIO 22.
- Joystick conectado aos GPIOs 26 e 27.
- Botão A conectado à GPIO 5.
- Display SSD1306 conectado via I2C (GPIO 14 e GPIO15).
Para o desenvolvimento, devem ser seguidos os seguintes requisitos:
- Uso de interrupções: Todas as funcionalidades relacionadas aos botões devem ser implementadas utilizando rotinas de interrupção (IRQ).
- Debouncing: É obrigatório implementar o tratamento do bouncing dos botões via software.
- Utilização do Display 128 x 64: A utilização de ferramentas gráficas demonstrará o entendimento do princípio de funcionamento do display, bem como, a utilização do protocolo I2C.
- Organização do código: O código deve estar bem estruturado e comentado para facilitar o entendimento.