Fundamentos · 13 min de leitura

Comandos do Arduino: 36 cartões, C++ e MicroPython lado a lado

Comandos do Arduino na ordem de aprendizado: 18 cartões de pinMode a tone, os equivalentes em MicroPython, código lado a lado, um plano de 4 semanas e 8 erros comuns.

O jeito mais confiável de aprender os comandos do Arduino não é decorar uma lista longa, e sim passar por eles em ordem, cada um com um exemplo pequeno e um projeto real. O app BlueGrays tem um Guia de código exatamente para isso na seção Lições da aba Aprender: 18 cartões na trilha Arduino C++, de pinMode a tone, e 18 cartões na trilha MicroPython, de import a I2C, 36 cartões no total. Todo cartão segue o mesmo formato: Para que serve?, Por quê?, Sintaxe, Exemplo (com as abas Blocos, Arduino e MicroPython), Erro comum, Dica, Ver nos projetos e um Miniteste de duas perguntas. A ordem também é fixa: primeiro os pinos (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), depois o tempo (delay, millis), em seguida variáveis, condições, laços e funções e, por fim, Serial, map, random e tone. Se você usa um Raspberry Pi Pico, aprende as mesmas ideias na trilha MicroPython com Pin, Pin.value, time.sleep, ADC.read_u16 e PWM.

Este post é um mapa do guia. Primeiro você vai ver o que tem dentro de um cartão e, depois, os 18 cartões de cada trilha na ordem real do app, com o equivalente na outra linguagem. Em seguida vêm três exemplos curtos que colocam lado a lado as versões em C++ e em MicroPython do mesmo programa, como funcionam o miniteste e o acompanhamento do progresso, uma ordem de aprendizado de 4 semanas, uma rotina diária de 20 minutos e os 8 erros mais comuns com esses comandos. Se você procura uma explicação detalhada de cada comando, o post Lista de comandos do Arduino com exemplos dedica uma seção a cada um; este post trata da ordem para aprendê-los e de como praticar.

Placa Arduino Uno: pinos digitais, pinos PWM marcados com ~ e as entradas analógicas A0–A5
Os cinco primeiros cartões da trilha Arduino C++ cobrem os três grupos de pinos desta placa: pinos digitais, pinos PWM marcados com ~ e as entradas analógicas A0–A5.

Onde fica o Guia de código e como ele funciona?

Você abre o guia pela aba Aprender, na parte inferior: na seção Lições, no topo, toque no bloco Guia de código. Quando o guia abre, você vê duas abas no topo: Arduino C++ e MicroPython; o app lembra qual trilha você abriu por último. Abaixo das abas há um contador O que você aprendeu e uma linha Próximo cartão, para você nunca precisar procurar onde parou. Os cartões são agrupados por tema: Pinos, Tempo, Variáveis, Condições, Laços, Funções, Porta serial, Matemática e Som; a trilha MicroPython acrescenta Estrutura básica e Tratamento de erros. O Guia de código é grátis: você não precisa do Premium para ler os cartões, ver os exemplos ou resolver os minitestes. Os cartões estão disponíveis em 10 idiomas, então você lê as explicações no idioma em que usa o app.

O que tem dentro de um cartão?

Todo cartão usa o mesmo esqueleto, então, a partir do terceiro cartão, você já sabe exatamente onde olhar. A tabela abaixo mostra as seções usando o 7º cartão da trilha Arduino, millis; a coluna da direita é um resumo curto do que o cartão realmente diz. A própria ordem das seções é uma ordem de aprendizado: primeiro você ouve numa frase o que o comando faz, depois entende por que precisa dele com uma comparação do dia a dia, vê como ele é escrito, lê um exemplo que funciona, conhece a armadilha mais comum e se testa com duas perguntas.

SeçãoO que ela trazNo cartão millis
Para que serve?A função do comando numa fraseInforma quantos milissegundos se passaram desde que a placa foi ligada.
Por quê?Por que você precisa dele, com uma comparação do dia a diaÉ como colocar um bolo no forno e olhar o relógio de vez em quando: você faz outras coisas enquanto espera.
SintaxeComo o comando é escritounsigned long now = millis(); (guarda o tempo atual)
ExemploUm programa curto que funciona; abas Blocos, Arduino e MicroPythonCódigo que inverte um LED a cada 500 ms; no Pico, o mesmo trabalho com time.ticks_ms
Erro comumA armadilha em que os iniciantes mais caemArmazenar millis num int: o número fica incorreto depois de uns 33 segundos.
DicaUma regrinha que facilita a vidaSempre escreva a comparação como now - previous >= interval.
Ver nos projetosProjetos que usam o comando, do mais fácil ao mais difícilMais de 50 projetos; a lista começa com um projeto grátis de botão com ESP32
MinitesteDuas perguntas, com uma explicação curta depois de cada respostaO que millis() retorna? Em qual tipo você deve armazenar millis?

