Skip to content
logo9minuti120x48
Menu
  • Home
  • Tutorial
    • Zaini
    • Stampa 3d
    • ebook
    • Informatica
  • Scritti
    • Racconti
    • Articoli
    • Temi
    • Storia
  • Video
  • Progetti
    • Progetto Carcere
    • Progetto Istruzione
    • Progetto Acque pulite
    • Progetto Tecnologia
  • Chi siamo
    • LinkTree
  • Privacy Policy
    • Cookie Policy (EU)
  • Blog
  • Donazioni
Menu
Display a sette segmenti con Arduino

Display a sette segmenti con Arduino Uno R3

Posted on 28 Maggio 201811 Febbraio 2020 by Alessandro Oppo

Benvenuti su 9minuti.it, oggi vedremo insieme come collegare ad Arduino un display a 7 segmenti con Arduino e che però ha al suo interno otto led. Spesso il povero punto viene trascurato ma è un led a tutti gli effetti.
Trattandosi di un solo display non abbiamo bisogno di librerie.

 

Per questa prova useremo:

  • Arduino Uno o simili
  • Otto resistenze da 220 ohm (vanno bene anche valori simili, es 270 ohm)
  • Breadboard

Indice

  • Collegamento del display a sette segmenti con Arduino
  • Compra il display a 7 segmenti su Amazon e supporta il blog
  • Lo sketch del display a sette segmenti con Arduino
  • Compra il display a 7 segmenti su Amazon e supporta il blog
  • Conclusioni

Collegamento del display a sette segmenti con Arduino

Attenzione, in questo tutorial tratteremo il display con il catodo in comune. Non sto a dilungarmi sulle differenze in quanto è pieno di guide che illustrano la differenza con i display con anodo in comune.

arduin sette segmenti schermo

 

Compra il display a 7 segmenti su Amazon e supporta il blog

 

Lo sketch del display a sette segmenti con Arduino

Vediamo ora uno sketch di esempio. Il seguente codice è stato preso da questo articolo e modificato opportunamente. Ho inoltre fatto delle aggiunte e sistemato alcuni punti dove creava problemi.

//modified for 9minuti.it from the original sketch that you can 
//find here https://www.allaboutcircuits.com/projects/interface-a-seven-segment-display-to-an-arduino/

// make an array to save pin configuration of numbers

int num_array[11][8] = {
  { 1, 1, 1, 1, 1, 1, 0, 0 }, // 0
  { 0, 1, 1, 0, 0, 0, 0, 0 }, // 1
  { 1, 1, 0, 1, 1, 0, 1, 0 }, // 2
  { 1, 1, 1, 0, 1, 0, 1, 0 }, // 3
  { 0, 1, 1, 0, 0, 1, 1, 0 }, // 4
  { 1, 0, 1, 0, 1, 1, 1, 0 }, // 5
  { 1, 0, 1, 1, 1, 1, 1, 0 }, // 6
  { 1, 1, 1, 0, 0, 0, 0, 0 }, // 7
  { 1, 1, 1, 1, 1, 1, 1, 0 }, // 8
  { 1, 1, 1, 0, 1, 1, 1, 0 }, // 9
  { 0, 0, 0, 0, 0, 0, 0, 1 }  //.
};

// this functions writes values to the sev seg pins
void Num_Write(int number) {
  for (int j = 2; j < 10; j++) {
    digitalWrite(j, num_array[number][j - 2]);
  }
}

void setup(void)
{
  // set pin modes
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
}

void loop(void) {
  for (int i = 0; i < 11; i++)
  {
    Num_Write(i);
    delay(1000);
  }
}

Compra il display a 7 segmenti su Amazon e supporta il blog

Commentiamo ora il codice scritto riga per riga.

