Cerca codice

Come utilizzare un display LED a sette segmenti con Arduino

Come utilizzare un display LED a sette segmenti con Arduino

I display a LED a sette segmenti sono ovunque intorno a noi, dagli orologi digitali e elettrodomestici agli indicatori di piano degli ascensori e ai tabelloni. Sono uno dei modi più intuitivi per visualizzare informazioni numeriche e imparare a controllarli con un Arduino è un'abilità fondamentale per qualsiasi appassionato di elettronica. Questo tutorial ti guiderà nella costruzione di un driver semplice ma versatile per display a sette segmenti che può contare da 0 a 9 ed è progettato per funzionare sia con display a catodo comune che ad anodo comune. Puoi utilizzare questo progetto come base per costruire una varietà di dispositivi pratici, come un contatore digitale per il tuo laboratorio, un display della temperatura per una stazione meteorologica, un timer per un gioco da tavolo o un semplice registratore di punteggio per la tua prossima serata di gioco in famiglia.

Come usare un display LED a sette segmenti con Arduino
Come utilizzare un display a sette segmenti LED con Arduino

Componenti Hardware

Per seguire questo progetto, avrai bisogno dei seguenti componenti. Il cablaggio è semplice e l'elenco dei componenti è ridotto al minimo, rendendo questo progetto perfetto per i principianti.

  • Arduino Uno (o qualsiasi scheda compatibile)
  • display a LED a 7 segmenti (catodo comune o anodo comune)
  • 8 resistori da 1kΩ (560Ω a 1kΩ funzionano bene)
  • Cavi jumper
  • Breadboard
    Come utilizzare un display LED a sette segmenti con Arduino
    Come utilizzare un display LED a sette segmenti con Arduino

Guida al cablaggio

Il cablaggio per questo progetto collega ogni segmento del display a un pin digitale dell'Arduino, con una resistenza di limitazione della corrente in serie per ogni segmento. La differenza principale nel cablaggio dipende dal fatto che tu abbia un display a anodo comune o a catodo comune. In un display a anodo comune, tutti gli anodi (gambe positive) dei LED interni sono collegati insieme e dovrebbero essere collegati all'alimentazione a 5V. In un display a catodo comune, tutti i catodi (gambe negative) sono collegati insieme e dovrebbero essere collegati alla massa. Il codice gestisce automaticamente l'inversione della logica necessaria per il tuo specifico tipo di display, quindi devi solo assicurarti che il cablaggio fisico sia corretto.

Arduino code to update the I2C address on the VL53L0X
Codice Arduino per aggiornare l'indirizzo I2C su VL53L0X — Arduino code to update the I2C address on the VL53L0X

Come dimostrato nel video, collega i pin segnale del display (da A a G e il punto decimale) ai pin di Arduino 2-9 in ordine. Ogni pin segnale dovrebbe avere una resistenza di 1kΩ in serie. Il pin comune (anodo o catodo, a seconda del tuo display) dovrebbe essere collegato a 5V o GND rispettivamente. È importante utilizzare resistenze individuali per ogni segmento piuttosto che una singola resistenza condivisa. Questo garantisce una luminosità uniforme tra tutti i segmenti, indipendentemente da quanti siano accesi simultaneamente. Con una singola resistenza, la corrente sarebbe divisa in modo non uniforme, causando l'apparenza di alcuni numeri più deboli di altri.

Spiegazione del codice

Il codice per questo progetto è scritto da zero e non richiede alcuna libreria esterna. È progettato per essere semplice da configurare e adattare al tuo specifico display. Le principali parti configurabili dell'utente si trovano nella parte superiore del file.

#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

La prima linea è l'impostazione più critica. Devi impostare iltypevariabile per1se stai usando un display a catodo comune e0se stai utilizzando un display a catodo comune. Questo singolo valore informa il codice se invertire i segnali logici, assicurando che i segmenti corretti si accendano.

Le due righe successive definiscono i pin dell'Arduino collegati al display.displayPinsl'array contiene i numeri dei pin per i segmenti da A a G, edicimalPointdefinisce il pin per il punto decimale. Se desideri utilizzare pin diversi, puoi modificare questi valori, ma si consiglia di mantenerli in ordine sequenziale per semplicità.

Il codice include una funzione personalizzata,writeDigit(int digit), che è il modo principale per visualizzare un numero. Puoi chiamare questa funzione dal tuo codice per mostrare qualsiasi cifra da 0 a 9. Ad esempio, per visualizzare il numero 5, dovresti semplicemente chiamarewriteDigit(5);. La funzione gestisce l'attività complessa di cercare il modello di segmento corretto e impostare i pin di conseguenza. Un'altra funzione di supporto,convertHighLow(int v)gestisce la conversione logica tra display a catodo comune e anodo comune, quindi non devi preoccuparti della logica interna.

Dimostrazione del Progetto dal Vivo

Una volta completato il cablaggio e caricato il codice, l'Arduino inizierà a contare da 0 a 9, visualizzando ogni cifra per un secondo sul display a sette segmenti. Dopo aver raggiunto il 9, il punto decimale si accenderà per tre secondi prima che il conteggio ricominci. Come mostrato nel video, l'uso di resistori individuali garantisce che la luminosità delle cifre rimanga costante, sia visualizzando un singolo segmento (come il numero 1) sia tutti e sette i segmenti (come il numero 8). Questo è un miglioramento significativo rispetto all'uso di un singolo resistore, che causerebbe variazioni di luminosità evidenti.