A seção Exemplo abre na trilha do próprio cartão: num cartão de Arduino, a aba Arduino vem primeiro; num cartão de MicroPython, a aba MicroPython. Mas a outra aba está sempre lá também, e isso transforma o guia num dicionário. No cartão Pino de saída: Pin(15, Pin.OUT) da trilha MicroPython, por exemplo, a aba Arduino traz um código que faz o mesmo trabalho com pinMode e digitalWrite, e os comentários dizem qual linha corresponde a quê (como a linha que faz o papel de led.toggle()). Quase todo cartão tem também uma terceira aba, Blocos, que mostra o programa de exemplo em blocos. Se você está passando do Arduino para o Pico, o método mais rápido é este: abra um cartão que você já conhece, troque de aba e compare os dois programas linha por linha.

Trilha Arduino C++: 18 cartões e seus equivalentes em MicroPython

A tabela abaixo é a ordem real da trilha Arduino no app; a última coluna mostra como o mesmo trabalho é feito em MicroPython num Raspberry Pi Pico. Os números dos pinos são os mesmos dos exemplos dos cartões: para um LED, 13 ou 9 no Uno e GP15 no Pico; para um botão, 2 no Uno e GP14 no Pico; para leitura analógica, A0 no Uno e GP26 no Pico. Os cinco primeiros cartões cobrem os pinos, o 6 e o 7 cobrem o tempo, do 8 ao 14 vêm os fundamentos de programação e os quatro últimos cobrem a porta serial, a mudança de escala, os números aleatórios e o som. A ordem é proposital: primeiro você aprende como a placa toca o mundo lá fora e, depois, controla esses toques com variáveis, condições e laços.

NºCartãoPara que serve?Equivalente em MicroPython
1pinModeDiz à placa se um pino é saída (LED, buzzer) ou entrada (botão, sensor)Pin(15, Pin.OUT) · Pin(14, Pin.IN, Pin.PULL_UP)
2digitalWriteLiga (HIGH, 5 V) ou desliga (LOW, 0 V) um pino de saídaled.value(1) · led.on() (liga) · led.off() (desliga)
3digitalReadLê se um pino de entrada está em HIGH ou LOWbutton.value() → 1 ou 0
4analogReadConverte a tensão em A0–A5 num número de 0 a 1023ADC(26).read_u16() → 0–65535
5analogWrite (PWM)Diminui o brilho de um LED ou a velocidade de um motor com um valor de 0 a 255 num pino ~PWM(Pin(15)) · freq(1000) · duty_u16(0–65535)
6delayPausa o código pelo número de milissegundos indicadotime.sleep(0.5) (segundos) · time.sleep_ms(500) (milissegundos)
7millisMilissegundos desde a inicialização; temporização sem parar o códigotime.ticks_ms() · time.ticks_diff()
8Variáveis e tiposGuarda valores com tipos como int, float, bool, unsigned longNão se escreve o tipo: count = 0, volts = 3.3
9if / else if / elseExecuta códigos diferentes conforme uma condiçãoif / elif / else
10Operadores de comparação e lógicosMonta condições com ==, !=, <, >, &&, ||, !==, !=, <, > · and, or, not
11Laço forRepete uma tarefa um número definido de vezesfor i in range(10):
12Laço whileRepete enquanto uma condição for verdadeirawhile condição:
13Funções (void, parâmetros, return)Divide o código em partes com nome, que podem ser reutilizadasdef blink(times): … return (função com parâmetro)
14ArraysGuarda em ordem, sob um único nome, valores do mesmo tipoLista: pins = [2, 3, 4] · len(pins)
15Serial.begin / print / println (porta serial)Envia textos e valores para o computador (Monitor Serial)print(x) · f-string; não precisa de Serial.begin
16mapConverte uma faixa de números em outraNão há comando pronto: raw * 255 // 1023 ou uma função sua
17random / randomSeedGera números aleatóriosimport random · random.randint(1, 6) (número de 1 a 6)
18tone / noToneToca num buzzer um som de frequência definida e o interrompePWM: freq(440) · duty_u16(32768); duty_u16(0) para silenciar
Os equivalentes não são um para um, e a maior diferença está nas faixas de números. No Uno, analogRead retorna 0–1023 e analogWrite espera 0–255; no Pico, tanto ADC.read_u16 quanto PWM.duty_u16 usam 0–65535. No Pico, só GP26, GP27 e GP28 leem valores analógicos, e eles medem no máximo 3,3 V, então ligue o potenciômetro no 3V3 (OUT), e não em 5 V. O MicroPython também não tem um comando pronto de map ou tone: você muda a escala com uma simples multiplicação e divisão e faz som com a configuração freq do PWM.