6 – Scriviamo la matrice di tipo intero che conterrà i segmenti da accendere a seconda del numero da visualizzare sul display. num_array[11][8] va letta come una coordinata cartesiana, ovvero undici celle da otto numeri ciascuna.
7-17 Nella prima linea dell’array, corrispondente allo zero, ci accorgiamo che su otto campi solamente sei sono riempiti dal numero 1, esattamente come la quantità di segmenti necessari per comporre il numero 0.
21 – Dichiarazione della procedura Num_Write() con il parametro number di tipo intero. Questa procedura sarà quella che ci consentirà facilmente di scegliere quale numero visualizzare sul display.
22 – Ciclo for che parte da 2 come i nostri pin, se ad esempio fossimo partiti dal pin numero 3, il ciclo for avrebbe avuto questa intestazione

for (int j = 3; j < 11; j++)

23 – Funzione digitalWrite() che, come al solito, ha due parametri. Guardando attentamente vediamo che il primo parametro, ovvero il numero del pin, è dato dalla variabile j, la quale verrà incrementata ad ogni ciclo del for. Il secondo parametro è preso da un array.
Al primo giro del for il parametro num_array[x][y] scorrerà solamente le y. Ovvero riprodurrà nella funzione digitalWrite() questi numero uno alla volta, partendo da sinistra.

{ 1, 1, 1, 1, 1, 1, 0, 0 }, // 0

Infatti la digitalWrite() accetta anche 1 e 0 invece di HIGH e LOW, ottenendo sempre lo stesso esito.

30-37 Dichiarazione dei pin utilizzati per i segmenti/led come output
41-43 Ciclo for che incrementa il parametro della procedura Num_Write() in maniera da riprodurre tutti i numeri salvati nell’array.
44 – Delay da 1 secondo tra un ciclo del loop() e il successivo.

Vediamo ora un video dello sketch. I numeri scorrono velocemente perché il delay che avevo inserito era inferiore ad un secondo.

 

Conclusioni

Spero che questo tutorial sia stato d’aiuto a qualcuno, rimango a disposizione per aiuti o chiarimenti.

Grazie,
Alessandro

