Imagine que devemos pausar processamento; temos 4 tasks, cada uma cumpre uma tarefa a seu tempo:
- task1 – abrir vazão para entrada de leite por 10 segundos.
- task2 – abrir vazão para entrada de mistura para bolo por 12 segundos.
- task3 – bater a mistura por 30 segundos.
- task4 – abrir vazão de saída da mistura por 30 segundos.
- Reinicia o processo.
Se usa ESP32 e tasks, essa está fácil, hum? Se ainda não usa tasks, pode começar por esse outro artigo.
O desafio – Pausar processamento
O desafio não é a rotina em si, mas o seguinte: há um botão que, quando pulsado, deve pausar o processo. Não pode fazer polling para saber qual tarefa está em execução; não pode colocar a MCU pra dormir; não pode criar uma condicional para servir de flag dentro das tasks.
Ah! Não pode usar queue, nem mutex, nem semáforos.
Referências
Pausar processamento é uma tarefa simples, mas tem formas “mais” ou “menos” eficientes. Se precisar de referências, leia os primeiros artigos sobre ESP32 aqui no blog, clicando no link a seguir e depois no rodapé, clique na última página. Tudo o que precisa para executar esse desafio está descrito nos artigos iniciais sobre ESP32.
Utilize sua IDE preferida, mas recomendo o VS Code com PlatformIO, que lhe dará mais flexibilidade no desenvolvimento.
Definições
Para que tenhamos um pouco mais de sintonia, recomendo que nomeie as tasks assim:
task1 – para task1
task2 – para a mistura de bolo
task3 – para bater a mistura
task4 – para a saída da massa pronta
Dica
A solução estará na declaração da task. Mais fácil que isso só acender um LED usando programação em blocos, hum?
O botão pode ser monitorado por polling ou interrupção, faça sua escolha.
Se precisar baixar o VS Code, pegue-o no site oficial através de link.
Para instalar o PlatformIO, clique no quadrado fragmentado do menu vertical esquerdo (segundo, de baixo para cima) e busque pela palavra chave. Após instalar, reinicie a IDE e abrir-se-á o home do PlatformIO