Trilha MicroPython: 18 cartões e seus equivalentes em Arduino

A trilha MicroPython foi escrita pensando no Raspberry Pi Pico; os exemplos dos cartões são programas curtos que você pode rodar num Pico, por exemplo com o Thonny. A ordem é um pouco diferente da trilha Arduino, porque em Python você precisa primeiro se acostumar às regras da própria linguagem: adicionar módulos com import, imprimir com print e a regra da indentação e dos dois-pontos. A aba Arduino de cada cartão de MicroPython também traz a versão em C++ do mesmo programa, então, se você já conhece Arduino, pode ler a tabela da direita para a esquerda. Se é a primeira vez que você usa um Pico, o post O que é o Raspberry Pi Pico é uma boa preparação para a instalação e os pinos.

NºCartãoPara que serve?Equivalente em Arduino
1import e from … importAdiciona ao programa módulos como machine e time#include para bibliotecas; comandos básicos como pinMode e delay já vêm embutidos
2print e f-stringsImprime textos e valores no shell do ThonnySerial.begin(9600) + Serial.println()
3Pino de saída: Pin(15, Pin.OUT)Transforma um pino GP em saída; value(), on(), off(), toggle()pinMode(13, OUTPUT) + digitalWrite()
4Pino de entrada: Pin.IN, PULL_UP, PULL_DOWNTransforma um pino em entrada, escolhe o resistor interno e o lê com value()pinMode(2, INPUT_PULLUP) + digitalRead()
5time.sleep e sleep_msPausa o programa em segundos ou milissegundosdelay()
6while True: o loop infinitoRepete as linhas abaixo dele enquanto o Pico estiver ligadoloop()
7Indentação e dois-pontos (:)Define qual linha pertence a qual blocoChaves { } e ponto e vírgula ;
8Variáveis: int, float, str, boolGuarda valores; o tipo é definido automaticamenteint, float, String, bool (o tipo é declarado)
9if / elif / else, and / or / not (condições)Ramifica conforme uma condição e combina condiçõesif / else if / else · &&, ||, !
10for e rangeRepete um número definido de vezes; range(0, 10) conta de 0 a 9for (int i = 0; i < 10; i++)
11Listas: [ ], índice, lenGuarda vários valores em ordem; o primeiro item fica no índice 0Arrays: int pins[] = {2, 3, 4};
12def e return (funções)Dá nome a um código reutilizável e devolve um resultadoFunções void ou com tipo, return
13ADC: leitura analógica com read_u16Lê a tensão em GP26, GP27, GP28 como 0–65535analogRead() → 0–1023
14PWM: freq e duty_u16Diminui o brilho de um LED, toca notas num buzzeranalogWrite() e tone()
15time.ticks_ms e ticks_diffMede o tempo decorrido sem parar o códigomillis()
16Pin.irq: botões com interrupçõesExecuta uma função no instante em que um botão é pressionadoattachInterrupt()
17try / except (captura de erros)Evita que o programa pare quando ocorre um erroNão há equivalente comum no Arduino; você verifica os valores de retorno
18I2C e scan()Encontra os endereços dos dispositivos no barramento I2CWire.begin() + código de scanner I2C

O mesmo programa em duas linguagens: 3 exemplos lado a lado

O primeiro exemplo é o “olá, mundo” de toda linguagem: piscar o LED da placa a cada meio segundo. No Uno, o LED integrado está ligado ao pino 13, então você não precisa montar nenhum circuito. O Pico é um pouco diferente: no Pico comum, o LED da placa fica no GP25, mas no Pico W o LED está ligado ao chip sem fio e Pin(25) não o acende. Por isso, escrever Pin("LED", Pin.OUT) em MicroPython é mais seguro; nas versões atuais do MicroPython, esse nome encontra o LED da placa tanto no Pico quanto no Pico W. Se o firmware da sua placa não reconhecer o nome “LED”, instale um MicroPython atual no Pico. O projeto grátis Piscar o LED integrado do Raspberry Pi Pico (Pico e Pico W) explica justamente essa diferença.

