Lab 4 - RTOS - Prática 70% da nota do lab
WARNING
Agora surgem novas regras, consulte a página: Regras RTOS para saber as regras que serão aplicadas.
Cuidado! As antigas ainda continuam valendo!
Pico Dock
A pico-dock é um projeto interno do laboratório que viza facilitar o uso de componentes externos a rasp pico, minimizando o trabalho de termos que conectar coisas a pico e agilizando o processo de desenvolvimento de projetos.
Nesse laboratório iremos utilizar três grupos de componentes dessa placa:
- Botões
- LED RGB
- Display OLED

Para facilitar ainda mais o uso, estamos disponibilizando um projeto exemplo no repositório dessa entrega que mostra como fazer uso desses componentes. O projeto exemplo fornecido possui um RTOS e uma task que inicializa os botões, LED e OLED e para cada botão apertado exibe o seu valor.
Entrega
Vamos mexer novamente com o sensor de ultrassom, só que agora iremos estruturar o código para operar com rtos e exibir o resultado no OLED.
INFO
Você deve seguir necessáriamente a estrutura proposta a seguir
A estrutura do código que deve ser entrega, deve seguir o diagrama a seguir, onde:
pin_callback: Função callback do pino do echo.trigger_task: Task responsável por gerar o trigger.echo_task: Task que faz a leitura do tempo que o pinoechoficou levantado.oled_task: Task que exibe a informação da distancia no display.- Faz uso de dois recursos,
xSemaphoreTriggerexQueueDistance
- Faz uso de dois recursos,
Recursos:
xQueueTime: Fila com informação do tempoto_us_since_bootxSemaphoreTrigger: Avisa o OLED que uma leitura foi disparadaxQueueDistance: Valor da distância em cm lido pelatask_echo

TIP
- Utilize o timeout da
xQueueDistancepara identificar quando houve falhar no sensor!
if (xQueueReceive(xQueueDistance, &time, pdMS_TO_TICKS(100))) {
// Se caiu aqui é pq o dado chegou no tempo certo
} else {
// Se caiu aqui é pq o dado não chegou! Erro no sensor
}Você deve pensar no valor do timeout: pdMS_TO_TICKS(xxx)!!
Bem mais fácil que usar um timer para calcular o timeout!!
- O HS-SR04 pede para gerarmos um pulso de 10us no triger, o valor mínimo que conseguimos no
vTaskDelayé de 1ms! Então nesse caso
Display
Você deve exibir no display:
- Se o sensor falhou.
- O valor da distância, quando executada.
- Uma barra que representa a distância.
LED
Exibir no LED:
- Verde: Se o objeto está até 1m de distância.
- Amarelo: Se o objeto está a mais de 1m de distância.
- Vermelho: Se o sensor está com falha.