Teach Remote lab lessons

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.

  • STM32 Nucleo (Arduino)
  • 55 min
  • Ensino médio / formação técnica introdutória em eletrônica
  • Português (Brasil)
  • Embedded systems
STM32 Nucleo (Arduino)
STM32 Nucleo (Arduino)

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.

1

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?

2

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()
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

Caminho do sinal do botão B1 em PC5 até digitalRead no início do loop, seleção de waitTime para delay e saídas RGB em PA8, PA9 e PA10.

O programa lê B1 no início de loop(), escolhe um waitTime e
usa esse valor para os três canais RGB nesse ciclo.

  1. Inicie o laboratório STM32 Arduino por este bloco e abra a guia do editor main.ino no CodeIDE.

  2. 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 ms e 300 ms. O tempo normal é 500 ms.

  3. Procure TODO no 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.

  4. Teste 1 — B1 solto: observe uma sequência completa de três cores e preencha a linha não pressionada.

  5. 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.

  6. 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.

3

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.

4

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.