Dai blocchi al codice Arduino: tabella C++ e MicroPython
Dai blocchi al codice Arduino: 34 blocchi con il loro codice C++ e MicroPython in una tabella, errori comuni, un metodo in 4 passi e un programma di esempio.
Il modo più rapido per passare dai blocchi al codice Arduino è tenere accanto a te una tabella di una pagina che mostra in quale riga di codice vero si trasforma ogni blocco. La risposta breve: i blocchi non sono un nuovo linguaggio, sono la forma visiva delle righe di Arduino C++. Il blocco «imposta pin 13 come USCITA» è la riga pinMode(13, OUTPUT);, il blocco «attendi 1000 ms» è delay(1000); e il blocco «se … fai» è un’istruzione if. La tabella qui sotto mette le etichette reali dei blocchi dell’app BlueGrays accanto al loro codice Arduino C++ e al codice MicroPython sul Raspberry Pi Pico.
Questa pagina non è una lezione, è una scheda di consultazione. Puoi stampare la tabella, tenerla vicino al banco e controllare quale riga corrisponde a quale blocco mentre guardi un progetto. Dopo la tabella trovi gli errori più comuni nel passaggio, un metodo in quattro passi per lasciarti alle spalle i blocchi e lo stesso programma scritto a blocchi, in C++ e in MicroPython. L’esempio si compila nell’Arduino IDE e gira sul Pico con Thonny.

