Basi · 12 min di lettura

Comandi Arduino: elenco in 36 schede tra C++ e MicroPython

Comandi Arduino in elenco nell'ordine giusto: 18 schede da pinMode a tone, equivalenti MicroPython, codice a confronto, piano di 4 settimane e 8 errori comuni.

Il modo più affidabile per imparare i comandi Arduino non è memorizzare un lungo elenco, ma affrontarli in ordine, ciascuno con un piccolo esempio e un progetto reale. Per questo l'app BlueGrays ha, nella sezione Lezioni della scheda Impara, la Guida al codice: 18 schede nel percorso Arduino C++, da pinMode a tone, e 18 schede nel percorso MicroPython, da import a I2C, 36 schede in tutto. Ogni scheda segue lo stesso schema: A cosa serve?, Perché?, Sintassi, Esempio (con le linguette Blocchi, Arduino e MicroPython), Errore comune, Suggerimento, Vedilo nei progetti e un Mini test di due domande. Anche l'ordine è fisso: prima i pin (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), poi il tempo (delay, millis), quindi variabili, condizioni, cicli e funzioni, e infine Serial, map, random e tone. Se usi un Raspberry Pi Pico, impari gli stessi concetti nel percorso MicroPython con Pin, Pin.value, time.sleep, ADC.read_u16 e PWM.

Questo articolo è una mappa della guida. Prima vedrai cosa c'è dentro una scheda, poi le 18 schede di ogni percorso nel loro ordine reale nell'app, con l'equivalente nell'altro linguaggio. Seguono tre brevi esempi che affiancano la versione C++ e quella MicroPython dello stesso programma, come funzionano il mini test e il registro dei progressi, un ordine di studio di 4 settimane, una routine quotidiana di 20 minuti e gli 8 errori più comuni con questi comandi. Se cerchi una spiegazione dettagliata di ogni comando, l'articolo comandi Arduino con sintassi ed esempi dedica una sezione a ciascuno; questo spiega in che ordine impararli e come esercitarti.

Scheda Arduino Uno: pin digitali, pin PWM segnati con ~ e ingressi analogici A0–A5
Le prime cinque schede del percorso Arduino C++ trattano i tre gruppi di pin di questa scheda: pin digitali, pin PWM segnati con ~ e ingressi analogici A0–A5.

Dov'è la Guida al codice e come funziona?

Entri nella guida dalla scheda Impara in basso: nella sezione Lezioni, in alto, tocca il riquadro Guida al codice. Aperta la guida, in alto vedi due linguette: Arduino C++ e MicroPython; l'app ricorda l'ultimo percorso aperto. Subito sotto ci sono il contatore Cosa hai imparato e la riga Prossima scheda, così non devi mai cercare dove eri rimasto. Le schede sono raggruppate per argomento: Pin, Tempo, Variabili, Condizioni, Cicli, Funzioni, Porta seriale, Matematica e Suono; il percorso MicroPython aggiunge Struttura di base e Gestione degli errori. La Guida al codice è gratuita: non serve Premium per leggere le schede, vedere gli esempi o risolvere i mini test. Le schede sono disponibili in 10 lingue, quindi leggi le spiegazioni nella lingua in cui usi l'app.

Cosa c'è dentro una scheda?

Tutte le schede hanno la stessa struttura, quindi dalla terza in poi sai già dove guardare. La tabella mostra le sezioni sulla 7ª scheda del percorso Arduino, millis; la colonna di destra riassume quello che dice la scheda. L'ordine delle sezioni è già un ordine di studio: prima scopri in una frase cosa fa il comando, poi capisci a cosa ti serve con un paragone quotidiano, vedi come si scrive, leggi un esempio funzionante, conosci la trappola più comune e ti metti alla prova con due domande.

