Da programação em blocos ao Arduino C++: tabela de consulta com MicroPython
Tabela da programação em blocos ao Arduino C++: 34 linhas de blocos com o código em C++ e MicroPython, erros comuns, um método em 4 etapas e um programa em três formas.
O jeito mais rápido de passar da programação em blocos ao Arduino C++ é ter ao lado uma tabela de uma página que mostra em qual linha de código real cada bloco se transforma. A resposta curta: blocos não são uma linguagem nova, são a forma visual de linhas de Arduino C++. O bloco “configurar pino 13 como SAÍDA” é a linha pinMode(13, OUTPUT);, o bloco “aguardar 1000 ms” é delay(1000); e o bloco “se … fazer” é uma estrutura if. A tabela abaixo coloca lado a lado os rótulos reais dos blocos do app BlueGrays, o código correspondente em Arduino C++ e o código em MicroPython no Raspberry Pi Pico.
Esta página não é uma aula, é uma folha de consulta. Você pode imprimir a tabela, deixá-la ao lado da mesa e conferir qual linha corresponde a qual bloco enquanto olha um projeto. Depois da tabela, você vai encontrar os erros mais comuns na transição, um método em quatro etapas para deixar os blocos para trás e o mesmo programa escrito em blocos, C++ e MicroPython. O exemplo compila na Arduino IDE e roda no Pico com o Thonny.