C++ (Arduino IDE)
1// Örnek 1: dahili LED'i yakıp söndür / Example 1: blink the built-in LED
2void setup() {
3  pinMode(13, OUTPUT);     // Uno'da dahili LED 13. pinde / built-in LED is on pin 13 on the Uno
4}
5
6void loop() {
7  digitalWrite(13, HIGH);  // LED yanar / LED on
8  delay(500);              // 500 ms bekle / wait 500 ms
9  digitalWrite(13, LOW);   // LED söner / LED off
10  delay(500);              // 500 ms bekle / wait 500 ms
11}
MicroPython
1# Örnek 1: dahili LED'i yakıp söndür / Example 1: blink the onboard LED
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT)  # Pico ve Pico W'de dahili LED / onboard LED on Pico and Pico W
6# Pin(25, Pin.OUT) yalnız düz Pico'da çalışır / Pin(25, Pin.OUT) works only on the plain Pico
7
8while True:                # Arduino'daki loop() gibi / like loop() in Arduino
9    led.on()               # LED yanar / LED on
10    time.sleep_ms(500)     # 500 ms bekle / wait 500 ms
11    led.off()              # LED söner / LED off
12    time.sleep_ms(500)     # 500 ms bekle / wait 500 ms

O segundo exemplo acrescenta uma entrada: o LED fica aceso enquanto o botão está pressionado. O botão vai entre o pino 2 e o GND no Uno, e entre o GP14 e o GND no Pico. No Uno, usamos de novo o LED integrado do pino 13; no Pico, ligue um LED externo ao GP15 por um resistor de 220 Ω (a ferramenta Resistor para LED calcula esse valor para o seu LED). As duas linguagens ativam o resistor de pull-up interno: INPUT_PULLUP no Arduino, Pin.PULL_UP no MicroPython. Com essa ligação, a lógica fica invertida: pressionar o botão puxa o pino para o GND, então o Arduino lê LOW e o Pico lê 0. A pausa de 20 ms no final não resolve totalmente o repique mecânico do botão, mas reduz as oscilações muito curtas. Os detalhes da ligação do botão estão no post Como ligar um botão no Arduino.

C++ (Arduino IDE)
1// Örnek 2: butona basılıyken LED yanar / Example 2: LED on while the button is pressed
2const int BUTTON_PIN = 2;  // buton: 2. pin ile GND arasında / button between pin 2 and GND
3const int LED_PIN = 13;    // dahili LED / built-in LED
4
5void setup() {
6  pinMode(BUTTON_PIN, INPUT_PULLUP);  // iç pull-up direnci açık / internal pull-up on
7  pinMode(LED_PIN, OUTPUT);
8}
9
10void loop() {
11  if (digitalRead(BUTTON_PIN) == LOW) {  // basılıyken LOW okunur / reads LOW while pressed
12    digitalWrite(LED_PIN, HIGH);
13  } else {
14    digitalWrite(LED_PIN, LOW);
15  }
16  delay(20);  // kısa bekleme / short pause
17}
MicroPython
1# Örnek 2: butona basılıyken LED yanar / Example 2: LED on while the button is pressed
2from machine import Pin
3import time
4
5button = Pin(14, Pin.IN, Pin.PULL_UP)  # buton: GP14 ile GND arasında / button between GP14 and GND
6led = Pin(15, Pin.OUT)                 # LED: GP15 + 220 ohm direnç / LED on GP15 with 220 ohm
7
8while True:
9    if button.value() == 0:            # basılıyken 0 okunur / reads 0 while pressed
10        led.value(1)
11    else:
12        led.value(0)
13    time.sleep_ms(20)                  # kısa bekleme / short pause

O terceiro exemplo mostra a diferença mais importante entre as duas linguagens: as faixas de números. O pino do meio do potenciômetro vai no A0 no Uno e no GP26 no Pico; os pinos das pontas vão no 5V e no GND no Uno, e no 3V3 (OUT) e no GND no Pico. O LED vai no pino 9 (marcado com ~) no Uno e no GP15 no Pico, cada um com um resistor de 220 Ω. No Arduino, analogRead retorna 0–1023, mas analogWrite espera 0–255, por isso map(raw, 0, 1023, 0, 255) fica no meio. No Pico, tanto read_u16 quanto duty_u16 usam 0–65535, então você pode passar a leitura direto para o PWM. Você vê como o PWM funciona no post O que é PWM e como acompanhar os valores ao vivo no guia do Monitor Serial.

