Concetti Chiave
- Il progetto prevede la realizzazione di un convertitore da numeri decimali a numeri binari a 8 bit utilizzando una scheda Arduino UNO.
- La conversione avviene attraverso una serie di divisioni a catena per 2, considerando i resti di ciascuna divisione.
- Il monitor seriale è utilizzato per inserire i numeri decimali e visualizzare i risultati della conversione in binario.
- Il programma limita l'input a numeri decimali minori di 256, restituendo un messaggio di errore per valori superiori.
- Il codice è strutturato in due funzioni principali: void setup() per inizializzare la comunicazione e void loop() per gestire la conversione dei numeri.
Oggi avremo a che fare con un progetto un po' particolare: realizzare un convertitore di numeri decimale in numeri binari a 8 bit con il solo ausilio della scheda Arduino, senza altri strumenti. Quindi assicurati di avere a portata di mano:
--Questo progetto consiste nel collegamento al monitor seriale, al quale forniremo dei numeri decimali che il nostro convertitore trasformerà in Sappiamo benissimo che per convertire un numero decimale in binario è necessario eseguire una divisione a catena per 2 e successivamente considerarne i resti.
Implementazione del codice
È ciò che faremo fare al nostro Arduino, eseguire una serie di divisioni, considerarne il resto, e stampare il risultato sul void setup(){
Serial.begin(9600); //Impostiamo la comunicazione col monitor seriale alla velocità di 9600 baud
}
void loop(){
int val = Serial.parseInt(); //Chiamiamo val il valore che immetteremo nel monitor seriale
if(val > 0){ //se il valore immesso è maggiore di 0, ovvero se inseriamo qualcosa,
if(val
int restouno = val%2; //chiamiamo restouno il resto del numero diviso per 2.
int restodue = ((val-restouno)/2)%2; //chiamiamo restodue il resto del numero meno il resto diviso per due, e così via, a catena.
int restoquattro = ((((val-restouno)/2)-restodue)/2)%2;
int restootto = ((((((val-restouno)/2)-restodue)/2)-restoquattro)/2)%2;
int restosedici = ((((((((val-restouno)/2)-restodue)/2)-restoquattro)/2)-restootto)/2)%2;
int restotrentadue = ((((((((((val-restouno)/2)-restodue)/2)-restoquattro)/2)-restootto)/2)-restosedici)/2)%2;
int restosessantaquattro = ((((((((((((val-restouno)/2)-restodue)/2)-restoquattro)/2)-restootto)/2)-restosedici)/2)-restotrentadue)/2)%2;
int restocentoventotto = ((((((((((((((val-restouno)/2)-restodue)/2)-restoquattro)/2)-restootto)/2)-restosedici)/2)-restotrentadue)/2)-restosessantaquattro)/2)%2;
Serial.print(restocentoventotto); //stampa il resto del bit corrispondente a 128
Serial.print(restosessantaquattro); //stampa il resto del bit corrispondente a 64
Serial.print(restotrentadue); //stampa il resto del bit corrispondente a 32
Serial.print(restosedici); //stampa il resto del bit corrispondente a 16
Serial.print(restootto); //stampa il resto del bit corrispondente a 8
Serial.print(restoquattro); //stampa il resto del bit corrispondente a 4
Serial.print(restodue); //stampa il resto del bit corrispondente a 2
Serial.println(restouno); //stampa il resto del bit corrispondente a 1
}else{
Serial.println("Numero troppo grande!"); //se la condizione è falsa, ovvero il numero è maggiore o uguale di 256, il monitor restituirà la frase tra gli apici.
}
}
}
Esecuzione e risultati
Il gioco è fatto. Basta aprire il monitor seriale ed inserire un numero minore di 256 per avere la sua conversione in binario!
Domande da interrogazione
- Come funziona il convertitore di numeri decimali in binari a 8 bit con Arduino?
- Qual è il limite del numero decimale che può essere convertito?
- Qual è la velocità di comunicazione impostata per il monitor seriale?
Il convertitore utilizza una serie di divisioni a catena per 2 per ottenere i resti, che rappresentano i bit del numero binario. I risultati vengono poi stampati sul monitor seriale, a condizione che il numero immesso sia compreso tra 0 e 255.
Il numero decimale da convertire deve essere minore di 256; altrimenti, il programma restituirà un messaggio di errore: "Numero troppo grande!".
La comunicazione con il monitor seriale è impostata a una velocità di 9600 baud, come specificato nel codice all'inizio del programma.