SezioneCosa spiegaNella scheda millis
A cosa serve?Il compito del comando in una fraseTi dice quanti millisecondi sono passati dall'avvio della scheda.
Perché?Perché ti serve, con un paragone quotidianoCome una torta in forno: ogni tanto guardi l'orologio e intanto fai altro.
SintassiCome si scrive il comandounsigned long now = millis();
EsempioUn breve programma funzionante; linguette Blocchi, Arduino e MicroPythonCodice che inverte un LED ogni 500 ms; sul Pico la stessa cosa con time.ticks_ms
Errore comuneLa trappola in cui cadono più spesso i principiantiTenere millis in un int: il numero diventa sbagliato dopo circa 33 secondi.
SuggerimentoUna piccola regola che semplifica il lavoroScrivi sempre il controllo nella forma adesso - precedente >= intervallo.
Vedilo nei progettiI progetti che usano il comando, dal più facile al più difficileOltre 50 progetti; l'elenco parte da un progetto ESP32 gratuito con pulsante
Mini testDue domande, una breve spiegazione dopo ogni rispostaChe cosa restituisce millis()? In quale tipo devi salvare millis?

La sezione Esempio si apre sul percorso della scheda stessa: in una scheda Arduino viene prima la linguetta Arduino, in una scheda MicroPython la linguetta MicroPython. Ma l'altra linguetta è sempre lì, e questo trasforma la guida in un dizionario. Nella scheda Pin in uscita: Pin(15, Pin.OUT) del percorso MicroPython, per esempio, la linguetta Arduino contiene un codice che fa la stessa cosa con pinMode e digitalWrite, e i commenti dicono quale riga corrisponde a cosa (come la riga che sostituisce led.toggle()). Quasi tutte le schede hanno anche una terza linguetta, Blocchi, che mostra il programma d'esempio a blocchi. Se passi da Arduino al Pico, il metodo più rapido è questo: apri una scheda che conosci, cambia linguetta e abbina i due programmi riga per riga.

Percorso Arduino C++: 18 schede e i loro equivalenti MicroPython

La tabella riporta l'ordine reale del percorso Arduino nell'app; l'ultima colonna mostra come si fa la stessa cosa in MicroPython su un Raspberry Pi Pico. I numeri dei pin sono quelli degli esempi delle schede: per un LED, 13 o 9 sull'Uno e GP15 sul Pico; per un pulsante, 2 sull'Uno e GP14 sul Pico; per la lettura analogica, A0 sull'Uno e GP26 sul Pico. Le prime cinque schede trattano i pin, la 6 e la 7 il tempo, dalla 8 alla 14 le basi della programmazione, le ultime quattro la porta seriale, il cambio di scala, i numeri casuali e il suono. L'ordine è voluto: prima impari come la scheda tocca il mondo esterno, poi governi questi contatti con variabili, condizioni e cicli.

N.SchedaA cosa serve?Equivalente MicroPython
1pinModeDice se un pin è un'uscita (LED, buzzer) o un ingresso (pulsante, sensore)Pin(15, Pin.OUT) · Pin(14, Pin.IN, Pin.PULL_UP)
2digitalWriteAccende (HIGH, 5 V) o spegne (LOW, 0 V) un pin di uscitaled.value(1) · led.on() · led.off()
3digitalReadLegge se un pin di ingresso è HIGH o LOWbutton.value() → 1 o 0
4analogReadConverte la tensione su A0–A5 in un numero da 0 a 1023ADC(26).read_u16() → 0–65535
5analogWrite (PWM)Abbassa la luminosità di un LED o rallenta un motore con un valore da 0 a 255 su un pin ~PWM(Pin(15)) · freq(1000) · duty_u16(0–65535)
6delayFerma il codice per i millisecondi indicatitime.sleep(0.5) · time.sleep_ms(500)
7millisMillisecondi dall'avvio; temporizzare senza fermare il codicetime.ticks_ms() · time.ticks_diff()
8Variabili e tipiMemorizza valori con tipi come int, float, bool, unsigned longIl tipo non si scrive: count = 0, volts = 3.3
9if / else if / elseEsegue un codice o un altro in base a una condizioneif / elif / else
10Operatori di confronto e logiciCostruisce condizioni con ==, !=, <, >, &&, ||, !==, !=, <, > · and, or, not
11Ciclo forRipete un compito un numero fisso di voltefor i in range(10):
12Ciclo whileRipete finché una condizione è verawhile condizione:
13Funzioni (void, parametri, return)Divide il codice in pezzi con un nome e riutilizzabilidef blink(times): … return
14ArrayTiene in ordine valori dello stesso tipo sotto un solo nomeLista: pins = [2, 3, 4] · len(pins)
15Serial.begin / print / printlnInvia testo e valori al computer (monitor seriale)print(x) · f-string; Serial.begin non serve
16mapConverte un intervallo di numeri in un altroNessun comando pronto: raw * 255 // 1023 o una tua funzione
17random / randomSeedGenera numeri casualiimport random · random.randint(1, 6)
18tone / noToneFa suonare un buzzer a una data frequenza e lo fermaPWM: freq(440) · duty_u16(32768); duty_u16(0) per zittirlo
Gli equivalenti non sono uno a uno, e la differenza più grande sta negli intervalli numerici. Sull'Uno analogRead restituisce 0–1023 e analogWrite vuole 0–255; sul Pico ADC.read_u16 e PWM.duty_u16 usano entrambi 0–65535. Sul Pico solo GP26, GP27 e GP28 leggono valori analogici e misurano al massimo 3,3 V: collega quindi il potenziometro a 3V3 (OUT), non a 5 V. MicroPython non ha nemmeno un comando pronto come map o tone: cambi scala con una semplice moltiplicazione e divisione, e produci il suono con l'impostazione freq del PWM.