C++ (Arduino IDE)
1// Örnek 3: potansiyometreyle LED parlaklığı / Example 3: LED brightness with a potentiometer
2const int POT_PIN = A0;  // potansiyometrenin orta ucu / potentiometer wiper
3const int LED_PIN = 9;   // ~ işaretli PWM pini / PWM pin marked with ~
4
5void setup() {
6  pinMode(LED_PIN, OUTPUT);
7  Serial.begin(9600);
8}
9
10void loop() {
11  int raw = analogRead(POT_PIN);               // 0-1023
12  int brightness = map(raw, 0, 1023, 0, 255);  // 0-255 aralığına ölçekle / scale to 0-255
13  analogWrite(LED_PIN, brightness);
14  Serial.println(raw);                         // Seri Monitör'de izle / watch in the Serial Monitor
15  delay(50);
16}
MicroPython
1# Örnek 3: potansiyometreyle LED parlaklığı / Example 3: LED brightness with a potentiometer
2from machine import Pin, ADC, PWM
3import time
4
5pot = ADC(26)            # GP26 = ADC0, orta uç / wiper on GP26 (ADC0)
6led = PWM(Pin(15))       # LED: GP15 + 220 ohm direnç / LED on GP15 with 220 ohm
7led.freq(1000)           # saniyede 1000 aç-kapa / 1000 cycles per second
8
9while True:
10    raw = pot.read_u16()     # 0-65535
11    led.duty_u16(raw)        # aynı aralık, ölçekleme gerekmez / same range, no scaling needed
12    print(raw)               # Thonny kabuğunda izle / watch in the Thonny shell
13    time.sleep_ms(50)
ConceitoArduino C++MicroPython (Pico)
Roda uma vezvoid setup() { … }As linhas antes de while True:
Repete para semprevoid loop() { … }while True: e as linhas indentadas abaixo dele
Bloco de códigoChaves { } e ; no fim da linha: no fim da linha e uma indentação de 4 espaços
Comentário// comentário# comentário
Pino de saídapinMode(13, OUTPUT); digitalWrite(13, HIGH);led = Pin(15, Pin.OUT) · led.value(1) (liga o LED)
Pino de entradapinMode(2, INPUT_PULLUP); digitalRead(2)Pin(14, Pin.IN, Pin.PULL_UP) · button.value()
Leitura analógicaanalogRead(A0) → 0–1023ADC(26).read_u16() → 0–65535
Saída PWManalogWrite(9, 0–255)PWM(Pin(15)).duty_u16(0–65535)
Esperadelay(500)time.sleep_ms(500) ou time.sleep(0.5)
ImpressãoSerial.begin(9600); Serial.println(x);print(x)

Miniteste, “Concluir” e seu progresso em Meu nível

  • Miniteste: todo cartão termina com duas perguntas, e o título mostra Miniteste · 1 / 2. Quando você toca numa opção, recebe na hora Correta. ou Incorreta. com uma explicação curta; você continua com Próxima pergunta.
  • Pontuação: quando as duas perguntas terminam, você vê uma pontuação como 2 / 2 corretas. O cartão não pode ser concluído sem o teste; no lugar do botão aparece Resolva o miniteste para concluir este cartão.
  • Concluir: depois do teste, aparece o botão Concluir e avançar (no último cartão de uma trilha, é só Concluir). Ao tocar nele, o cartão fica salvo como aprendido na sua conta, uma breve comemoração mostra seu progresso, como Muito bem! 5 / 18 cartões, e o próximo cartão se abre.
  • Selo e contador: os cartões que você aprendeu mostram a marca Aprendido na lista, e o contador O que você aprendeu no topo do guia aumenta. Quando você termina todos os cartões de uma trilha, aparece Você aprendeu todos os cartões desta trilha.
  • Meu nível: na tela Meu nível da seção Aprender, sob o título Guia de código e a nota Cartões que você já estudou, há duas barras separadas: Arduino C++ x/18 e MicroPython x/18. Essas barras contam só os cartões do guia de código.
  • Uma regra honesta para você mesmo: o app não bloqueia você depois de uma resposta errada; o botão Concluir aparece assim que o teste termina. Então, antes de tocar nele, confira se você consegue explicar em voz alta por que as duas respostas estão corretas; se não conseguir, volte à seção Exemplo e leia o código linha por linha mais uma vez.

Ver nos projetos: encontrando o comando em código de verdade

O último passo para aprender um comando é reconhecê-lo num projeto que funciona, escrito por outra pessoa. A seção Ver nos projetos de um cartão mostra alguns projetos selecionados, com uma frase embaixo dizendo quantos projetos usam o comando no código; o link Todos abre a lista completa. A lista vai do mais fácil ao mais difícil e pode ser filtrada com Todos, Grátis e Premium. O millis, por exemplo, aparece no código de mais de 50 projetos: a lista começa com o grátis Controle de LED com botão no ESP32 (alternância), segue com projetos de Pico para iniciantes como Piano de botões com Raspberry Pi Pico (5 botões + buzzer + gravador de melodias) e Sensor de estacionamento com Raspberry Pi Pico (HC-SR04 + 3 LEDs + buzzer) e sobe até projetos intermediários como Raspberry Pi Pico: semáforo com 4 modos selecionados por botão (máquina de estados, GP11-13 + GP4), que combinam um botão com temporização. Nossa sugestão: abra um projeto grátis da lista, encontre o comando no código, mude um valor e preveja o resultado antes. Para ver o que cada linha do código faz, a aba Entenda o código do projeto é o próximo passo natural.