Dammi un 5 virtuale, clicca like e condividi.

  • Fai clic qui per condividere su LinkedIn (Si apre in una nuova finestra)
  • Fai clic per condividere su Facebook (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Twitter (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Reddit (Si apre in una nuova finestra)
  • Fai clic per condividere su WhatsApp (Si apre in una nuova finestra)
  • Fai clic per condividere su Telegram (Si apre in una nuova finestra)
  • Fai clic per inviare un link a un amico via e-mail (Si apre in una nuova finestra)

Related

5 thoughts on “Display a sette segmenti con Arduino Uno R3”

  1. giuseppe ha detto:
    14 Aprile 2019 alle 10:38 am

    ciao alessandro volevo porti un problema che mi assilla e non ci riesco aiutami vorrei fare un orologio con un ds3231 4display riuniti a 5 fili che ho e sto impazzendo da 1 mese senza riuscire a capire come fare capisco il sketch con il seriale video in arduino ma non so come tradurlo per il display mi puoi aiutare ? grazie per quanto vorrai dirmi

    Rispondi
    1. Alessandro Oppo ha detto:
      14 Aprile 2019 alle 2:28 pm

      Ciao Giuseppe, grazie per essere passato sul mio sito. Posso chiederti come mai vuoi utilizzare quattro display uniti e non un display già pronto tipo questo? https://amzn.to/2DexFk1 ti semplificheresti tantissimo la vita! Se invece vuoi utilizzare quelli che hai già devi utilizzare una libreria adatta. Ne ho provata una ma non ricordo il nome in questo momento, se mi viene in mente poi la scrivo. Spero di essere stato d’aiuto.

      Rispondi
      1. giuseppe festa ha detto:
        12 Maggio 2019 alle 9:55 am

        ciao mi spiego meglio sono vecchio e solo ! con una moglie gravemente malata passo il mio tempo vicino ad arduino e vorrei sapere come si fa a trasferire uno sketch di orologio con tm1637 e ds3231 da porta seriale a display : ho letto molto ma nessuno ha mai degnato di parlare in modo che imbranati come me possano capire: ho anche scaricato qualche soluzione che funziona bene ma purtroppo non riesco a capire il funzionamento la tecnica tua è perfetta per essere compresa ma non è utilizzata da nessuna parte poiche tutti usano la scusa che bisogna sforzarsi e forse sarà anche giusto ma nel mio caso?
        ecco potresti fare una spiegazione come questa per uno sketch con: un tm1637 un ds3231 e arduino?
        nel caso di un si ti allego lo sketch
        ho studiato anche le librerie ma non riesco a capire ancora nulla

        // For video examples & more project ideas
        // Visit https://www.youtube.com/channel/UCWb0gwBNWw7KnlYPc4jrvIA
        // _A___r___d___u___i___n___0___x__

        #include
        #include “RTClib.h”
        #include

        RTC_DS3231 rtc;

        #define CLK 8
        #define DIO 9
        TM1637Display display(CLK, DIO);

        int a, t;

        void setup () {
        Wire.begin();
        display.setBrightness(0x8);
        pinMode(LED_BUILTIN, OUTPUT);

        }

        void loop () {
        DateTime now = rtc.now();
        a = now.second() % 2;
        t = (now.hour() * 100 ) + now.minute();
        display.showNumberDec(t, true);
        digitalWrite(LED_BUILTIN, LOW); //faccio lampeggiare anche pinled13
        if (a == 0) {
        display.setColon(true);
        digitalWrite(LED_BUILTIN, HIGH);
        }
        else {
        display.setColon(false);
        }
        }
        grazie se vorrai darmi un aiuto …..mi bastano le spiegazioni perchè lo sketch funziona bene
        grazzzie per il tuo tempo

        Rispondi
        1. Alessandro Oppo ha detto:
          12 Maggio 2019 alle 7:54 pm

          Ciao Giuseppe, mi dispiace molto per tua moglie, spero che possa stare meglio presto.
          Per quanto riguarda il display dipende da quello che stai usando. Io ti sconsiglio vivamente un display a sette segmenti come quello usato nel tutorial perché vanno collegate tutte le resistenze e ci si complica la vita.
          Io userei un display I2C, questi display permettono di stampare sullo schermo quello che vogliamo in maniera veramente semplice.
          Se hai uno di questi schermi posso provare ad aiutarti, altrimenti è difficile.
          Ciao!

          Rispondi
  2. giuseppe festa ha detto:
    13 Maggio 2019 alle 8:14 am

    ciao alessandro
    quello che ho è tm1637 ,un ds3231con I2C,matrice di led 8×8 ,libreria tm1637 molto comoda ma a me ancora incomprensibile ,libreria ds3231 idem,,libreria 7219 inerente matrici di led cosa per me irraggiungibile perchè poco spiegata ecco ma siccome ti ho allegato lo sketch con tm1637 e ds3231 che è molto preciso come RTC mi piacerebbe capire lo sketch suddetto
    se puoi perdere un po del tuo tempo io posso esserti solo grato . mi bastano quelle poche righe di spiegazione poi cercherò di capire unendo lo scritto con le tue spiegazioni
    alessandro se non puoi ti sono grato lo stesso perchè il solo fatto che tu mi abbia risposto per me è tanto
    grazie
    giuseppe

    Rispondi

Cosa ne pensi? Fammelo sapere con un messaggio Annulla risposta

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Scoprici sui social

  • YouTube
  • Telegram
  • Facebook
  • RSS Feed

    Ultimi post

    • Buzzurretto e la scuola – Racconto breve
    • Il mio punto di vista sul progetto scuola
    • Di nuovo nuvole – Racconto breve
    • L’intelligenza artificiale, la forza della logica e la morale – ChatGPT
    • Videogrep, how to extract a certain word from a video (or more)
    • Brucerò tutto non appena è stato scritto – Racconto breve
    • C’è del lavoro da fare – Racconto breve

    Newsletter

    ©2023 9minuti | Design: Newspaperly WordPress Theme
    Manage Cookie Consent
    Usiamo cookie per ottimizzare il nostro sito web ed i nostri servizi.
    Cookie funzionali Sempre attivo
    The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
    Preferences
    The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
    Statistics
    The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
    Marketing
    The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
    Gestisci opzioni Gestisci servizi Gestisci fornitori Per saperne di più su questi scopi
    Visualizza preference
    {title} {title} {title}
     

    Caricamento commenti...