C embarcado e um sensor no Arduino
Leia um sensor, tome uma decisão e controle um LED num laço de dispositivo simulado.
- Explicar o que é firmware e um laço repetido de dispositivo
- Separar a lógica de decisão em C portável das chamadas específicas da placa Arduino
- Testar um limite de sensor no limite, acima e abaixo dele
Um microcontrolador roda firmware perto de sensores e atuadores. Um controlador de estufa pode medir a temperatura, compará-la com um limite e ligar uma luz de aviso. A API do Arduino fornece pinMode, analogRead e digitalWrite; o exemplo Analog Read Serial mostra um valor de sensor sendo lido e relatado. Os sketches do Arduino são compilados como C++, com sintaxe parecida com a do C e funções específicas da placa. Vamos isolar a decisão em C17 comum para que o executor do navegador possa testá-la sem hardware.
Experimente
Até 15 XPSimule o laço do sensor
Preveja o estado do LED, carregue a leitura de cada missão e rode um ciclo do laço. Experimente mudar os controles deslizantes entre as missões para ver o limite.
Mission 1: A hot sensor should turn the warning LED on.
Pontuação 0/3Simulated 10-bit sensor reading (0–1023). No Arduino or physical circuit is connected.
reading >= thresholdSet the values, then run one loop cycle.
1#include <stdio.h>
2
3int warning_led(int reading, int threshold) {
4 return reading >= threshold;
5}
6
7int main(void) {
8 printf("%s\n", warning_led(720, 600) ? "LED ON" : "LED OFF");
9 printf("%s\n", warning_led(420, 600) ? "LED ON" : "LED OFF");
10 return 0;
11}LED ON LED OFF
1const int SENSOR_PIN = A0;
2const int LED_PIN = 13;
3const int THRESHOLD = 600;
4
5void setup() {
6 pinMode(LED_PIN, OUTPUT);
7 Serial.begin(9600);
8}
9
10void loop() {
11 int reading = analogRead(SENSOR_PIN);
12 bool warning = reading >= THRESHOLD;
13 digitalWrite(LED_PIN, warning ? HIGH : LOW);
14 Serial.println(reading);
15 delay(100);
16}A IDE do Arduino fornece os cabeçalhos da placa e o ambiente de build em C++ para setup e loop. O sketch não roda no compilador de C puro do navegador. Num produto, os engenheiros também consideram a calibração do sensor, leituras com ruído, limites elétricos e se um delay bloqueante impediria outro trabalho. O Blink Without Delay do Arduino mostra um padrão de temporização não bloqueante.
Principais conclusões
O firmware lê entradas, decide e controla saídas repetidamente.
Os sketches do Arduino usam C++ e APIs da placa; a lógica em C portável ainda pode ser testada separadamente.
Teste os limites e leve em conta o ruído e a temporização dos sensores reais.
Quiz da aula
4 perguntas · aprovação com 3 acertos · até 50 XP
Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.
Pratique: escreva código em C
Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.
Teste um limite de aviso
Leia um limite e três leituras simuladas de sensor. Imprima ON quando uma leitura for pelo menos igual ao limite e OFF caso contrário, um resultado por linha. Mantenha a decisão numa pequena função em C para que ela possa ser reutilizada depois num firmware.
- Abaixo, no limite, acima
- Limite zero
Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.
Dúvidas sobre esta lição
Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.
Carregando publicações…