Percorso MicroPython: 18 schede e i loro equivalenti Arduino

Il percorso MicroPython è pensato per il Raspberry Pi Pico; gli esempi delle schede sono brevi programmi che puoi eseguire su un Pico, per esempio con Thonny. L'ordine è un po' diverso dal percorso Arduino, perché in Python bisogna prima abituarsi alle regole del linguaggio: aggiungere moduli con import, stampare con print, la regola dell'indentazione e dei due punti. La linguetta Arduino di ogni scheda MicroPython contiene anche la versione C++ dello stesso programma; se conosci già Arduino, puoi leggere la tabella da destra a sinistra. Se è il tuo primo Pico, l'articolo cos'è il Raspberry Pi Pico è una buona preparazione per installazione e pin.

N.SchedaA cosa serve?Equivalente Arduino
1import e from … importAggiunge al programma moduli come machine e time#include per le librerie; i comandi di base come pinMode e delay sono già inclusi
2print e f-stringStampa testo e valori nella shell di ThonnySerial.begin(9600) + Serial.println()
3Pin in uscita: Pin(15, Pin.OUT)Rende un pin GP un'uscita; value(), on(), off(), toggle()pinMode(13, OUTPUT) + digitalWrite()
4Pin in ingresso: Pin.IN, PULL_UP, PULL_DOWNRende un pin un ingresso, sceglie la resistenza interna, lo legge con value()pinMode(2, INPUT_PULLUP) + digitalRead()
5time.sleep e sleep_msMette in pausa il programma in secondi o millisecondidelay()
6while True: il ciclo infinitoRipete le righe sotto finché il Pico è accesoloop()
7Indentazione e due punti (:)Stabilisce a quale blocco appartiene ogni rigaParentesi graffe { } e punto e virgola ;
8Variabili: int, float, str, boolMemorizza valori; il tipo si decide da soloint, float, String, bool
9if / elif / else, and / or / notSceglie un ramo in base a condizioni e le combinaif / else if / else · &&, ||, !
10for e rangeRipete un numero fisso di volte; range(0, 10) conta da 0 a 9for (int i = 0; i < 10; i++)
11Liste: [ ], indice, lenTiene più valori in ordine; il primo elemento ha indice 0Array: int pins[] = {2, 3, 4};
12def e return (funzioni)Dà un nome a codice riutilizzabile e restituisce un risultatoFunzioni void o con tipo, return
13ADC: lettura analogica con read_u16Legge la tensione su GP26, GP27, GP28 come 0–65535analogRead() → 0–1023
14PWM: freq e duty_u16Abbassa la luminosità di un LED, suona note con un buzzeranalogWrite() e tone()
15time.ticks_ms e ticks_diffMisura il tempo trascorso senza fermare il codicemillis()
16Pin.irq: pulsanti con gli interruptEsegue una funzione nell'istante in cui si preme un pulsanteattachInterrupt()
17try / except (catturare gli errori)Evita che il programma si fermi quando c'è un erroreNessun equivalente comune su Arduino; si controllano i valori restituiti
18I2C e scan()Trova gli indirizzi dei dispositivi sul bus I2CWire.begin() + codice scanner I2C