Prima di leggere la tabella: quattro differenze tra i tre
Blocchi, C++ e MicroPython esprimono la stessa idea, ma le regole di scrittura cambiano. Queste quattro differenze sono quelle su cui inciamperai di più. La prima è la struttura: un programma Arduino C++ ha due parti chiamate setup() e loop(), che nei blocchi compaiono come «setup (una volta)» e «ripeti per sempre». MicroPython non ha un setup separato; il file viene eseguito una volta dall’alto in basso e la parte che si ripete va dentro un ciclo while True:. La seconda sono i tipi: in C++ ogni variabile ha un tipo scritto (int, float, bool), nei blocchi è l’opzione «dichiara intero (int)», in Python il tipo non si scrive affatto.
La terza differenza sono gli intervalli numerici. Sull’Arduino Uno una lettura analogica va da 0 a 1023 e il PWM da 0 a 255; sull’ESP32 la lettura analogica arriva a 0–4095; sul Pico, MicroPython dà sia le letture sia il duty PWM nell’intervallo 0–65535. Per questo non puoi copiare una soglia da una scheda all’altra così com’è. La quarta differenza è l’unità di tempo: delay() vuole millisecondi, time.sleep() vuole secondi. Mezzo secondo è delay(500) in C++ e time.sleep(0.5) in MicroPython. Se tieni a mente queste quattro regole, la maggior parte delle righe della tabella va a posto da sola.
- I numeri nella tabella sono esempi: dove il blocco dice 13, il tuo progetto può usare 7, e il numero nella riga di codice cambia di conseguenza.
- I pin nella colonna MicroPython sono numeri GP del Pico (GP14, GP15, GP26). Non devono coincidere con i pin dell’Uno; guarda lo schema.
- Le righe con «Nessun blocco Pico» indicano che quel blocco non si usa nei progetti Pico; il codice MicroPython che fa lo stesso lavoro è comunque riportato.
- Anche l’ESP32 si programma in Arduino C++; la colonna C++ vale anche per lui, cambiano solo l’intervallo analogico e alcuni numeri di pin.
Tabella di corrispondenza: blocchi, Arduino C++ e MicroPython
La tabella è divisa in 12 gruppi: struttura del programma, pin, tempo, condizione, ciclo, variabili, matematica, porta seriale, analogico e PWM, suono, servo e sensore. Il testo nella colonna Blocco è l’etichetta scritta sui blocchi nell’app; «…» e «?» indicano lo spazio in cui si innesta un altro blocco. Quando una riga contiene più blocchi, sono separati da un punto.
| Gruppo | Blocco (etichetta nell’app) | Arduino C++ | MicroPython (Pico) |
|---|---|---|---|
| Struttura | setup (una volta) | void setup() { … } | Le righe prima di while True: |
| Struttura | ripeti per sempre | void loop() { … } | while True: (contenuto rientrato di 4 spazi) |
| Struttura | variabili globali (all’inizio) | Inizio del file, prima di setup() | Le prime righe dopo gli import |
| Struttura | per blinkTwice | void blinkTwice() { … } · chiamata: blinkTwice(); | def blinkTwice(): · chiamata: blinkTwice() |
| Pin | imposta pin 13 come USCITA | pinMode(13, OUTPUT); | led = Pin(15, Pin.OUT) |
| Pin | imposta pin 2 come INGRESSO (PULLUP) | pinMode(2, INPUT_PULLUP); | btn = Pin(14, Pin.IN, Pin.PULL_UP) |
| Pin | scrivi ALTO sul pin 13 · scrivi BASSO sul pin 13 | digitalWrite(13, HIGH); · digitalWrite(13, LOW); | led.value(1) · led.value(0) |
| Pin | leggi pin 2 | digitalRead(2) → HIGH (1) o LOW (0) | btn.value() → 1 o 0 |
| Pin (solo Pico) | pin led : GP 14, USCITA · accendi (on) / spegni (off) il pin led | Equivale a pinMode() + digitalWrite() | led = Pin(14, Pin.OUT) · led.on() / led.off() |
| Tempo | attendi 1000 ms · attendi 0.5 secondi (Pico) | delay(1000); · delay(500); | time.sleep_ms(1000) · time.sleep(0.5) |
| Tempo | attendi 10 µs | delayMicroseconds(10); | time.sleep_us(10) |
| Tempo | ms dall’avvio | millis() (unsigned long) | time.ticks_ms() |
| Condizione | se … fai … altrimenti se … altrimenti … | if (…) { … } else if (…) { … } else { … } | if …: · elif …: · else: |
| Condizione | ? = ? (≠, <, ≤, >, ≥) | == != < <= > >= | == != < <= > >= |
| Condizione | ? e ? · ? o ? · non ? | && · || · !x | and · or · not x |
| Ciclo | ripeti 3 volte fai | for (int i = 0; i < 3; i++) { … } | for i in range(3): |
| Ciclo | conta con i da 0 a 5 per 1 | for (i = 0; i <= 5; i++) (5 incluso, 6 giri) | for i in range(0, 6): (6 escluso) |
| Ciclo | ripeti mentre | while (…) { … } | while …: |
| Ciclo | esce dal ciclo | break; | break |
| Variabili | dichiara intero (int) delayTime = 60 | int delayTime = 60; | delayTime = 60 (senza tipo) |
| Variabili | dichiara decimale (float) voltage = 0.0 | float voltage = 0.0; | voltage = 0.0 |
| Variabili | imposta x a 0 · cambia x di 1 | x = 0; · x += 1; (oppure x++;) | x = 0 · x += 1 (x++ non esiste) |
| Variabili | array 2 3 4 · elemento 0 di ledPins | int ledPins[] = {2, 3, 4}; · ledPins[0] | ledPins = [2, 3, 4] · ledPins[0] |
| Matematica | 1 + 1 (anche −, ×, ÷) | + - * / · con due int 7 / 2 = 3 | + - * / · 7 / 2 = 3.5, divisione intera 7 // 2 = 3 |
| Matematica | resto di 10 ÷ 3 | 10 % 3 | 10 % 3 |
| Matematica | mappa x : 0 – 1023 → 0 – 255 | map(x, 0, 1023, 0, 255) | Non integrata; si scrive una funzione arduino_map() |
| Matematica | costringi 50 da 0 a 100 | constrain(50, 0, 100) | min(max(50, 0), 100) |
| Porta seriale | avvia seriale a 9600 baud | Serial.begin(9600); | Non serve, print() passa via USB |
| Porta seriale | stampa su seriale … a capo · stessa riga | Serial.println(x); · Serial.print(x); | print(x) · print(x, end="") |
| Analogico e PWM | lettura analogica A0 | analogRead(A0) → 0–1023 (0–4095 sull’ESP32) | ADC(26).read_u16() → 0–65535 |
| Analogico e PWM | scrivi PWM 128 sul pin 9 · PWM led : GP 14, frequenza 1000 Hz (Pico) | analogWrite(9, 128); (0–255) | led = PWM(Pin(14)) · led.freq(1000) · led.duty_u16(32768) (0–65535) |
| Suono | suona 440 Hz sul pin 8 · ferma il suono sul pin 8 | tone(8, 440); · noTone(8); | Nessun blocco Pico: bz = PWM(Pin(16)) · bz.freq(440) · bz.duty_u16(32768) · stop: bz.duty_u16(0) |
| Servo | collega il servo myServo al pin 9 · ruota il servo myServo a 90 gradi | #include <Servo.h> · Servo myServo; · myServo.attach(9); · myServo.write(90); | Nessun blocco Pico: s = PWM(Pin(16)) · s.freq(50) · s.duty_ns(1500000) (circa 90°) |
| Sensore | durata impulso ALTO sul pin 12 (µs) | pulseIn(12, HIGH) | machine.time_pulse_us(Pin(12, Pin.IN), 1) |
Alcune righe sembrano corrispondenze dirette ma richiedono attenzione. In «conta con i da 0 a 5» il 5 è incluso e il ciclo fa 6 giri; per questo in C++ si scrive <= invece di <, e Python ha bisogno di range(0, 6), perché range esclude il numero finale. Anche il blocco della divisione è una trappola: dividendo due interi il C++ scarta i decimali e 7 / 2 dà 3, mentre Python dà 3.5. Per una divisione intera come in C++, in Python si usa //. La funzione map() dietro il blocco «mappa x» non è integrata in MicroPython; nell’esempio qui sotto una funzione arduino_map() di due righe fa lo stesso calcolo.
Come diventano codice i blocchi annidati?
Conoscere i singoli blocchi non basta; la vera abilità è trasformare blocchi annidati in una sola riga. Per farlo distingui due forme. I blocchi impilati uno sotto l’altro, con una tacca sul bordo, sono istruzioni e ognuno diventa una riga di codice. I blocchi ovali o appuntiti che si innestano nello spazio di un altro blocco sono valori; nel codice stanno tra parentesi, a destra di un segno uguale o dentro una condizione. Le righe qui sotto vengono dal progetto gratuito Impostazione della frequenza con cicalino: quattro pulsanti accendono e spengono il suono e ne alzano o abbassano la frequenza, che resta tra 50 e 5000 Hz.
| Blocco (Impostazione della frequenza con cicalino) | Riga C++ | Regola di lettura |
|---|---|---|
| imposta state a 1 | state = 1; | Ogni blocco di istruzione impilato sotto un altro è una riga e finisce con un punto e virgola. |
| se (leggi pin btnOn = ALTO) fai … | if (digitalRead(btnOn) == HIGH) { … } | Un blocco valore ovale va tra le parentesi; il confronto = del blocco diventa == nel codice. |
| imposta frequency a (frequency + 50) | frequency = frequency + 50; | Il blocco interno si calcola per primo e il risultato passa al blocco esterno. |
| imposta frequency a (costringi frequency da 50 a 5000) | frequency = constrain(frequency, 50, 5000); | Gli spazi liberi di un blocco sono, nel codice, gli argomenti separati da virgole. |
| suona frequency Hz sul pin buzzerPin | tone(buzzerPin, frequency); | Nel codice l’ordine è fisso: prima il pin, poi il valore. L’ordine delle parole del blocco cambia con la lingua. |
| se (state = 1) fai … altrimenti … | if (state == 1) { … } else { … } | I blocchi nella bocca «fai» vanno nella prima { }, quelli nella bocca «altrimenti» in else { }. |
Prendi un’abitudine mentre leggi questa tabella: traduci prima il blocco più interno, poi procedi verso l’esterno. In «imposta frequency a (costringi frequency da 50 a 5000)» la parte più interna è constrain(frequency, 50, 5000), e il blocco imposta esterno la trasforma in frequency = …. Un blocco valore non può essere una riga da solo; se lo lasci con un punto e virgola, il compilatore forse non si lamenta, ma il risultato non viene salvato da nessuna parte.
Errori comuni nel passaggio dai blocchi al codice
L’editor a blocchi non ti lascia fare la maggior parte di questi errori; la forma dei pezzi impedisce che si incastrino nel posto sbagliato. Nel codice questa protezione sparisce, quindi quasi tutti incontrano gli errori qui sotto nelle prime settimane. I messaggi di errore arrivano in inglese, ma gli schemi sono pochi e, dopo averli visti un paio di volte, li riconoscerai.
| Errore | Sintomo | Soluzione |
|---|---|---|
| Manca il punto e virgola a fine riga | «expected ';' before …»; il compilatore spesso indica la riga sotto | Chiudi ogni istruzione con ;. Non mettere ; dopo le righe if, for e while. |
| Graffa mancante o di troppo | «expected '}' at end of input» o codice che gira nel punto sbagliato | Ogni { vuole la sua }. Ctrl+T (formattazione automatica) nell’Arduino IDE sistema i rientri e una graffa mancante salta all’occhio. |
| Scrivere = in una condizione | if (state = 1) è sempre vera e in più porta state a 1; SyntaxError in Python | Confronta con ==, assegna con =. Il confronto = di un blocco nel codice è sempre ==. |
| Mettere un decimale in un int | int volt = 3.7; salva 3; 5 / 2 dà 2 | Usa float per i decimali e in una divisione scrivi un numero come 5.0. |
| Aspettarsi un valore sbagliato da digitalRead | if (digitalRead(2) == 5) non scatta mai; con un pulsante in pull-up la logica è invertita | digitalRead restituisce solo HIGH (1) o LOW (0). Con INPUT_PULLUP un pulsante premuto legge LOW. |
| Confondere maiuscole e minuscole | 'digitalwrite' was not declared in this scope; NameError in Python | digitalWrite, pinMode e Serial si scrivono esattamente così. In Python True e False iniziano con la maiuscola. |
| Tradurre un ciclo di conteggio con un giro in meno | Un ciclo che fa 6 giri nei blocchi ne fa 5 nel codice; l’ultimo LED non si accende mai | «da 0 a 5» include la fine: i <= 5 in C++, range(0, 6) in Python. |
| Sfalsare i rientri in Python | IndentationError o una riga che resta fuori dal ciclo | Inizia ogni riga sotto while e if con gli stessi 4 spazi; non mescolare tabulazioni e spazi. |
| Scambiare il tempo di Python per millisecondi | time.sleep(500) aspetta più di 8 minuti | Scrivi time.sleep(0.5) oppure time.sleep_ms(500). |
| Portare abitudini del C++ in Python | SyntaxError per x++, && o un ; a fine riga | Python usa x += 1, and, or; non c’è un segno di fine riga. |
Lasciarsi alle spalle i blocchi: metodo in 4 passi
Cercare di cambiare tutto in una volta è faticoso. I quattro passi qui sotto vanno dalla lettura alla scrittura a piccoli passi. Uno o due progetti per passo bastano; sei pronto per il successivo quando riesci a fare quello attuale senza guardare la tabella.
- Leggi fianco a fianco. Apri insieme i blocchi e il codice di un progetto e abbina con il dito ogni blocco alla sua riga di codice. In questo passo tieni sempre la tabella accanto. Obiettivo: saper collegare ogni riga di codice a un blocco.
- Nascondi i blocchi e indovina. Guarda prima i blocchi, poi disattiva la vista a blocchi e scrivi su carta il C++ di quei blocchi senza guardare il codice. Poi confronta con il codice vero. Prova anche al contrario: leggi il codice e indovina i blocchi.
- Cambia un valore nel codice. Porta il codice sul computer e cambia un solo numero: porta l’attesa da 100 a 500 o la soglia da 400 a 600. Caricalo e guarda la differenza con i tuoi occhi. Se compare un errore di compilazione, torna alla tabella degli errori qui sopra.
- Scrivi una riga nuova. Aggiungi una riga che nei blocchi non c’è: un Serial.println() che mostra il valore nel monitor seriale, un secondo LED o un if che funziona con un pulsante. Ora non traduci più blocchi, scrivi codice direttamente.
Ogni passo ha la sua lezione nella serie. Per il primo, la tabella blocco-riga dell’articolo accendere un LED a blocchi è un buon inizio. Per condizioni e cicli nei passi due e tre, leggi il blocco se e cicli e variabili. Se passi a MicroPython con il Pico, dai blocchi a MicroPython spiega anche come installare Thonny. Se vuoi distribuire il passaggio su più settimane di lezione, il piano di robotica di 8 settimane offre un ordine già pronto.
Aprire blocchi e codice fianco a fianco nell’app BlueGrays
Userai questa tabella soprattutto passando avanti e indietro tra i blocchi e il codice di un progetto vero. L’app BlueGrays ha la vista a blocchi in oltre 100 progetti; in più di 30 progetti gratuiti anche i blocchi sono aperti, mentre nei progetti Premium i blocchi si sbloccano con Premium. I blocchi servono per leggere: nell’app i blocchi non si modificano e non vengono caricati sulla scheda. Sulla scheda va sempre il codice vero; lo prendi con Copia, oppure con Copia link per aprirlo sul computer, e lo incolli nell’Arduino IDE o, per il Pico, in Thonny.
- Mostra a blocchi: attiva questo interruttore accanto al codice sorgente nella pagina di un progetto e lo stesso programma compare come immagine a blocchi nella lingua dell’app. Tocca l’immagine per aprirla a schermo intero; attivarlo e disattivarlo è proprio l’esercizio dei passi uno e due.
- Capire i blocchi: con la vista a blocchi attiva, la scheda «Capire il codice» prende questo nome. Il programma è diviso in passi, ognuno con la sua parte e una spiegazione. Il compito «Prova tu» alla fine è un esercizio già pronto per il passo quattro.
- Guida al codice: ognuna delle 36 schede della sezione Impara (18 Arduino C++, 18 MicroPython) mostra il suo esempio in tre forme con le schede Blocchi, Arduino e MicroPython. Se vuoi vedere una riga della tabella più nel dettaglio, apri la scheda corrispondente.
- Progetti a blocchi: questa opzione in Filtra di Scopri > Progetti, elenca solo i progetti con la vista a blocchi e ti aiuta a scegliere un progetto per il passaggio.
Abbiamo spiegato come funziona la guida al codice nell’articolo sulla guida al codice, e le sezioni «Capire il codice» e «Prova tu» nella guida a Capire il codice. Per i singoli comandi spiegati uno a uno, l’elenco dei comandi Arduino si abbina bene a questa tabella.
Un programma in tre forme: luce notturna che si regola con la luce
Per vedere la tabella all’opera costruiamo un piccolo programma. Un LDR misura la luce; finché la stanza è illuminata il LED resta spento, e man mano che si fa buio il LED si accende piano piano. Il programma usa blocchi di variabile, lettura analogica, condizione, mappatura, PWM, porta seriale e attesa: più di metà della tabella compare in un solo esempio. L’idea si basa sul progetto gratuito Luce notturna con LDR; lì il LED è solo acceso o spento, qui il PWM lo regola. Per il collegamento dell’LDR puoi guardare anche lo schema del progetto Misurare l'intensità luminosa con LDR.
| Collegamento | Arduino Uno | Raspberry Pi Pico |
|---|---|---|
| Piedino 1 dell’LDR | 5V | 3V3(OUT), pin fisico 36 |
| Piedino 2 dell’LDR + un capo della resistenza da 10 kΩ (punto centrale) | A0 | GP26 / ADC0, pin fisico 31 |
| Altro capo della resistenza da 10 kΩ | GND | GND, pin fisico 38 |
| Piedino lungo del LED (tramite una resistenza da 220 Ω) | D9 (pin PWM) | GP15, pin fisico 20 |
| Piedino corto del LED | GND | GND, pin fisico 18 |
| Lettura della luce / intervallo PWM | 0–1023 / 0–255 | 0–65535 / 0–65535 |
Prima la versione a blocchi. Con le etichette dell’app, il programma è formato da questi blocchi; ogni voce corrisponde a una o più righe del codice C++ che segue:
- variabili globali (all’inizio): dichiara intero (int) lightValue = 0 e dichiara intero (int) brightness = 0
- setup (una volta): avvia seriale a 9600 baud, poi imposta pin 9 come USCITA
- ripeti per sempre: imposta lightValue a (lettura analogica A0)
- se (lightValue < 400) fai: imposta brightness a (mappa lightValue : 0 – 400 → 255 – 0); altrimenti: imposta brightness a 0
- scrivi PWM brightness sul pin 9
- stampa su seriale «Light: » stessa riga, stampa su seriale lightValue stessa riga, stampa su seriale « PWM: » stessa riga, stampa su seriale brightness a capo
- attendi 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
34Confrontando i due programmi riga per riga emergono tutte le differenze della tabella. Il setup() del C++ diventa in Python le righe prima di while True, e Serial.begin() sparisce. analogRead(A0) diventa ADC(26).read_u16() e l’intervallo passa da 0–1023 a 0–65535, per questo la soglia è 25600 invece di 400. Al posto di analogWrite(9, …) si crea prima un oggetto PWM e la luminosità si imposta con duty_u16() tra 0 e 65535. Poiché map() non è integrata, si scrive una funzione arduino_map(); la divisione intera // al suo interno corrisponde alla divisione intera del C++. Un solo print() sostituisce quattro Serial.print(), e delay(200) diventa time.sleep(0.2).
Passare dai blocchi al codice Arduino C++ significa meno imparare a memoria qualcosa di nuovo e più riconoscere la forma scritta di blocchi che già conosci. Tieni questa tabella accanto, in ogni progetto leggi prima fianco a fianco, poi nascondi i blocchi e scrivi da solo. Se vuoi vedere queste righe in progetti veri, apri nell’app BlueGrays un progetto con la vista a blocchi e passa tra le due forme dello stesso programma con Mostra a blocchi.
Domande frequenti
Cosa imparare dopo la programmazione a blocchi: C++ o Python?
Scegli in base alla scheda che hai. La maggior parte dei progetti con Arduino Uno ed ESP32 è scritta in Arduino C++, mentre sul Raspberry Pi Pico è diffuso MicroPython. La logica dei blocchi è la stessa in entrambi, quindi quando ne conosci uno passare all’altro richiede molto meno tempo.
Quanto tempo serve per passare dai blocchi al codice Arduino?
Dipende dalla persona, ma chi lavora con regolarità su qualche progetto a settimana di solito riesce a leggere programmi brevi e a fare piccole modifiche in poche settimane. Leggere prima il codice accanto ai blocchi, poi cambiare un solo valore e infine aggiungere righe nuove rende il passaggio più semplice.
Posso programmare un Arduino Uno con Python?
L’Arduino Uno non può eseguire MicroPython; si programma in C++ con l’Arduino IDE. Per MicroPython serve una scheda più potente come il Raspberry Pi Pico. Puoi però inviare comandi a un Uno tramite la porta seriale da un programma Python che gira sul computer.
Posso modificare i blocchi in BlueGrays e caricarli sulla scheda?
No. I blocchi di BlueGrays servono a leggere e capire il codice; nell’app i blocchi non si modificano e non vengono caricati sulla scheda. Quello che carichi è sempre il codice vero del progetto, con l’Arduino IDE o con Thonny.
Un programma a blocchi è codice vero?
I blocchi sono la forma visiva del codice vero; ogni blocco corrisponde a una o più righe di codice. Nei progetti BlueGrays con la vista a blocchi, i blocchi e il codice Arduino C++ o MicroPython che carichi descrivono lo stesso programma.
Perché digitalRead restituisce 1 o 0, e HIGH è uguale a 1?
Sì, su Arduino HIGH vale 1 e LOW vale 0, e digitalRead restituisce solo uno di questi due valori. Un pulsante collegato con INPUT_PULLUP legge LOW quando è premuto e HIGH quando è rilasciato. In MicroPython anche pin.value() restituisce 1 o 0.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Impostazione della frequenza con cicalino
Comandi il suono di un buzzer con quattro pulsanti: uno avvia il suono, uno lo zittisce e gli altri due lo rendono più acuto o più grave. Tieni premuto il pulsante su o giù e il tono cambia passo dopo

