Carregando
0x100Lição 17 de 20

C embarcado e um sensor no Arduino

Leia um sensor, tome uma decisão e controle um LED num laço de dispositivo simulado.

25 min Questionário com 4 perguntas 1 exercício de código
Ao final desta lição, você saberá
  • 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 XP

Simule 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/3

Simulated 10-bit sensor reading (0–1023). No Arduino or physical circuit is connected.

LED: OFFreading >= threshold

Set the values, then run one loop cycle.

Portable decision logic (C17)
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}
Saída
LED ON
LED OFF
Arduino sketch (run on a board)
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.

Exercício 1

Teste um limite de aviso

+25 XP

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
main.c
Carregando editor…

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…