Lo stesso programma in due linguaggi: 3 esempi affiancati

Il primo esempio è il "ciao mondo" di ogni linguaggio: far lampeggiare il LED della scheda ogni mezzo secondo. Sull'Uno il LED integrato è collegato al pin 13, quindi non serve montare alcun circuito. Sul Pico è un po' diverso: sul Pico normale il LED integrato è su GP25, ma sul Pico W è collegato al chip wireless e Pin(25) non lo accende. Per questo in MicroPython è più sicuro scrivere Pin("LED", Pin.OUT); nelle versioni attuali di MicroPython questo nome trova il LED integrato sia sul Pico sia sul Pico W. Se il firmware della tua scheda non riconosce il nome "LED", installa un MicroPython aggiornato sul Pico. Il progetto gratuito Lampeggio LED Integrato Raspberry Pi Pico (Pico e Pico W) spiega proprio questa differenza.

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

Il secondo esempio aggiunge un ingresso: il LED resta acceso finché il pulsante è premuto. Il pulsante va tra il pin 2 e GND sull'Uno, e tra GP14 e GND sul Pico. Sull'Uno usiamo di nuovo il LED integrato del pin 13; sul Pico collega un LED esterno a GP15 con una resistenza da 220 Ω (lo strumento Resistenza per LED calcola il valore per il tuo LED). In entrambi i linguaggi si attiva la resistenza di pull-up interna: INPUT_PULLUP in Arduino, Pin.PULL_UP in MicroPython. Con questo collegamento la logica è invertita: premendo, il pin va a GND, quindi l'Arduino legge LOW e il Pico legge 0. La pausa di 20 ms alla fine non elimina del tutto i rimbalzi meccanici del pulsante, ma riduce i lampeggi brevissimi. I dettagli del collegamento sono nell'articolo come collegare un pulsante ad 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

Il terzo esempio mostra la differenza più importante tra i due linguaggi: gli intervalli numerici. Il piedino centrale del potenziometro va su A0 sull'Uno e su GP26 sul Pico; i piedini esterni vanno su 5V e GND sull'Uno, e su 3V3 (OUT) e GND sul Pico. Il LED va sul pin 9 (segnato con ~) dell'Uno e su GP15 del Pico, in entrambi i casi con una resistenza da 220 Ω. In Arduino analogRead restituisce 0–1023 ma analogWrite vuole 0–255, per questo in mezzo c'è map(raw, 0, 1023, 0, 255). Sul Pico read_u16 e duty_u16 usano entrambi 0–65535, quindi puoi passare la lettura direttamente al PWM. Come funziona il PWM lo trovi nell'articolo cos'è il PWM, e come guardare i valori in tempo reale nella guida al monitor seriale.

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)
ConcettoArduino C++MicroPython (Pico)
Eseguito una voltavoid setup() { … }Le righe prima di while True:
Ripetuto all'infinitovoid loop() { … }while True: e le righe indentate sotto
Blocco di codiceParentesi graffe { } e ; a fine riga: a fine riga e indentazione di 4 spazi
Commento// commento# commento
Pin in uscitapinMode(13, OUTPUT); digitalWrite(13, HIGH);led = Pin(15, Pin.OUT) · led.value(1)
Pin in ingressopinMode(2, INPUT_PULLUP); digitalRead(2)Pin(14, Pin.IN, Pin.PULL_UP) · button.value()
Lettura analogicaanalogRead(A0) → 0–1023ADC(26).read_u16() → 0–65535
Uscita PWManalogWrite(9, 0–255)PWM(Pin(15)).duty_u16(0–65535)
Attesadelay(500)time.sleep_ms(500) o time.sleep(0.5)
StampaSerial.begin(9600); Serial.println(x);print(x)