Ordem de aprendizado recomendada: um plano de 4 semanas

Vamos supor que você tenha uns 20 minutos por dia, 5 dias por semana. Para terminar uma trilha em 4 semanas, um cartão na maioria dos dias basta; nos outros dias, em vez de um cartão novo, você revisa e trabalha num projeto. Se você tem um Arduino, siga só a coluna do Arduino; se tem um Pico, a coluna do MicroPython. Se tem os dois, termine primeiro a trilha Arduino e passe para o MicroPython no segundo mês; os conceitos são os mesmos, então a segunda trilha vai bem mais rápido. Todos os projetos da tabela são grátis no BlueGrays. Se quiser um plano mais amplo, o roteiro de 30 dias do post App para aprender Arduino combina bem com esta tabela; se você dá aulas com o Pico, o plano de aula de Raspberry Pi Pico distribui os cartões de MicroPython em 6 semanas de aulas.

SemanaCartões de Arduino C++Cartões de MicroPythonProjetos grátis da semanaO que você consegue fazer no fim da semana
11–5: pinMode, digitalWrite, digitalRead, analogRead, analogWrite1–5: import, print, pino de saída, pino de entrada, time.sleepLED piscante, Controle de LED com botão (momentâneo); Pico: Piscar o LED integrado do Raspberry Pi Pico (Pico e Pico W)Piscar um LED, ler um botão; no Arduino, ver um valor analógico
26–10: delay, millis, variáveis, if / else, operadores6–9: while True, indentação, variáveis, if / elif / elseLuz noturna com LDR, Controle de LED com botão no ESP32 (alternância); Pico: Raspberry Pi Pico: dois LEDs alternados (padrão flip-flop, GP14 + GP13)Tomar decisões com base numa leitura, controlar o tempo sem parar o programa
311–14: for, while, funções, arrays10–13: for e range, listas, def, ADCEfeito Knight Rider com LEDs, Sequencial de LEDs; Pico: Raspberry Pi Pico: semáforo (3 LEDs em sequência, GP11/GP12/GP13)Pôr repetições em laços, pinos em arrays e tarefas em funções
415–18: Serial, map, random e tone14–18: PWM, ticks_ms, Pin.irq, try / except e I2CUso do buzzer, Medição da intensidade da luz com LDR; Pico: Raspberry Pi Pico: semáforo com 4 modos selecionados por botão (máquina de estados, GP11-13 + GP4)Imprimir valores, ajustar som e brilho, montar um projeto pequeno do zero

Uma rotina diária de 20 minutos

  1. 3 minutos, aquecimento: resolva as Perguntas do dia na seção Aprender ou refaça o miniteste de ontem. O objetivo é conferir se você ainda lembra hoje do comando de ontem.
  2. 5 minutos, cartão novo: leia as seções Para que serve?, Por quê? e Sintaxe. Copie a sintaxe à mão no papel; escrevendo, fica mais difícil seus olhos pularem parênteses e pontos e vírgulas.
  3. 3 minutos, exemplo: explique o exemplo para si mesmo linha por linha e depois troque de aba. Num cartão de Arduino, olhe a aba MicroPython; num cartão de MicroPython, a aba Arduino, e compare as linhas que fazem o mesmo trabalho nos dois programas.
  4. 2 minutos, miniteste: responda às duas perguntas e leia a explicação das que errou. Dê mais uma olhada nas caixas Erro comum e Dica nesse momento.
  5. 6 minutos, projeto: abra um projeto grátis e fácil da lista Ver nos projetos, encontre o comando no código e mude um único valor: um tempo de espera, um número de pino ou um limite. Se o seu circuito estiver pronto, carregue na placa; se não, preveja o resultado e confira com Entenda o código.
  6. 1 minuto, anotação: escreva uma linha no caderno: o nome do comando, o significado dele numa frase e o equivalente na outra linguagem. No fim das quatro semanas, essa página é o seu próprio dicionário de comandos.

8 erros comuns com esses comandos

