Teach lesson
STM32 com a API do Arduino (2/4): sequência e botões
Os estudantes ampliam um sketch STM32 Arduino com vários LEDs e uma entrada de botão, depois explicam como o tempo da sequência e o estado do botão afetam a saída.
New to LabsLand? Create your teacher account
Learning Outcomes
Criar uma sequência de saída usando uma lista de pinos.
Ler um botão ativo em LOW e usá-lo para mudar o comportamento.
Registrar dois estados de teste e explicar a decisão do programa.
Student activity preview
Activity Content
Preview only. In a class session, students can fill in responses and submit their work to the teacher.
Um botão ativo em LOW
8 min
Nesta configuração, o botão que usaremos está conectado ao pino PC5. É um
botão ativo em LOW: quando pressionado, digitalRead(PC5) retorna LOW;
quando não é pressionado, retorna HIGH.
Na interface do laboratório, use o controle denominado Botão 1 ou B1. Pressione e
segure-o enquanto observa pelo menos uma sequência completa e solte-o antes do
teste com o botão solto. Um clique rápido pode terminar antes que o programa o leia.
Quando o botão 1 é pressionado, qual comparação representa essa entrada ativa em LOW?
Sequência com modo rápido
27 min
O programa usa três saídas RGB já conectadas na montagem remota. setup()
configura o botão como uma entrada e cada pino RGB como uma saída. loop() lê
o botão uma vez no início de cada ciclo de três cores, seleciona um tempo de espera em
milissegundos e liga cada canal em ordem. Um pressionamento durante o ciclo só produz
efeito no ciclo seguinte; por isso, mantenha B1 pressionado até o novo ciclo começar.
O auxiliar turnOffAll() agrupa três ações repetidas sob um nome claro.
O botão define o tempo do próximo ciclo RGB
O programa lê B1 no início de loop(), escolhe um waitTime e
usa esse valor para os três canais RGB nesse ciclo.
Inicie o laboratório STM32 Arduino por este bloco e abra a guia do editor
main.inono CodeIDE.Cole o programa inicial abaixo. Substitua TODO 1 pelo nível de comparação que significa “pressionado” e TODO 2 por um tempo de espera visivelmente mais rápido, entre
100 mse300 ms. O tempo normal é500 ms.Procure
TODOno arquivo; substitua todos os TODOs antes de compilar. Salve, compile e aguarde a confirmação de sucesso. Depois, faça upload e aguarde a confirmação.Teste 1 — B1 solto: observe uma sequência completa de três cores e preencha a linha não pressionada.
Teste 2 — B1 mantido pressionado: segure B1 durante uma sequência completa, depois solte-o e preencha a linha pressionada. Registre os valores de espera reais em
ms.Não edite a sequência até completar as duas linhas iniciais e responder à pergunta logo abaixo da tabela.
#include <Arduino.h>
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;
const int BUTTON_1 = PC5; // LOW ativo: pressionado == LOW
void turnOffAll() {
analogWrite(RGB_RED, 0);
analogWrite(RGB_GREEN, 0);
analogWrite(RGB_BLUE, 0);
}
void setup() {
pinMode(BUTTON_1, INPUT);
pinMode(RGB_RED, OUTPUT);
pinMode(RGB_GREEN, OUTPUT);
pinMode(RGB_BLUE, OUTPUT);
}
void loop() {
bool pressed = digitalRead(BUTTON_1) == TODO_PRESSED_LEVEL; // TODO 1: nível de comparação para um botão ativo-LOW pressionado
int waitTime = 500;
if (pressed) {
waitTime = TODO_FAST_WAIT_MS; // TODO 2: intervalo rápido visível, em ms
}
turnOffAll();
analogWrite(RGB_RED, 180);
delay(waitTime);
turnOffAll();
analogWrite(RGB_GREEN, 180);
delay(waitTime);
turnOffAll();
analogWrite(RGB_BLUE, 180);
delay(waitTime);
}
Preencha a tabela após fazer upload do programa e testar o botão. Use apenas
duas linhas e deixe as outras em branco se o TEACH mostrar mais:
- Linha 1: botão não pressionado.
- Linha 2: botão pressionado.
- Em Valor esperado de digitalRead, escreva HIGH ou LOW de acordo com a lógica ativa em LOW.
- Em Tempo de espera usado, registre o valor em ms aplicado pelo programa.
- Em Breve explicação, conecte o estado do botão com a velocidade observada.
| Estado do botão | Valor esperado de digitalRead | Tempo de espera usado ms | Sequência observada | Breve explicação |
|---|---|---|---|---|
Explique como você sabe que o botão mudou o comportamento do programa. Use as duas linhas da tabela como evidência.
Modifique a sequência após os testes iniciais
10 min
Somente depois de completar as duas linhas iniciais, troque os blocos da primeira e da
última cor para que a sequência comece em azul e termine em vermelho. Não altere nenhum
tempo de espera. Salve, compile, faça upload e repita os dois estados do botão. Este
desafio separado verifica que a ordem das cores e o tempo controlado pelo botão são
regras independentes.
Quais dois blocos de código você moveu? Indique a nova ordem de cores e confirme, com
uma observação com B1 solto e outra com B1 mantido pressionado, se a regra de tempo
ainda funcionou.
Envie seu código
10 min
Envie seu main.ino final
Salve main.ino antes de anexá-lo. A captura deve mostrar a versão final,
a ordem de cores alterada e nenhum token TODO restante.
Por que um botão ativo em LOW pode causar confusão no início? Escreva uma regra curta que ajude você a evitar erros.