Mini test, "Capito" e i tuoi progressi in Il mio livello

  • Mini test: Ogni scheda termina con due domande, e il titolo dice Mini test · 1 / 2. Quando tocchi una risposta ricevi subito Giusto. o Non proprio. con una breve spiegazione; prosegui con Prossima domanda.
  • Punteggio: Finite le due domande vedi un punteggio come 2 / 2 giuste. La scheda non si può completare senza il test; al posto del pulsante compare Risolvi il mini test per completare la scheda.
  • Capito: Finito il test compare il pulsante Capito, prossima scheda (sull'ultima scheda di un percorso solo Capito). Toccandolo, la scheda viene salvata come imparata nel tuo account, una piccola festa mostra i tuoi progressi, per esempio Ottimo! 5 / 18 schede, e si apre la scheda successiva.
  • Badge e contatore: Le schede imparate hanno il segno Imparata nell'elenco, e il contatore Cosa hai imparato in cima alla guida sale. Quando finisci tutte le schede di un percorso compare Hai imparato tutte le schede di questo percorso.
  • Il mio livello: Nella schermata Il mio livello della sezione Impara, sotto il titolo Guida al codice e la nota Schede imparate, ci sono due barre separate: Arduino C++ x/18 e MicroPython x/18. Queste barre contano solo le schede della guida al codice.
  • Una regola onesta con te stesso: L'app non ti blocca dopo una risposta sbagliata; il pulsante Capito compare appena il test è finito. Prima di toccarlo, quindi, assicurati di saper spiegare ad alta voce perché entrambe le risposte sono corrette; se non ci riesci, torna alla sezione Esempio e rileggi il codice riga per riga.

Vedilo nei progetti: trovare il comando nel codice vero

L'ultimo passo per imparare un comando è riconoscerlo in un progetto funzionante scritto da qualcun altro. Nella sezione Vedilo nei progetti la scheda mostra alcuni progetti scelti e, sotto, una frase che dice in quanti progetti compare il comando; il link Tutti apre l'elenco completo. È ordinato dal più facile al più difficile e si restringe con i filtri Tutti, Gratuito e Premium. millis, per esempio, compare nel codice di oltre 50 progetti: l'elenco parte dal progetto gratuito Controllo LED ESP32 con pulsante (Toggle), prosegue con progetti per principianti sul Pico come Pianoforte a pulsanti con Raspberry Pi Pico (5 pulsanti + buzzer + registratore) e Sensore di parcheggio con Raspberry Pi Pico (HC-SR04 + 3 LED + buzzer) e sale a progetti di livello intermedio come Semaforo Raspberry Pi Pico con selettore a 4 posizioni (macchina a stati, GP11-13 + GP4), che uniscono pulsante e temporizzazione. Il nostro consiglio: apri un progetto gratuito dell'elenco, cerca il comando nel codice, cambia un valore e prevedi prima il risultato. Per vedere cosa fa ogni riga del codice, la linguetta Capire il codice del progetto è il passo naturale successivo.

Ordine di studio consigliato: un piano di 4 settimane

Supponiamo che tu possa dedicare circa 20 minuti al giorno, 5 giorni a settimana. Per finire un percorso in 4 settimane basta una scheda nella maggior parte dei giorni; negli altri ripassi e lavori su un progetto invece che su una scheda nuova. Se hai un Arduino, segui solo la colonna Arduino; se hai un Pico, la colonna MicroPython. Se hai entrambe le schede, completa prima il percorso Arduino e passa a MicroPython nel secondo mese; i concetti sono gli stessi, quindi il secondo percorso va molto più veloce. Tutti i progetti della tabella sono gratuiti su BlueGrays. Se vuoi un piano più ampio, la tabella di marcia di 30 giorni dell'articolo app per imparare Arduino si abbina bene a questa tabella; se insegni con il Pico, le lezioni con il Raspberry Pi Pico distribuiscono le schede MicroPython su 6 settimane di lezione.

SettimanaSchede Arduino C++Schede MicroPythonProgetti gratuiti della settimanaCosa sai fare a fine settimana
11–5: pinMode, digitalWrite, digitalRead, analogRead, analogWrite1–5: import, print, pin in uscita, pin in ingresso, time.sleepLED lampeggiante, Accendere un LED con un pulsante (Push); Pico: Lampeggio LED Integrato Raspberry Pi Pico (Pico e Pico W)Far lampeggiare un LED, leggere un pulsante; su Arduino, vedere un valore analogico
26–10: delay, millis, variabili, if / else, operatori6–9: while True, indentazione, variabili, if / elif / elseLuce notturna con LDR, Controllo LED ESP32 con pulsante (Toggle); Pico: Raspberry Pi Pico Due LED alternati (Flip-Flop, GP14 + GP13)Decidere in base a una lettura, temporizzare senza fermare il programma
311–14: for, while, funzioni, array10–13: for e range, liste, def, ADCEffetto Supercar con LED, LED in sequenza; Pico: Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali, GP11/GP12/GP13)Mettere le ripetizioni nei cicli, i pin negli array e i compiti nelle funzioni
415–18: Serial, map, random, tone14–18: PWM, ticks_ms, Pin.irq, try / except, I2CUso del cicalino, Misurare l'intensità luminosa con LDR; Pico: Semaforo Raspberry Pi Pico con selettore a 4 posizioni (macchina a stati, GP11-13 + GP4)Stampare valori, regolare suono e luminosità, costruire da zero un piccolo progetto