ErroSintomaSoluçãoCartão
Esquecer o pinModeO LED não acende de jeito nenhum ou fica muito fracoEscreva pinMode(pino, OUTPUT) no setup(); no Pico, crie o pino com Pin(15, Pin.OUT)pinMode · Pino de saída
Escrever = em vez de == numa condiçãoif (x = 5) é sempre verdadeiro, então o programa sempre executa o mesmo ramoUse == para comparar; em Python, if x = 5 dá SyntaxError na horaif / else · operadores
Travar o código com um delay longoVocê aperta o botão, mas a reação demora ou nunca vemFaça a espera com millis; no Pico, use time.ticks_ms e ticks_diffdelay · millis · ticks_ms
Confundir a faixa do analogReadUm limite copiado do Arduino nunca dispara no PicoanalogRead dá 0–1023 no Uno, read_u16 dá 0–65535 no Pico; recalcule o limite para a nova faixaanalogRead · ADC
Levar um valor de analogWrite para o duty_u16No Pico, duty_u16(255) deixa o LED quase apagadoduty_u16 espera 0–65535: meio brilho é 32768, brilho total é 65535analogWrite · PWM
Guardar millis num intNo Uno, a temporização falha depois de uns 33 segundosDeclare as variáveis de tempo como unsigned long e escreva a comparação como now - previous >= intervalmillis
Esperar a lógica do INPUT_PULLUP ao contrárioVocê espera HIGH ou 1 ao apertar o botão, mas recebe LOW ou 0Com pull-up, pressionado é LOW (0) e solto é HIGH (1)digitalRead · Pino de entrada
Escrever sleep(500) no PicoO Pico espera 500 segundos, mais de 8 minutos, em vez de meio segundosleep recebe segundos: escreva sleep(0.5) ou sleep_ms(500)time.sleep

A aba Blocos: entender um comando vendo-o

Blocos do projeto LED piscante em inglês: configurar o pino 9 como SAÍDA e, em repetir para sempre, escrever ALTO no pino 9, aguardar 100 ms, escrever BAIXO no pino 9, aguardar 100 ms
Blocos do projeto grátis LED piscante: o bloco “configuração (uma vez)” corresponde ao setup() e o bloco “repetir para sempre”, ao loop().

A aba Blocos permite ver o que um comando faz sem escrever código, principalmente nos primeiros cartões de uma trilha. Na imagem acima, pinMode vira o bloco “configurar pino 9 como SAÍDA”, digitalWrite vira “escrever ALTO no pino 9” e delay vira “aguardar 100 ms”; no cartão pinMode, uma nota abaixo da visualização em blocos também lista as opções do menu suspenso: SAÍDA, ENTRADA e ENTRADA (PULLUP). Os blocos aparecem no idioma do app e servem para leitura: no app você não arrasta blocos para escrever um programa, e a placa sempre recebe o código de verdade. O jeito sugerido de usá-los: primeiro preveja o que o programa vai fazer na aba Blocos, depois troque para a aba Arduino e descubra qual linha é cada bloco. Nos projetos que têm visualização em blocos, o botão Ver em blocos na página do projeto permite fazer a mesma comparação com um projeto inteiro; o básico está no post O que é programação em blocos.

Resumindo, você não precisa de uma lista longa para aprender os comandos do Arduino: bastam a ordem certa, um exemplo pequeno que funcione para cada comando, uma verificação de duas perguntas e um projeto real que use o comando. Se você começar hoje pelo cartão pinMode, em quatro semanas terá terminado os 18 cartões e visto com os próprios olhos cada comando em pelo menos um projeto; quando passar para o Pico, vai percorrer os mesmos conceitos na trilha MicroPython bem mais rápido. Se quiser experimentar os cartões e os projetos dentro deles, instale o BlueGrays no celular e abra o primeiro cartão na seção Aprender.

Perguntas frequentes

Quais são os comandos básicos do Arduino?

Os comandos do Arduino mais usados são os de pinos (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), os de tempo (delay, millis), os da porta serial em Serial e auxiliares como map, random e tone. Junto com eles, estruturas de C++ como if, for e while, além das funções, formam o fluxo do programa. A trilha Arduino C++ do Guia de código do BlueGrays cobre esses temas em ordem, em 18 cartões.

Qual comando do Arduino devo aprender primeiro?

Comece com pinMode e digitalWrite, porque esses dois bastam para acender um LED e você vê o resultado na hora. Depois, acrescente a temporização com delay e a leitura de botão com digitalRead. analogRead, millis, if e for se apoiam todos nesses quatro comandos.

Qual é a diferença entre os comandos do Arduino e do MicroPython?

Os conceitos são os mesmos, a escrita é diferente: Pin(15, Pin.OUT) e led.value(1) substituem pinMode e digitalWrite, time.sleep_ms substitui delay e while True substitui loop(). As faixas de números também mudam: analogRead retorna 0–1023 no Uno, enquanto read_u16 retorna 0–65535 no Pico. Em Python, a indentação e os dois-pontos ocupam o lugar das chaves e dos pontos e vírgulas do C++.

Existe um comando delay no MicroPython?