Luce notturna con LDR
Una piccola luce notturna che si accende da sola quando fa buio e si spegne quando arriva il mattino. Un sensore di luce misura quanto è illuminata la stanza, e l'Arduino accende il LED quando è abbas

Misurare l'intensità luminosa con LDR
Vuoi vedere quanto è luminosa la tua stanza sotto forma di numero? L'LDR, un piccolo componente sensibile alla luce, misura la luce ambiente e l'Arduino scrive il valore sullo schermo del computer ogn

Accendere un LED con un pulsante (Push)
Come un campanello: la luce resta accesa finché premi e si spegne quando lasci. L'Arduino ascolta il pulsante di continuo; mentre è premuto accende il LED, e appena togli il dito lo spegne. Con questo

Accendere e spegnere un LED con un pulsante
Premi il pulsante una volta e la luce si accende, premilo di nuovo e si spegne, proprio come l'interruttore della tua stanza. L'Arduino si accorge di ogni pressione e porta il LED nello stato opposto,

LED in sequenza a velocità regolabile
Sei LED si accendono uno dopo l'altro e la luce sembra correre da un'estremità all'altra. Girando la manopola del potenziometro la velocità di questa corsa cambia all'istante: da un lato la luce vola,

HC-SR04 Misura della distanza (display seriale)
Il sensore HC-SR04 funziona come un pipistrello che trova la strada al buio: manda un suono che non puoi sentire, ne ascolta l'eco e misura quanto è lontano l'oggetto davanti a sé. L'Arduino scrive qu

Accensione di un LED esterno con Raspberry Pi Pico (breadboard)
Il passo successivo dopo il LED integrato di Pico: collegare un LED esterno alla breadboard e controllarlo tramite il pin GP14. Con questo progetto imparerai come utilizzare qualsiasi pin GPIO generico del Pico come uscita, la polarità del LED (stelo lungo = anodo/+, stelo corto = catodo/–) e perché è indispensabile un resistore di limitazione della corrente (220 Ω). Se non inserisci il resistore, l’LED riceverà una corrente eccessiva e potrebbe bruciarsi. Il circuito è molto semplice: Pico GP14
Altri articoli
App BlueGrays
Costruisci questo circuito passo passo sul telefono
Schema, codice ed elenco componenti in un’unica schermata. Oltre 200 progetti Arduino, ESP32 e Pico da realizzare.
Inquadra con il telefono
Punta la fotocamera sul codice: si apre lo store del tuo telefono.
oppure apri lo store

