Elabore um projeto com a placa NUCLEO-G474RE que:
- use 4 leds para contar em binário de 0 a 9 com 1 segundo para cada
Passo 1
Beleza, vamos por partes! O enunciado pede para a gente criar um projeto usando a placa NUCLEO-G474RE que utilize 4 LEDs para contar de 0 a 9 em binário, mudando a cada segundo. Para resolver isso, vamos precisar entender um pouquinho de programação de microcontroladores, como manipular LEDs na NUCLEO-G474RE e implementar a lógica binária para a contagem.
Passo 2
Primeiro, vamos configurar os 4 LEDs na placa NUCLEO-G474RE. Cada LED vai representar um bit no nosso número binário. Por exemplo, o LED mais à direita será o bit menos significativo (2^0) e o mais à esquerda será o bit mais significativo (2^3).
Passo 3
Agora, precisamos programar a placa para que ela incremente o valor contado a cada 1 segundo. Para isso, vamos usar a função de delay que pausa a execução do programa por um tempo específico, nesse caso, 1000 milissegundos.
Passo 4
Vamos implementar a lógica binária. Para cada número de 0 a 9, vamos converter o número decimal para binário e acender os LEDs correspondentes. Por exemplo:
- 0 em binário é 0000 (todos os LEDs apagados)
- 1 em binário é 0001 (apenas o LED menor aceso)
- 2 em binário é 0010 (apenas o segundo LED aceso)
- E assim por diante até 9, que em binário é 1001.
Passo 5
No código, vamos usar operações bit a bit para determinar quais LEDs acender. Isso significa que para cada bit do número, vamos verificar se está ligado (1) ou desligado (0) e acender ou apagar o LED correspondente.
Passo 6
Finalmente, vamos criar um loop que conta de 0 a 9, atualizando os LEDs a cada segundo. Depois de chegar em 9, o contador volta para 0 e o processo se repete.
Resposta
Prontinho! Com esses passos, conseguimos programar a placa NUCLEO-G474RE para contar de 0 a 9 em binário usando 4 LEDs, mudando a cada segundo. Basta seguir a lógica de configuração dos LEDs, implementar a contagem binária e controlar o tempo de cada contagem.
Código de Exemplo
#include "stm32g4xx.h"
void delay_MS(int delay);
void set_LEDs(int number);
int main(void) {
// Inicializa o sistema
HAL_Init();
__HAL_RCC_GPIOA_CLK_ENABLE(); // Supondo que os LEDs estão no GPIOA
// Configura os pinos dos LEDs como saída
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
int count = 0;
while (1) {
set_LEDs(count);
HAL_Delay(1000); // Espera 1 segundo
count++;
if(count > 9){
count = 0;
}
}
}
void set_LEDs(int number){
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, (number & 0x1) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, (number & 0x2) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, (number & 0x4) ? GPIO_PIN_SET : GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, (number & 0x8) ? GPIO_PIN_SET : GPIO_PIN_RESET);
}
Esse código configura os LEDs nos pinos PA0 a PA3 e atualiza o estado deles conforme o contador incrementa de 0 a 9 a cada segundo, mostrando a representação binária do número.