Não existe um comando chamado delay; sleep (segundos), sleep_ms (milissegundos) e sleep_us (microssegundos), do módulo time, fazem o mesmo trabalho. O delay(500) do Arduino vira time.sleep_ms(500) ou time.sleep(0.5) no Pico. Para temporizar sem parar o código, time.ticks_ms e time.ticks_diff substituem o millis.

Em qual pino fica o LED da placa no Raspberry Pi Pico?

No Pico comum, o LED da placa está ligado ao GP25. No Pico W, o LED está ligado ao chip sem fio, então Pin(25) não o acende. Nas versões atuais do MicroPython, Pin("LED", Pin.OUT) encontra o LED da placa nas duas placas.

O Guia de código do BlueGrays é grátis?

Sim, o Guia de código é grátis: você pode ler os 36 cartões, ver os exemplos e resolver os minitestes. As listas Ver nos projetos dos cartões trazem projetos grátis e Premium; o filtro Grátis mostra só os grátis.

Ver todos os projetos
LED piscante
#1Iniciante

LED piscante

O primeiro contato com a eletrônica: acender e apagar um único LED. O Arduino acende e apaga o LED em intervalos curtos, fazendo a luz piscar rapidamente. Você vê da forma mais simples como a placa co

4.6(188)
1127
Controle de LED com botão (momentâneo)
#9Iniciante

Controle de LED com botão (momentâneo)

É como uma campainha: a luz fica acesa enquanto você pressiona o botão e apaga quando você solta. O Arduino monitora o botão continuamente; enquanto ele está pressionado, o LED fica aceso e apaga assi

4.8(113)
229
Luz noturna com LDR
#12Iniciante

Luz noturna com LDR

Uma pequena luz noturna que acende sozinha quando escurece e apaga ao amanhecer. Um sensor de luz mede a luminosidade do quarto, e o Arduino acende o LED quando está escuro o suficiente e apaga quando

4.8(102)
205
Controle de LED com botão no ESP32 (alternância)
#105Iniciante

Controle de LED com botão no ESP32 (alternância)

Cada vez que o botão é pressionado, o estado do LED muda: se estiver aceso, apaga; se estiver apagado, acende. É o padrão clássico de alternância. Com debounce, eliminamos o ruído mecânico dos contatos do botão para garantir uma única mudança a cada pressionamento.

4.6(39)
57
Efeito Knight Rider com LEDs
#6Intermediário

Efeito Knight Rider com LEDs

O clássico efeito Knight Rider: um ponto de luz percorre seis LEDs de uma ponta à outra e depois volta. O Arduino acende cada LED por um décimo de segundo antes de passar para o próximo, muda de direç

4.8(106)
202
Piscar o LED integrado do Raspberry Pi Pico (Pico e Pico W)
#147Iniciante

Piscar o LED integrado do Raspberry Pi Pico (Pico e Pico W)

O primeiro projeto da série Raspberry Pi Pico! Fazemos o LED verde integrado piscar para verificar se a placa funciona — um primeiro experimento no estilo clássico "Hello World". SEM componentes externos, apenas o Pico e um cabo USB. O código foi escrito em MicroPython (a linguagem com suporte oficial da Raspberry Pi Foundation). Aprenda a usar a classe machine.Pin, o modo Pin.OUT, os métodos led.on()/off() e time.sleep() no Thonny IDE.

5.0(1)
10
Raspberry Pi Pico: dois LEDs alternados (padrão flip-flop)
#149Iniciante

Raspberry Pi Pico: dois LEDs alternados (padrão flip-flop)

O próximo passo após um único LED no Pico: dois LEDs piscam alternadamente no clássico padrão flip-flop. Quando um apaga, o outro acende — o exemplo mais básico de coordenação entre vários GPIOs. Neste projeto, dois LEDs de cores diferentes (vermelho no GP14, verde no GP13) trocam de estado a cada 500ms. O método Pin.toggle() do MicroPython deixa o código curto e claro. Essa mesma lógica é a base de semáforos, luzes policiais, LEDs sequenciais e todas as animações com vários LEDs.

5.0(2)
19
Raspberry Pi Pico: semáforo (3 LEDs em sequência)
#150Iniciante

Raspberry Pi Pico: semáforo (3 LEDs em sequência)

Simulamos um semáforo real com LEDs vermelho, amarelo e verde — o primeiro projeto com 3 LEDs da série Pico! Verde por 4 segundos: "siga"; amarelo por 1,5 segundo: "prepare-se"; vermelho por 3 segundos: "pare"; e vermelho+amarelo por 1 segundo: "saída" (padrão de semáforo europeu). Aprenda definição de funções (def all_off()), lógica de máquina de estados (sequência) e sincronização de vários GPIOs.

4.0(1)
12