Introduzione
La comunicazione seriale è una delle competenze più fondamentali nell’elettronica embedded. Che tu stia eseguendo il debug di un sensore, comunicando con un modulo GPS o inviando dati a un PC, l’umile USART (Universal Synchronous/Asynchronous Receiver/Transmitter) è lo strumento ideale. In questo tutorial, costruiremo un semplice progetto di Echo Seriale utilizzando un Arduino Uno nel simulatore Velxio. Ogni carattere che digiti nel Monitor Seriale viene rimandato indietro con il suo valore ASCII e un conteggio progressivo. È l‘“Hello, World!” della comunicazione seriale.

Panoramica del Circuito
Questo progetto è estremamente semplice: utilizza solo la scheda Arduino Uno stessa. Non sono necessari componenti esterni perché la comunicazione seriale avviene tramite il convertitore USB-serial integrato nell’Uno. In Velxio, il Monitor Seriale è integrato nella barra degli strumenti dell’editor, così puoi interagire immediatamente con il tuo codice.
Componenti
| Componente | Quantità | Note |
|---|---|---|
| Arduino Uno (wokwi-arduino-uno) | 1 | Il cervello dell’operazione |
Questo è tutto! I pin TX (pin 1) e RX (pin 0) dell’Arduino Uno sono collegati internamente all’interfaccia USB, che Velxio emula perfettamente. Non è richiesto alcun cablaggio.

Analisi del Codice
Immergiamoci nel codice. Apri l’editor Velxio e vedrai il seguente sketch:
// Serial Echo — USART Protocol Test
// Open the Serial Monitor to send and receive data.
// Everything you type is echoed back with extra info.
void setup() {
Serial.begin(9600);
Serial.println("=============================");
Serial.println(" Serial Echo Test (USART)");
Serial.println("=============================");
Serial.println("Type something and press Send.");
Serial.println();
// Print system info
Serial.print("CPU Clock: ");
Serial.print(F_CPU / 1000000);
Serial.println(" MHz");
Serial.print("Baud rate: 9600");
Serial.println();
Serial.println();
}
unsigned long charCount = 0;
void loop() {
if (Serial.available() > 0) {
char c = Serial.read();
charCount++;
Serial.print("[");
Serial.print(charCount);
Serial.print("] Received: '");
Serial.print(c);
Serial.print("' (ASCII ");
Serial.print((int)c);
Serial.println(")");
}
// Periodic heartbeat
static unsigned long lastBeat = 0;
if (millis() - lastBeat >= 5000) {
lastBeat = millis();
Serial.print("Uptime: ");
Serial.print(millis() / 1000);
Serial.print("s | Chars received: ");
Serial.println(charCount);
}
}

Come Funziona
-
Setup: Inizializziamo la comunicazione seriale a 9600 baud usando
Serial.begin(9600). Poi stampiamo un’intestazione e le informazioni di sistema: la velocità del clock della CPU (F_CPU / 1000000 dà i MHz) e il baud rate. -
Variabile globale:
unsigned long charCount = 0;tiene traccia di quanti caratteri abbiamo ricevuto. -
Loop:
if (Serial.available() > 0)controlla se ci sono dati in attesa nel buffer di ricezione.char c = Serial.read();legge un carattere.- Incrementiamo
charCounte stampiamo un messaggio formattato:[conteggio] Ricevuto: 'c' (ASCII 99). - Ogni 5 secondi, stampiamo un heartbeat con il tempo di attività e il totale dei caratteri ricevuti.
Concetti Chiave per Studenti
- Baud Rate: La velocità della comunicazione seriale. Entrambe le parti devono concordare sullo stesso baud rate (qui 9600).
- Serial.available(): Restituisce il numero di byte in attesa di essere letti. Controlla sempre prima di leggere per evitare di ottenere -1.
- Serial.read(): Legge un singolo byte (carattere) dal buffer.
- ASCII: Ogni carattere ha un codice numerico. Ad esempio, ‘A’ è 65. Il codice converte
cinintper mostrarlo. - millis(): Restituisce i millisecondi dall’avvio del programma. Utile per temporizzazioni non bloccanti.
- Variabili static:
static unsigned long lastBeatmantiene il suo valore tra le iterazioni del loop, a differenza delle variabili locali.
Errori Comuni e Suggerimenti per il Debug
- Il Monitor Seriale non mostra output? Assicurati di aver aperto il Monitor Seriale in Velxio (clicca sul pulsante “Serial Monitor” nella barra degli strumenti). Controlla anche che il baud rate nel monitor corrisponda a 9600.
- Caratteri spazzatura? La mancata corrispondenza del baud rate è la causa più comune. Ricontrolla
Serial.begin(9600)e l’impostazione del monitor. - Non succede niente quando digiti? Assicurati di premere “Invia” o Invio dopo aver digitato. Il codice legge un carattere alla volta.
- L’heartbeat non viene stampato? La condizione
if (millis() - lastBeat >= 5000)usa>=per evitare di perdere l’intervallo. Se non vedi heartbeat, controlla chelastBeatvenga aggiornato correttamente.
Estensioni Suggerite
Una volta padroneggiato l’echo di base, prova questi miglioramenti:
- Echo di righe intere: Invece di rimandare indietro ogni carattere, accumula i caratteri fino al newline, poi rimanda indietro l’intera riga.
- Parser di comandi: Interpreta comandi speciali come “LED ON” per accendere un LED (aggiungi un LED al circuito).
- Output binario: Stampa il carattere ricevuto in formato binario.
- Baud rate multipli: Permetti all’utente di cambiare il baud rate tramite un comando.
- Registrazione su EEPROM virtuale: Memorizza i dati ricevuti nella EEPROM simulata.
Conclusione
Hai appena realizzato il tuo primo progetto di comunicazione seriale! L’Echo Seriale è una dimostrazione semplice ma potente di come i microcontrollori comunicano con il mondo esterno. Con Velxio, puoi sperimentare senza alcun hardware: basta aprire il simulatore, scrivere codice e testare immediatamente.
Pronto a provarlo tu stesso? Apri l’esempio live in Velxio e inizia a digitare: Echo Seriale su Velxio. Buon coding!