Una routine quotidiana di 20 minuti

  1. 3 minuti, riscaldamento: Risolvi le domande del giorno nella sezione Impara o rifai il mini test di ieri. Lo scopo è verificare che oggi ricordi ancora il comando di ieri.
  2. 5 minuti, nuova scheda: Leggi le sezioni A cosa serve?, Perché? e Sintassi. Ricopia la sintassi a mano su un foglio; scrivendola, ti sfuggono molto meno parentesi e punti e virgola.
  3. 3 minuti, esempio: Spiegati l'esempio riga per riga, poi cambia linguetta. In una scheda Arduino guarda la linguetta MicroPython, in una scheda MicroPython la linguetta Arduino, e abbina le righe che fanno la stessa cosa nei due programmi.
  4. 2 minuti, mini test: Rispondi alle due domande e leggi la spiegazione di quella sbagliata. A questo punto dai un'altra occhiata ai riquadri Errore comune e Suggerimento.
  5. 6 minuti, progetto: Apri un progetto gratuito e facile dall'elenco Vedilo nei progetti, trova il comando nel codice e cambia un solo valore: un'attesa, un numero di pin o una soglia. Se il circuito è pronto, carica il codice sulla scheda; altrimenti prevedi il risultato e controllalo con Capire il codice.
  6. 1 minuto, appunto: Scrivi una riga sul quaderno: il nome del comando, il suo significato in una frase e l'equivalente nell'altro linguaggio. Dopo quattro settimane quella pagina sarà il tuo dizionario personale dei comandi.

8 errori comuni con questi comandi

ErroreSintomoSoluzioneScheda
Dimenticare pinModeIl LED non si accende o è molto deboleScrivi pinMode(pin, OUTPUT) in setup(); sul Pico crea il pin con Pin(15, Pin.OUT)pinMode · pin in uscita
Scrivere = invece di == in una condizioneif (x = 5) è sempre vero, il programma entra sempre nello stesso ramoUsa == per confrontare; in Python if x = 5 dà subito un SyntaxErrorif / else · operatori
Bloccare il codice con un delay lungoPremi il pulsante, ma la reazione arriva tardi o non arrivaFai l'attesa con millis; sul Pico usa time.ticks_ms e ticks_diffdelay · millis · ticks_ms
Confondere l'intervallo di analogReadUna soglia copiata da Arduino sul Pico non scatta maiSull'Uno analogRead dà 0–1023, sul Pico read_u16 dà 0–65535; ricalcola la soglia per il nuovo intervalloanalogRead · ADC
Portare un valore di analogWrite in duty_u16Sul Pico, con duty_u16(255) il LED resta quasi spentoduty_u16 vuole 0–65535: metà luminosità è 32768, piena luminosità 65535analogWrite · PWM
Tenere millis in un intSull'Uno la temporizzazione si guasta dopo circa 33 secondiDichiara le variabili di tempo come unsigned long e scrivi il controllo come adesso - precedente >= intervallomillis
Aspettarsi la logica di INPUT_PULLUP al contrarioTi aspetti HIGH o 1 premendo il pulsante, ma arriva LOW o 0Con il pull-up, premuto è LOW (0) e rilasciato è HIGH (1)digitalRead · pin in ingresso
Scrivere sleep(500) sul PicoIl Pico aspetta 500 secondi, più di 8 minuti, invece di mezzo secondosleep vuole i secondi: scrivi sleep(0.5) o sleep_ms(500)time.sleep