Capitoli

  • Introduzione al Display a Sette Segmenti
  • [00:22] Comprendere i display a sette segmenti
  • [01:09] Cablaggio Anodo Comune vs. Catodo Comune
  • [03:25] Cablaggio passo dopo passo con resistori
  • [06:07] Considerazioni sulla dimostrazione e sulla luminosità
  • [08:26] Spiegazione del codice e configurazione
  • [14:25] Funzioni di Setup e Ciclo Principale
  • [16:33] Conclusione e Applicazioni

Immagini

Come utilizzare un display LED a sette segmenti con Arduino
Come utilizzare un display LED a sette segmenti con Arduino
Codice Arduino per aggiornare l'indirizzo I2C su VL53L0X
Codice Arduino per aggiornare l'indirizzo I2C su VL53L0X
Come utilizzare un display a sette segmenti LED con Arduino
Come utilizzare un display a sette segmenti LED con Arduino
Come utilizzare un display LED a sette segmenti con Arduino
Come utilizzare un display LED a sette segmenti con Arduino
Display LED 74HC595: Segmento Settembre spiegato
Display LED 74HC595: Segmento Settembre spiegato
558-Lesson 21: Using a Seven-Segment Display | Arduino Step-by-Step Course
Lingua: C++
/*
 *  Robojax Arduino Step-by-Step Course
 * Lesson 21: Seven-Segment Display
 * Display number on seven-segment display with Arduino

   Please watch video instruction here: https://youtu.be/pxUjEsJQW2M
   or watch this https://youtu.be/f3GqRMQ8jYs

 * Written by Ahmad Shamshiri for Robojax (Robojax.com)
 * on December 07, 2018 at 22:34 in Ajax, Ontario, Canada

 * 
  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */


#define type 1 // 0 for common cathode and 1 for common anode

const int displayPins[7] = {2,3,4,5,6,7,8}; // define pins
const int dicimalPoint = 9;// decimal point

// array for seven-segment LED values. Do not change. 
//This is used for both common anode and common cathode
byte displayLEDs[10][7] = { 
        { 0,0,0,0,0,0,1 },  // = 0
        { 1,0,0,1,1,1,1 },  // = 1
        { 0,0,1,0,0,1,0 },  // = 2
        { 0,0,0,0,1,1,0 },  // = 3
        { 1,0,0,1,1,0,0 },  // = 4
        { 0,1,0,0,1,0,0 },  // = 5
        { 0,1,0,0,0,0,0 },  // = 6
        { 0,0,0,1,1,1,1 },  // = 7
        { 0,0,0,0,0,0,0 },  // = 8
        { 0,0,0,0,1,0,0 }   // = 9     
        }; 
/*
 * 
 * @brief Writes digit to display 
 * @param digit (integer)
 * @return no return value
 * Written by Ahmad Shamshiri on Friday, December 7, 2018 for Robojax.com
 */        
void writeDigit(int digit) {
  // Robojax Seven-Segment Display for Arduino
  Serial.print(digit);
  Serial.print(" ");

   int digitValue;
  for (int i=0; i < 7; i++) 
  {

      digitalWrite(displayPins[i], convertHighLow(displayLEDs[digit][i]));// write the HIGH or LOW (depending on the type) to output pin
      Serial.print(convertHighLow(displayLEDs[digit][i]));// print the result to the Serial monitor

  }// for i
}//writeDigit ends here

/*
 * 
 * @brief Converts HIGH and LOW based on the "type" variable value
 * if type is 1, converts the "V" to LOW, or returns it as it is if type is 0 (zero)
 * @param v (integer)
 * @return the convertedValue
 * Written by Ahmad Shamshiri (Robojax.com) on Friday, December 8, 2018 for Robojax.com
 */  
int convertHighLow(int v)
{
  int convertedValue;
    if(type ==0)
    {
      convertedValue = 1 - v;// if common anode, change the HIGH to LOW and LOW to HIGH
    }else{
      convertedValue = v;// if common cathode, keep it the same
    } 

    return convertedValue;
}

void setup() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
  for(int d=0; d<8; d++)
  {
    pinMode(displayPins[d], OUTPUT);// set pin as output
    
  }
   pinMode(dicimalPoint,OUTPUT);// define a pin for decimal point
   digitalWrite(dicimalPoint,HIGH);// turn decimal point OFF. Set to LOW if common Anode and HIGH for common cathode

  Serial.begin(9600);// initialize serial monitor with 9600 baud
}// setup ends here


void loop() {
  // Robojax Seven-Segment Display for Arduino
//Robojax Arduino Step-by-Step Course http://robojax.com/L/?id=338  
 for (int i=0; i<=9 ; i++) {
   writeDigit(i); 
   Serial.println("=====");
   delay(1000);
  }
  digitalWrite(dicimalPoint,LOW);// turn decimal point ON
  delay(3000);
 // writeDigit(4);
  // delay(3000);

}// loop ends here

Cose di cui potresti avere bisogno

File📁

Altri file