Antes de ler a tabela: quatro diferenças entre os três
Blocos, C++ e MicroPython expressam a mesma ideia, mas as regras de escrita são diferentes. É nestas quatro diferenças que você mais vai tropeçar. A primeira é a estrutura: um programa em Arduino C++ tem duas partes, setup() e loop(), que nos blocos aparecem como “configuração (uma vez)” e “repetir para sempre”. O MicroPython não tem um setup separado; o arquivo roda uma vez de cima para baixo e a parte que se repete vai dentro de um laço while True:. A segunda são os tipos: em C++ toda variável tem um tipo escrito (int, float, bool), nos blocos isso é a opção “declarar inteiro (int)”, e em Python nenhum tipo é escrito.
A terceira diferença são as faixas de números. No Arduino Uno uma leitura analógica vai de 0–1023 e o PWM de 0–255; no ESP32 a leitura analógica chega a 0–4095; no Pico, o MicroPython dá tanto as leituras quanto o ciclo de trabalho do PWM na faixa 0–65535. Por isso você não pode copiar um limite de uma placa para outra do jeito que está. A quarta diferença é a unidade de tempo: delay() recebe milissegundos, time.sleep() recebe segundos. Meio segundo é delay(500) em C++ e time.sleep(0.5) em MicroPython. Com essas quatro regras em mente, a maioria das linhas da tabela se encaixa sozinha.
- Os números da tabela são exemplos: onde um bloco diz 13, o seu projeto pode usar 7, e o número na linha de código muda junto.
- Os pinos da coluna MicroPython são números GP do Pico (GP14, GP15, GP26). Eles não precisam coincidir com os números de pino do Uno; confira o esquema do circuito.
- Linhas marcadas com “Sem bloco no Pico” indicam que aquele bloco não é usado em projetos com Pico; mesmo assim, foi incluído o código MicroPython que faz o mesmo trabalho.
- O ESP32 também é programado em Arduino C++; a coluna C++ vale para ele também, só a faixa analógica e alguns números de pino mudam.
Tabela de referência: blocos, Arduino C++ e MicroPython
A tabela está dividida em 12 grupos: estrutura do programa, pinos, tempo, condições, laços, variáveis, matemática, porta serial, analógico e PWM, som, servo e sensor. O texto da coluna Bloco é o rótulo impresso nos blocos do app, e “…” e “?” marcam o encaixe onde outro bloco se conecta. Quando uma linha tem mais de um bloco, eles são separados por um ponto.
| Grupo | Bloco (rótulo no app) | Arduino C++ | MicroPython (Pico) |
|---|---|---|---|
| Estrutura | configuração (uma vez) | void setup() { … } | As linhas antes de while True: |
| Estrutura | repetir para sempre | void loop() { … } | while True: (corpo indentado com 4 espaços) |
| Estrutura | variáveis globais (no topo) | Topo do arquivo, antes de setup() | As primeiras linhas depois dos imports |
| Estrutura | para blinkTwice | void blinkTwice() { … } · chamada: blinkTwice(); | def blinkTwice(): · chamada: blinkTwice() |
| Pinos | configurar pino 13 como SAÍDA | pinMode(13, OUTPUT); | led = Pin(15, Pin.OUT) |
| Pinos | configurar pino 2 como ENTRADA (PULLUP) | pinMode(2, INPUT_PULLUP); | btn = Pin(14, Pin.IN, Pin.PULL_UP) |
| Pinos | escrever ALTO no pino 13 · escrever BAIXO no pino 13 | digitalWrite(13, HIGH); · digitalWrite(13, LOW); | led.value(1) · led.value(0) (liga · desliga o pino) |
| Pinos | ler pino 2 | digitalRead(2) → HIGH (1) ou LOW (0) | btn.value() → 1 ou 0 |
| Pinos (só Pico) | pino led : GP 14, SAÍDA · ligar (on) / desligar (off) pino led | Equivale a pinMode() + digitalWrite() | led = Pin(14, Pin.OUT) · led.on() / led.off() (saída no GP14; liga / desliga) |
| Tempo | aguardar 1000 ms · aguardar 0.5 segundos (Pico) | delay(1000); · delay(500); | time.sleep_ms(1000) · time.sleep(0.5) (espera 1000 ms · espera 0,5 segundo) |
| Tempo | aguardar 10 µs | delayMicroseconds(10); | time.sleep_us(10) |
| Tempo | milissegundos desde o início | millis() (unsigned long) (milissegundos desde o início) | time.ticks_ms() |
| Condições | se … fazer … senão se … senão … | if (…) { … } else if (…) { … } else { … } | if …: · elif …: · else: |
| Condições | ? = ? (≠, <, ≤, >, ≥) | == != < <= > >= | == != < <= > >= |
| Condições | ? e ? · ? ou ? · não ? | && · || · !x | and · or · not x |
| Laços | repetir 3 vezes fazer | for (int i = 0; i < 3; i++) { … } | for i in range(3): |
| Laços | contar com i de 0 até 5 em passos de 1 | for (i = 0; i <= 5; i++) (5 incluído, 6 voltas) | for i in range(0, 6): (6 não incluído) |
| Laços | repetir enquanto | while (…) { … } | while …: |
| Laços | sair do laço | break; | break |
| Variáveis | declarar inteiro (int) delayTime = 60 | int delayTime = 60; | delayTime = 60 (sem tipo escrito) |
| Variáveis | declarar decimal (float) voltage = 0.0 | float voltage = 0.0; | voltage = 0.0 |
| Variáveis | definir x como 0 · alterar x em 1 | x = 0; · x += 1; (ou x++;) | x = 0 · x += 1 (não existe x++) |
| Variáveis | array 2 3 4 · item 0 de ledPins | int ledPins[] = {2, 3, 4}; · ledPins[0] | ledPins = [2, 3, 4] · ledPins[0] |
| Matemática | 1 + 1 (também −, ×, ÷) | + - * / · com dois ints 7 / 2 = 3 | + - * / · 7 / 2 = 3.5, divisão inteira 7 // 2 = 3 |
| Matemática | resto de 10 ÷ 3 | 10 % 3 | 10 % 3 |
| Matemática | mapear x : 0 – 1023 → 0 – 255 | map(x, 0, 1023, 0, 255) | Não vem pronto; escreva uma função arduino_map() |
| Matemática | restringir 50 mín. 0 máx. 100 | constrain(50, 0, 100) | min(max(50, 0), 100) |
| Porta serial | iniciar serial a 9600 baud | Serial.begin(9600); | Não é necessário, print() sai pela USB |
| Porta serial | imprimir na serial … nova linha · sem quebra de linha | Serial.println(x); · Serial.print(x); | print(x) · print(x, end="") (com quebra de linha · sem quebra de linha) |
| Analógico e PWM | leitura analógica A0 | analogRead(A0) → 0–1023 (0–4095 no ESP32) | ADC(26).read_u16() → 0–65535 |
| Analógico e PWM | escrever PWM 128 no pino 9 · PWM led : GP 14, frequência 1000 Hz (Pico) | analogWrite(9, 128); (0–255) | led = PWM(Pin(14)) · led.freq(1000) · led.duty_u16(32768) (0–65535) (PWM de 1000 Hz no GP14) |
| Som | tocar 440 Hz no pino 8 · parar som no pino 8 | tone(8, 440); · noTone(8); | Sem bloco no Pico: bz = PWM(Pin(16)) · bz.freq(440) · bz.duty_u16(32768) · parar: bz.duty_u16(0) |
| Servo | conectar servo myServo ao pino 9 · girar servo myServo para 90 graus | #include <Servo.h> · Servo myServo; · myServo.attach(9); · myServo.write(90); (servo no pino 9 girado a 90 graus) | Sem bloco no Pico: s = PWM(Pin(16)) · s.freq(50) · s.duty_ns(1500000) (cerca de 90°) |
| Sensor | duração do pulso ALTO no pino 12 (µs) | pulseIn(12, HIGH) | machine.time_pulse_us(Pin(12, Pin.IN), 1) |
Algumas linhas parecem equivalentes à primeira vista, mas pedem atenção. Em “contar com i de 0 até 5” o 5 está incluído e o laço roda 6 vezes; por isso em C++ se usa <= em vez de <, e em Python é preciso range(0, 6), porque o range deixa de fora o número final. O bloco de divisão também é uma armadilha: quando você divide dois inteiros, o C++ descarta a parte fracionária e 7 / 2 dá 3, enquanto o Python dá 3,5. Para ter divisão inteira no estilo do C++ em Python, use //. A função map() por trás do bloco “mapear x” não vem pronta no MicroPython; no exemplo abaixo, uma função arduino_map() de duas linhas faz o mesmo cálculo.
Como blocos encaixados uns nos outros viram código?
Conhecer os blocos um a um não basta; a habilidade de verdade é transformar blocos encaixados em uma só linha. Para isso, diferencie dois formatos. Blocos empilhados um embaixo do outro, com um entalhe na borda, são comandos, e cada um vira uma linha de código. Blocos ovais ou pontudos que se encaixam no espaço de outro bloco são valores; no código, eles ficam dentro de parênteses, à direita de um sinal de igual ou dentro de uma condição. As linhas abaixo vêm do projeto grátis Ajuste de frequência com buzzer: quatro botões ligam e desligam o som e aumentam ou diminuem a frequência, que fica entre 50 e 5000 Hz.
| Bloco (Ajuste de frequência com buzzer) | Linha em C++ | Regra de leitura |
|---|---|---|
| definir state como 1 | state = 1; | Cada bloco de comando empilhado sob outro é uma linha e termina com ponto e vírgula. |
| se (ler pino btnOn = ALTO) fazer … | if (digitalRead(btnOn) == HIGH) { … } | Um bloco de valor oval entra nos parênteses; a comparação = do bloco vira == no código. |
| definir frequency como (frequency + 50) | frequency = frequency + 50; | O bloco interno é calculado primeiro e o resultado é entregue ao bloco externo. |
| definir frequency como (restringir frequency mín. 50 máx. 5000) | frequency = constrain(frequency, 50, 5000); (limita a frequência entre 50 e 5000) | Os espaços vazios de um bloco são os argumentos separados por vírgula no código. |
| tocar frequency Hz no pino buzzerPin | tone(buzzerPin, frequency); | A ordem no código é fixa: primeiro o pino, depois o valor. A ordem das palavras de um bloco pode mudar de um idioma para outro. |
| se (state = 1) fazer … senão … | if (state == 1) { … } else { … } | Os blocos na abertura “fazer” vão para o primeiro { }, os blocos na abertura “senão” vão para else { }. |
Crie um hábito ao ler esta tabela: traduza primeiro o bloco mais interno e depois vá para fora. Em “definir frequency como (restringir frequency mín. 50 máx. 5000)” a parte mais interna é constrain(frequency, 50, 5000), e o bloco externo definir a envolve como frequency = …. Um bloco de valor não pode ser uma linha sozinho; se você deixá-lo com um ponto e vírgula, o compilador pode não reclamar, mas o resultado não fica guardado em lugar nenhum.
Erros comuns ao passar dos blocos para o código
O editor de blocos não deixa você cometer a maioria destes erros; o formato das peças impede que elas se encaixem no lugar errado. O código tira essa proteção, então quase todo mundo encontra os erros abaixo nas primeiras semanas. As mensagens de erro vêm em inglês, mas os padrões são poucos e, depois de vê-los algumas vezes, você vai reconhecê-los.
| Erro | Sintoma | Como corrigir |
|---|---|---|
| Falta o ponto e vírgula no fim da linha | “expected ';' before …” (falta ponto e vírgula); o compilador muitas vezes aponta a linha de baixo | Termine todo comando com ;. Não coloque ; depois das linhas if, for e while. |
| Chave faltando ou sobrando | “expected '}' at end of input” (falta fechar chave) ou código rodando no lugar errado | Todo { precisa de um }. O Ctrl+T (Autoformatação) na Arduino IDE corrige a indentação e deixa uma chave faltando fácil de ver. |
| Escrever = em uma condição | if (state = 1) é sempre verdadeiro e ainda define state como 1; SyntaxError no Python | Compare com ==, atribua com =. A comparação = de um bloco é sempre == no código. |
| Colocar um decimal em um int | int volt = 3.7; guarda 3; 5 / 2 dá 2 | Use float para decimais e escreva um dos números como 5.0 ao dividir. |
| Esperar o valor errado do digitalRead | if (digitalRead(2) == 5) nunca roda; a lógica fica invertida com botão em pull-up | digitalRead só retorna HIGH (1) ou LOW (0). Com INPUT_PULLUP, o botão pressionado lê LOW. |
| Confundir maiúsculas e minúsculas | 'digitalwrite' was not declared in this scope (não declarado neste escopo); NameError no Python | digitalWrite, pinMode e Serial precisam ser escritos exatamente assim. Em Python, True e False começam com letra maiúscula. |
| Traduzir um laço de contagem com uma volta a menos | Um laço que roda 6 vezes nos blocos roda 5 vezes no código; o último LED nunca acende | “de 0 até 5” inclui o final: i <= 5 em C++, range(0, 6) em Python. |
| Desalinhar a indentação do Python | IndentationError ou uma linha que fica fora do laço | Comece toda linha sob while e if com os mesmos 4 espaços; não misture tabulação e espaços. |
| Achar que o tempo em Python é em milissegundos | time.sleep(500) espera mais de 8 minutos | Escreva time.sleep(0.5) ou time.sleep_ms(500). |
| Levar hábitos do C++ para o Python | SyntaxError por causa de x++, && ou um ; no fim da linha | Python usa x += 1, and, or; não há sinal de fim de linha. |
Deixando os blocos para trás: um método em 4 etapas
Tentar mudar de uma vez só cansa. As quatro etapas abaixo vão da leitura à escrita em pequenos passos. Um ou dois projetos por etapa bastam; você está pronto para a próxima quando consegue fazer a atual sem olhar a tabela.
- Leia lado a lado. Abra os blocos e o código de um projeto ao mesmo tempo e ligue, com o dedo, cada bloco à sua linha no código. Mantenha a tabela ao lado nesta etapa. Objetivo: conseguir associar cada linha de código a um bloco.
- Esconda os blocos e adivinhe. Olhe primeiro os blocos, depois desligue a visualização em blocos e escreva no papel o C++ desses blocos sem olhar o código. Em seguida, compare com o código real. Tente também o contrário: leia o código e adivinhe os blocos.
- Mude um valor no código. Leve o código para o computador e mude só um número: aumente a espera de 100 para 500, ou o limite de 400 para 600. Carregue e veja a diferença com seus próprios olhos. Se der erro de compilação, volte à tabela de erros acima.
- Escreva uma linha nova. Acrescente uma linha que não está nos blocos: um Serial.println() que mostra o valor no Monitor Serial, um segundo LED ou um if que funcione com um botão. Agora você não está mais traduzindo blocos, está escrevendo código diretamente.
Cada etapa tem uma aula correspondente na série. Para a primeira etapa, a tabela bloco-linha de piscar um LED com blocos é um bom começo. Para trabalhar com condições e laços nas etapas dois e três, veja o bloco se e laços e variáveis. Se você vai passar para MicroPython no Pico, dos blocos ao MicroPython também mostra como configurar o Thonny. Para distribuir a transição por várias semanas em sala de aula, o plano de robótica e programação de 8 semanas traz uma sequência pronta.
Abrindo blocos e código lado a lado no app BlueGrays
Você vai usar esta tabela principalmente ao alternar entre os blocos e o código de um projeto real. O app BlueGrays tem visualização em blocos para mais de 100 projetos; em mais de 30 projetos grátis os blocos também estão abertos, e nos projetos Premium os blocos são desbloqueados com o Premium. Os blocos servem para leitura: não é possível editar blocos no app e os blocos não são carregados na placa. O que vai para a placa é sempre o código real; você o pega com Copiar, ou com Copiar link para abri-lo no computador, e cola na Arduino IDE, ou no Thonny no caso do Pico.
- Ver em blocos: ative essa chave ao lado do código-fonte na página de um projeto e o mesmo programa aparece como imagem de blocos no idioma do app. Toque na imagem para abri-la em tela cheia; desligar e ligar a chave é exatamente como você pratica as etapas um e dois.
- Entenda os blocos: com a visualização em blocos ativada, a aba “Entenda o código” passa a ter esse nome. O programa é dividido em passos, cada um com a parte que cobre e uma explicação. A tarefa “Tente você mesmo” no final é um exercício pronto para a etapa quatro.
- Guia de código: cada um dos 36 cartões da seção Aprender (18 de Arduino C++, 18 de MicroPython) mostra o exemplo de três formas, com as abas Blocos, Arduino e MicroPython. Se quiser ver uma linha da tabela com mais detalhe, abra o cartão correspondente.
- Projetos com blocos: essa opção em Filtrar, em Descobrir > Projetos, lista só os projetos que têm visualização em blocos, o que facilita escolher um projeto para a transição.
Explicamos como o guia de código funciona no post sobre o guia de código, e as seções “Entenda o código” e “Tente você mesmo” no guia Entenda o código. Para cada comando explicado um a um, a lista de comandos do Arduino funciona bem junto com esta tabela.
Um programa de três formas: luz noturna que diminui com a claridade
Para ver a tabela em ação, vamos montar um programa pequeno. Um LDR mede a luz; enquanto o ambiente está claro o LED fica apagado e, conforme escurece, o LED vai ficando mais forte aos poucos. O programa usa blocos de variável, leitura analógica, condição, mapear, PWM, serial e aguardar, então mais da metade da tabela aparece em um só exemplo. A ideia se baseia no projeto grátis Luz noturna com LDR; lá o LED só acende ou apaga, aqui o PWM regula o brilho. Para a ligação do LDR, você também pode ver o esquema do circuito do projeto Medição da intensidade da luz com LDR.
| Ligação | Arduino Uno | Raspberry Pi Pico |
|---|---|---|
| Terminal 1 do LDR | 5V | 3V3(OUT), pino físico 36 |
| Terminal 2 do LDR + uma ponta do resistor de 10 kΩ (ponto central) | A0 | GP26 / ADC0, pino físico 31 |
| Outra ponta do resistor de 10 kΩ | GND | GND, pino físico 38 |
| Perna longa do LED (por um resistor de 220 Ω) | D9 (pino PWM) | GP15, pino físico 20 |
| Perna curta do LED | GND | GND, pino físico 18 |
| Leitura de luz / faixa do PWM | 0–1023 / 0–255 | 0–65535 / 0–65535 |
Primeiro, a versão em blocos. Com os rótulos do app, o programa é formado pelos blocos abaixo; cada item corresponde a uma ou mais linhas do código C++ a seguir:
- variáveis globais (no topo): declarar inteiro (int) lightValue = 0 e declarar inteiro (int) brightness = 0
- configuração (uma vez): iniciar serial a 9600 baud, depois configurar pino 9 como SAÍDA
- repetir para sempre: definir lightValue como (leitura analógica A0)
- se (lightValue < 400) fazer: definir brightness como (mapear lightValue : 0 – 400 → 255 – 0); senão: definir brightness como 0
- escrever PWM brightness no pino 9
- imprimir na serial “Light: ” sem quebra de linha, imprimir na serial lightValue sem quebra de linha, imprimir na serial “ PWM: ” sem quebra de linha, imprimir na serial brightness nova linha
- aguardar 200 ms
1// ─────────────────────────────────────────
2// BlueGrays · bluegrays.com
3// Işığa göre kısılan gece lambası / Dimming night light
4// ─────────────────────────────────────────
5
6int lightValue = 0; // LDR okuması / LDR reading (0-1023)
7int brightness = 0; // LED parlaklığı / LED brightness (0-255)
8
9void setup() {
10 Serial.begin(9600); // Seri port 9600 baud / Serial at 9600 baud
11 pinMode(9, OUTPUT); // LED, PWM pini D9 / LED on PWM pin D9
12}
13
14void loop() {
15 lightValue = analogRead(A0); // Az ışık = küçük değer / Little light = small value
16
17 if (lightValue < 400) {
18 // Karanlık arttıkça LED parlar / The darker it gets, the brighter the LED
19 brightness = map(lightValue, 0, 400, 255, 0);
20 } else {
21 brightness = 0; // Oda aydınlık, LED kapalı / Room is bright, LED off
22 }
23
24 analogWrite(9, brightness); // PWM 0-255 / PWM 0-255
25
26 Serial.print("Light: ");
27 Serial.print(lightValue);
28 Serial.print(" PWM: ");
29 Serial.println(brightness);
30
31 delay(200); // 0,2 sn bekle / Wait 0.2 s
32}
331# ─────────────────────────────────────────
2# BlueGrays · bluegrays.com
3# Işığa göre kısılan gece lambası / Dimming night light
4# ─────────────────────────────────────────
5from machine import Pin, ADC, PWM
6import time
7
8ldr = ADC(26) # GP26 = ADC0 / GP26 = ADC0
9led = PWM(Pin(15)) # LED, GP15 / LED on GP15
10led.freq(1000) # PWM frekansı 1000 Hz / PWM frequency 1000 Hz
11
12THRESHOLD = 25600 # Uno'daki 400'ün karşılığı / Same as 400 on the Uno
13
14
15def arduino_map(x, in_min, in_max, out_min, out_max):
16 # Arduino map() ile aynı hesap / Same math as Arduino map()
17 return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min
18
19
20while True:
21 light_value = ldr.read_u16() # 0-65535 / 0-65535
22
23 if light_value < THRESHOLD:
24 # Karanlık arttıkça LED parlar / The darker it gets, the brighter the LED
25 brightness = arduino_map(light_value, 0, THRESHOLD, 65535, 0)
26 else:
27 brightness = 0 # Oda aydınlık, LED kapalı / Room is bright, LED off
28
29 led.duty_u16(brightness) # PWM 0-65535 / PWM 0-65535
30
31 print("Light:", light_value, " PWM:", brightness)
32
33 time.sleep(0.2) # 0,2 sn bekle / Wait 0.2 s
34Compare os dois programas linha por linha e todas as diferenças da tabela aparecem. O setup() do C++ vira as linhas antes de while True no Python, e o Serial.begin() some. analogRead(A0) vira ADC(26).read_u16() e a faixa cresce de 0–1023 para 0–65535, por isso o limite é 25600 em vez de 400. Em vez de analogWrite(9, …), primeiro é criado um objeto PWM e o brilho é definido com duty_u16() entre 0 e 65535. Como map() não vem pronto, é escrita uma função arduino_map(); a divisão inteira // dentro dela corresponde à divisão inteira do C++. Um único print() substitui quatro chamadas separadas de Serial.print(), e delay(200) vira time.sleep(0.2).
Passar da programação em blocos ao Arduino C++ tem menos a ver com decorar algo novo e mais com reconhecer a forma escrita de blocos que você já conhece. Mantenha esta tabela ao lado, em cada projeto leia primeiro lado a lado, depois esconda os blocos e escreva você mesmo. Se quiser ver estas linhas em projetos reais, abra um projeto com visualização em blocos no app BlueGrays e alterne entre as duas formas do mesmo programa com Ver em blocos.
Perguntas frequentes
O que devo aprender depois da programação em blocos: C++ ou Python?
Escolha pela placa que você tem. A maioria dos projetos com Arduino Uno e ESP32 é escrita em Arduino C++, enquanto o MicroPython é comum no Raspberry Pi Pico. A lógica dos blocos é a mesma nos dois, então, depois de aprender um, passar para o outro leva bem menos tempo.
Quanto tempo leva para passar da programação em blocos ao código do Arduino?
Varia de pessoa para pessoa, mas quem trabalha em alguns projetos por semana geralmente consegue ler programas curtos e fazer pequenas alterações em poucas semanas. Ler o código ao lado dos blocos primeiro, depois mudar um único valor e, por fim, acrescentar linhas novas facilita a transição.
Posso programar um Arduino Uno com Python?
O Arduino Uno não roda MicroPython; ele é programado em C++ com a Arduino IDE. Para MicroPython, você precisa de uma placa mais potente, como o Raspberry Pi Pico. Mas é possível enviar comandos a um Uno pela porta serial a partir de um programa em Python rodando no computador.
Posso editar blocos no BlueGrays e carregá-los na placa?
Não. Os blocos do BlueGrays servem para ler e entender o código; não é possível editar blocos no app e eles não são carregados na placa. O que você carrega é sempre o código real do projeto, usando a Arduino IDE ou o Thonny.
Um programa em blocos é código de verdade?
Os blocos são a forma visual do código real; cada bloco corresponde a uma ou mais linhas de código. Nos projetos do BlueGrays com visualização em blocos, os blocos e o código em Arduino C++ ou MicroPython que você carrega descrevem o mesmo programa.
Por que o digitalRead retorna 1 ou 0, e HIGH é o mesmo que 1?
Sim, no Arduino HIGH é igual a 1 e LOW é igual a 0, e o digitalRead só retorna um desses dois valores. Um botão ligado com INPUT_PULLUP lê LOW quando pressionado e HIGH quando solto. No MicroPython, pin.value() também dá 1 ou 0.
Projetos para montar depois desta leitura
Ver todos os projetos
Ajuste de frequência com buzzer
Você controla o som de um buzzer com quatro botões: um inicia o som, outro o interrompe e os outros dois o deixam mais agudo ou mais grave. Mantenha pressionado o botão de aumentar ou diminuir, e o to

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