La linguetta Blocchi: capire un comando guardandolo

Blocchi in italiano del progetto LED lampeggiante: imposta pin 9 come USCITA, poi in ripeti per sempre scrivi ALTO sul pin 9, attendi 100 ms, scrivi BASSO sul pin 9, attendi 100 ms
Blocchi del progetto gratuito LED lampeggiante: il blocco "setup (una volta)" corrisponde a setup() e "ripeti per sempre" a loop().

La linguetta Blocchi ti fa vedere cosa fa un comando senza scrivere codice, soprattutto nelle prime schede di un percorso. Nell'immagine sopra, pinMode diventa il blocco "imposta pin 9 come USCITA", digitalWrite diventa "scrivi ALTO sul pin 9" e delay "attendi 100 ms"; nella scheda pinMode, una nota sotto la vista a blocchi riporta anche le opzioni del menu a tendina: USCITA, INGRESSO e INGRESSO (PULLUP). I blocchi appaiono nella lingua dell'app e servono per leggere: nell'app non trascini blocchi per scrivere un programma, e sulla scheda si carica sempre il codice vero. Il modo consigliato di usarli: prima prevedi nella linguetta Blocchi cosa farà il programma, poi passa alla linguetta Arduino e trova a quale riga corrisponde ogni blocco. Nei progetti con vista a blocchi, l'interruttore Mostra a blocchi nella pagina del progetto ti permette di fare lo stesso abbinamento su un progetto intero; le basi sono nell'articolo cos'è la programmazione a blocchi.

In breve, per imparare i comandi Arduino non serve un lungo elenco: bastano l'ordine giusto, un piccolo esempio funzionante per ogni comando, una verifica di due domande e un progetto reale che usa il comando. Se oggi inizi dalla scheda pinMode, tra quattro settimane avrai completato tutte le 18 schede e visto ogni comando con i tuoi occhi in almeno un progetto; quando passerai al Pico, percorrerai gli stessi concetti nel percorso MicroPython molto più in fretta. Se vuoi provare le schede e i progetti che contengono, installa BlueGrays sul telefono e apri la prima scheda nella sezione Impara.

Domande frequenti

Quali sono i comandi base di Arduino?

I comandi Arduino più usati sono quelli dei pin (pinMode, digitalWrite, digitalRead, analogRead, analogWrite), quelli del tempo (delay, millis), quelli della porta seriale con Serial e aiuti come map, random e tone. Accanto a questi, strutture C++ come if, for e while, insieme alle funzioni, costruiscono il flusso del programma. Il percorso Arduino C++ della Guida al codice di BlueGrays tratta questi argomenti in ordine in 18 schede.

Da quale comando Arduino si comincia?

Comincia da pinMode e digitalWrite, perché con questi due accendi già un LED e vedi subito il risultato. Poi aggiungi la temporizzazione con delay e la lettura di un pulsante con digitalRead. analogRead, millis, if e for si basano tutti su questi quattro comandi.

Che differenza c'è tra i comandi Arduino e MicroPython?

I concetti sono gli stessi, cambia la scrittura: Pin(15, Pin.OUT) e led.value(1) sostituiscono pinMode e digitalWrite, time.sleep_ms sostituisce delay e while True sostituisce loop(). Cambiano anche gli intervalli numerici; analogRead restituisce 0–1023 sull'Uno, read_u16 restituisce 0–65535 sul Pico. In Python l'indentazione e i due punti prendono il posto delle parentesi graffe e dei punti e virgola del C++.

