Teach lesson
STM32 com a API do Arduino (3/4): potenciômetro e RGB
Os estudantes leem um potenciômetro com analogRead(), convertem o valor para uma saída RGB e testam, na placa real, a cor e o comportamento nos extremos da faixa.
New to LabsLand? Create your teacher account
Learning Outcomes
Ler uma entrada analógica e convertê-la para uma faixa útil.
Usar PWM para controlar o brilho de uma saída RGB.
Usar o console Serial como evidência de depuração.
Student activity preview
Activity Content
Preview only. In a class session, students can fill in responses and submit their work to the teacher.
Duas faixas diferentes
8 min
analogRead(PC0) retorna uma leitura que trataremos como um valor entre 0
e 1023. analogWrite(PA10, brightness) espera brilho entre 0 e
255. É por isso que usamos map: ele converte um intervalo em outro.
Acompanhe o valor da entrada à saída
O programa usará esta conversão:
int reading = analogRead(POT_1);
int brightness = map(reading, 0, 1023, 0, 255);Com a conversão direta mostrada, o que deve acontecer quando a leitura do potenciômetro
estiver próxima do máximo?
Controle o brilho com uma leitura analógica
29 min
Serial.begin(115200) define a taxa de comunicação como 115200 baud. Depois do
upload, abra o console Serial do CodeIDE e selecione 115200 se ele pedir uma taxa.
Cada linha deve mostrar uma leitura do ADC (contagens de 0-1023) e um brilho PWM
(0-255). map(value, inLow, inHigh, outLow, outHigh) coloca um valor no
ponto correspondente entre os dois pontos finais de saída.
Inicie o laboratório STM32 Arduino e abra a guia do editor
main.inoem CodeIDE.Cole o programa inicial. Para TODO 1, escolha um dos pinos RGB declarados. Para os TODOs 2 e 3, complete um mapeamento PWM direto, de modo que a leitura mínima produza escuridão e a leitura máxima produza brilho total.
Procure
TODO; substitua os três antes de compilar. Salve, compile e aguarde a confirmação de sucesso; depois, faça upload e aguarde a nova confirmação.Abra Serial em
115200 baud. Se nenhuma linha aparecer após um upload bem-sucedido, confirme a taxa do console e reabra o console antes de alterar o código.Teste inicial: mova o potenciômetro 1 para as posições baixa, média e alta. Em cada posição, espere 3 a 5 linhas do Serial se estabilizarem, copie um par aproximado de valores e observe o canal RGB escolhido.
Preencha todas as três linhas da tabela e a explicação imediatamente abaixo da tabela antes de modificar o
map.
#include <Arduino.h>
const int POT_1 = PC0;
const int RGB_RED = PA8;
const int RGB_GREEN = PA9;
const int RGB_BLUE = PA10;
const int RGB_OUTPUT = TODO_RGB_OUTPUT; // TODO 1: um pino RGB declarado para controlar
void setup() {
pinMode(RGB_OUTPUT, OUTPUT);
Serial.begin(115200);
}
void loop() {
int reading = analogRead(POT_1);
int brightness = map(reading, 0, 1023,
TODO_PWM_AT_MIN, TODO_PWM_AT_MAX); // TODO 2-3: extremos do mapeamento direto
analogWrite(RGB_OUTPUT, brightness);
Serial.print("pot1=");
Serial.print(reading);
Serial.print(" brightness=");
Serial.println(brightness);
delay(200);
}
Preencha a tabela após mover o potenciômetro e verificar Serial. Use apenas
três linhas e deixe as outras em branco se o TEACH mostrar mais:
- Linha 1: potenciômetro em posição baixa.
- Linha 2: potenciômetro em posição intermediária.
- Linha 3: potenciômetro em posição alta.
- Em Leitura Serial e Brilho calculado, copie os valores aproximados; eles não precisam ser exatos.
- Em Saída observada, nomeie o canal RGB e descreva seu brilho.
| Posição do potenciômetro | Leitura Serial (contagens ADC) | Brilho calculado (PWM 0-255) | Saída observada | Isso faz sentido? |
|---|---|---|---|---|
Use pelo menos duas linhas para explicar a relação entre a leitura do potenciômetro e o brilho observado.
Inverter somente após registrar o teste inicial
8 min
Depois de completar as três linhas iniciais, troque os dois extremos PWM em
map para inverter a conversão. Não altere RGB_OUTPUT. Salve, compile,
faça upload, reabra Serial em 115200 baud e teste novamente apenas as posições
mínima e máxima. Assim, você obtém uma comparação clara sem misturar uma mudança
de canal com uma mudança de conversão.
Responda em três linhas usando este formato:
1. map modificado: ...
2. posição baixa: pot1=... brightness=... | LED observado: ...
3. posição alta: pot1=... brightness=... | LED observado: ...
Em seguida, acrescente uma frase explicando como as duas observações mostram que
a conversão foi invertida.
Envie seu código
10 min
Envie seu main.ino final
Salve main.ino antes de anexá-lo. A captura deve mostrar o map invertido que foi
testado, a saída RGB escolhida, as mensagens Serial e nenhum token TODO.
Explique por que um valor entre 0 e 1023 não pode ser usado diretamente como brilho PWM se a faixa de brilho esperada for de 0 a 255.