Medição da intensidade da luz com LDR
Quer ver a luminosidade do seu quarto em números? O LDR, um pequeno componente sensível à luz, mede a luz ambiente, e o Arduino exibe o valor na tela do computador a cada meio segundo. Cubra o sensor

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

Ligar e desligar um LED com botão
Pressione o botão uma vez para acender a luz e outra vez para apagar, como o interruptor do seu quarto. O Arduino detecta cada toque e inverte o estado do LED, aguardando um breve instante para que as

Sequencial de LEDs com velocidade ajustável
Seis LEDs acendem um após o outro, fazendo a luz parecer correr de uma ponta à outra. Ao girar o botão do potenciômetro, a velocidade muda na hora: para um lado, a luz corre rapidamente; para o outro,

Medição de distância com HC-SR04 (Monitor Serial)
O sensor HC-SR04 funciona como um morcego que se orienta no escuro: emite um som que você não consegue ouvir, escuta o eco e mede a distância até o objeto à sua frente. O Arduino escreve essa distânci

Raspberry Pi Pico: controle de LED externo (protoboard)
O próximo passo após o LED integrado do Pico: conectar um LED externo à protoboard e controlá-lo pelo pino GP14. Neste projeto, você aprende a usar qualquer pino GPIO de uso geral do Pico como saída, a polaridade do LED (terminal longo = ânodo/+, terminal curto = cátodo/–) e por que um resistor limitador de corrente (220Ω) é necessário. Sem o resistor, uma corrente excessiva passa pelo LED e pode queimá-lo. O circuito é muito simples: Pico GP14 → resistor de 220Ω → LE
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