In MicroPython esiste il comando delay?

Non esiste un comando chiamato delay; fanno lo stesso lavoro sleep (secondi), sleep_ms (millisecondi) e sleep_us (microsecondi) del modulo time. Il delay(500) di Arduino diventa sul Pico time.sleep_ms(500) o time.sleep(0.5). Per temporizzare senza fermare il codice, time.ticks_ms e time.ticks_diff sostituiscono millis.

Su quale pin è il LED integrato del Raspberry Pi Pico?

Sul Pico normale il LED integrato è collegato a GP25. Sul Pico W il LED è collegato al chip wireless, quindi Pin(25) non lo accende. Nelle versioni attuali di MicroPython, Pin("LED", Pin.OUT) trova il LED integrato su entrambe le schede.

La Guida al codice di BlueGrays è gratuita?

Sì, la Guida al codice è gratuita: puoi leggere tutte le 36 schede, vedere gli esempi e risolvere i mini test. Gli elenchi di Vedilo nei progetti contengono progetti gratuiti e Premium; il filtro Gratuito mostra solo quelli gratuiti.

Vedi tutti i progetti
LED lampeggiante
#1Principiante

LED lampeggiante

Il primissimo ciao dell'elettronica: accendere e spegnere un solo LED. L'Arduino accende e spegne il LED a intervalli brevissimi, così la luce lampeggia veloce. Vedi nel modo più semplice come la sche

4.6(188)
1127
Accendere un LED con un pulsante (Push)
#9Principiante

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

4.8(113)
229
Luce notturna con LDR
#12Principiante

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

4.8(102)
205
Controllo LED ESP32 con pulsante (Toggle)
#105Principiante

Controllo LED ESP32 con pulsante (Toggle)

Ogni volta che si preme il pulsante, lo stato del LED cambia: se è acceso si spegne, se è spento si accende. Classico schema toggle. Con il debounce puliamo il rumore meccanico del pulsante per garantire una singola commutazione con una sola pressione.

4.6(39)
57
Effetto Supercar con LED
#6Intermedio

Effetto Supercar con LED

La classica luce che va e viene: un punto luminoso scorre da un capo all'altro di sei LED e poi torna indietro. L'Arduino accende ogni LED per un decimo di secondo prima di passare al successivo, inve

4.8(106)
202
Lampeggio LED Integrato Raspberry Pi Pico (Pico e Pico W)
#147Principiante

Lampeggio LED Integrato Raspberry Pi Pico (Pico e Pico W)

Il progetto di apertura della serie Raspberry Pi Pico! Facciamo lampeggiare il LED verde integrato per verificare che la scheda funzioni — un classico primo esperimento "Hello World". NESSUN componente esterno, solo Pico e cavo USB. Il codice è scritto in MicroPython (il linguaggio ufficialmente supportato dalla Raspberry Pi Foundation). Impara la classe machine.Pin, la modalità Pin.OUT, i metodi led.on()/off() e time.sleep() in Thonny IDE. Segui ogni commutazi

5.0(1)
10
Raspberry Pi Pico Due LED alternati (Flip-Flop)
#149Principiante

Raspberry Pi Pico Due LED alternati (Flip-Flop)

Il passo successivo dopo il LED singolo sul Pico: due LED lampeggiano alternativamente in un pattern flip-flop classico. Due LED di colori diversi (rosso su GP14, verde su GP13) scambiano stati ogni 500ms. Pin.toggle() di MicroPython rende il codice breve. Base di semafori, lampeggianti.

5.0(2)
19
Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali)
#150Principiante

Simulatore Semaforo Raspberry Pi Pico (3 LED Sequenziali)

Simuliamo un vero semaforo con LED rosso, giallo e verde. Verde 4 sec "vai", giallo 1,5 sec "preparati", rosso 3 sec "fermati" e rosso+giallo 1 sec "partenza" (pattern europeo). Impara la definizione di funzione, la logica della macchina a stati e la sincronizzazione multi-GPIO. Circuito semplice: 3 LED su GP11/GP12/GP13.

4.0(1)
12