Magos do Arduino

Biblioteca para display de Sete Segmentos

Aprenda a utilizar uma biblioteca para display de Sete Segmentos com o Arduino

Magos do Arduino

Biblioteca para display de Sete Segmentos

Bibliotecas ou drivers servem para reutilizar e isolar um código para controlar um dispositivo.

Display de Sete Segmentos

Precisamos de dois arquivos para sua criação, um .h para os headers e um .cpp para o código.

Uma vez criada a biblioteca, podemos a importar em nosso código e utilizá-la para controlar nosso componente.

Códigos da biblioteca para display de Sete Segmentos

Neste projeto você criará uma biblioteca para display de Sete Segmentos com o Arduino.

Para a criação deste circuito serão necessários os seguintes componentes:

  • 1x breadboard
  • 1x Arduino UNO
  • 1x Display de Sete Segmentos
  • 7x Resistores de 220-330 Ohms
  • Jumpers

Circuito Display de Sete Segmentos

Para montar o circuito, visualize na imagem a seguir como conectar os componentes entre a placa Arduino e a breadboard.

Circuito Display de Sete Segmentos

Schematics Display de Sete Segmentos

A seguir temos o schematics do circuito, que detalha suas conexões e fornece detalhes mais específicos do que o circuito da imagem anterior.

Schematics Display de Sete Segmentos

Para a criação da biblioteca, crie um projeto, e nela adicione dois arquivos, um .h e um .cpp, no mesmo diretório do projeto, para a implementação do código da biblioteca, conforme os códigos a seguir.

Código fonte do header da biblioteca para display de Sete Segmentos

/**
* Código do curso Magos do Arduino para criar uma biblioteca para controlar um 
* display de sete segmentos com Arduino.
* 
* Este código define o header da classe SeteSegmentos, 
* que é responsável por controlar um display de sete segmentos.
*
* (c) Copyright KazaleIT
* @kazaleitoficial no YouTube
**/

#ifndef SeteSegmentos_h
#define SeteSegmentos_h

#include "Arduino.h"

class SeteSegmentos {
    public:
    SeteSegmentos(int pinoA, int pinoB, int pinoC, int pinoD, int pinoE, int pinoF, int pinoG);
    void inicializar();
    void exibir(int numero);
    void limpar();
    void exibirNum0();
    void exibirNum1();
    void exibirNum2();
    void exibirNum3();
    void exibirNum4();
    void exibirNum5();
    void exibirNum6();
    void exibirNum7();
    void exibirNum8();
    void exibirNum9();
    private:
    int _pinoA;
    int _pinoB;
    int _pinoC;
    int _pinoD;
    int _pinoE; 
    int _pinoF;
    int _pinoG;
    byte _digitos[10][7] = {
        { 1, 1, 1, 1, 1, 1, 0 }, // 0
        { 0, 1, 1, 0, 0, 0, 0 }, // 1
        { 1, 1, 0, 1, 1, 0, 1 }, // 2 
        { 1, 1, 1, 1, 0, 0, 1 }, // 3
        { 0, 1, 1, 0, 0, 1, 1 }, // 4
        { 1, 0, 1, 1, 0, 1, 1 }, // 5
        { 1, 0, 1, 1, 1, 1, 1 }, // 6
        { 1, 1, 1, 0, 0, 0, 0 }, // 7
        { 1, 1, 1, 1, 1, 1, 1 }, // 8
        { 1, 1, 1, 1, 0, 1, 1 }  // 9
    };
};

#endif

Código fonte da implementação da biblioteca para display de Sete Segmentos

/**
* Código do curso Magos do Arduino para criar uma biblioteca para controlar um 
* display de sete segmentos com Arduino.
* 
* Este código implementa o header da classe SeteSegmentos, 
* que é responsável por controlar um display de sete segmentos.
*
* (c) Copyright KazaleIT
* @kazaleitoficial no YouTube
**/

#include "Arduino.h"
#include "SeteSegmentos.h"

SeteSegmentos::SeteSegmentos(int pinoA, int pinoB, int pinoC, int pinoD, int pinoE, int pinoF, int pinoG) {
    _pinoA = pinoA;
    _pinoB = pinoB;
    _pinoC = pinoC;
    _pinoD = pinoD;
    _pinoE = pinoE;
    _pinoF = pinoF;
    _pinoG = pinoG;
}

void SeteSegmentos::inicializar() {
    pinMode(_pinoA, OUTPUT);
    pinMode(_pinoB, OUTPUT);
    pinMode(_pinoC, OUTPUT);
    pinMode(_pinoD, OUTPUT);
    pinMode(_pinoE, OUTPUT);
    pinMode(_pinoF, OUTPUT);
    pinMode(_pinoG, OUTPUT);
}

void SeteSegmentos::exibir(int numero) {
    digitalWrite(_pinoA, _digitos[numero][0]);
    digitalWrite(_pinoB, _digitos[numero][1]);
    digitalWrite(_pinoC, _digitos[numero][2]);
    digitalWrite(_pinoD, _digitos[numero][3]);
    digitalWrite(_pinoE, _digitos[numero][4]);
    digitalWrite(_pinoF, _digitos[numero][5]);
    digitalWrite(_pinoG, _digitos[numero][6]);
}

void SeteSegmentos::limpar() {
    digitalWrite(_pinoA, LOW);
    digitalWrite(_pinoB, LOW);
    digitalWrite(_pinoC, LOW);
    digitalWrite(_pinoD, LOW);
    digitalWrite(_pinoE, LOW);
    digitalWrite(_pinoF, LOW);
    digitalWrite(_pinoG, LOW);
}

void SeteSegmentos::exibirNum0() {
    exibir(0);
}

void SeteSegmentos::exibirNum1() {
    exibir(1);
}

void SeteSegmentos::exibirNum2() {
    exibir(2);
}

void SeteSegmentos::exibirNum3() {
    exibir(3);
}

void SeteSegmentos::exibirNum4() {
    exibir(4);
}

void SeteSegmentos::exibirNum5() {
    exibir(5);
}

void SeteSegmentos::exibirNum6() {
    exibir(6);
}

void SeteSegmentos::exibirNum7() {
    exibir(7);
}

void SeteSegmentos::exibirNum8() {
    exibir(8);
}

void SeteSegmentos::exibirNum9() {
    exibir(9);
}

Código fonte para o circuito do display de Sete Segmentos usando a biblioteca criada

Uma vez criado o circuito e implementada a biblioteca, use o código fonte a seguir no Arduino IDE para fazer o upload dele na placa Arduino e assim ver o resultado do circuito em funcionamento.

/**
* Código do curso Magos do Arduino para criar uma biblioteca para controlar um 
* display de sete segmentos com Arduino.
*
* (c) Copyright KazaleIT
* @kazaleitoficial no YouTube
**/

#include "SeteSegmentos.h"

#define PINO_A 1
#define PINO_B 2
#define PINO_C 3
#define PINO_D 4
#define PINO_E 5
#define PINO_F 6
#define PINO_G 7

SeteSegmentos seteSegmentos(PINO_A, PINO_B, PINO_C, PINO_D, PINO_E, PINO_F, PINO_G);

void setup() {
    // inicializa os pinos do diplay de setesegmentos
    seteSegmentos.inicializar();

    // faz uma contagem regressiva de 9 a 0 e depois limpa o display
    seteSegmentos.exibirNum9();
    delay(500);
    seteSegmentos.exibirNum8();
    delay(500);
    seteSegmentos.exibirNum7();
    delay(500);
    seteSegmentos.exibirNum6();
    delay(500);
    seteSegmentos.exibirNum5();
    delay(500);
    seteSegmentos.exibirNum4();
    delay(500);
    seteSegmentos.exibirNum3();
    delay(500);
    seteSegmentos.exibirNum2();
    delay(500);
    seteSegmentos.exibirNum1();
    delay(500);
    seteSegmentos.exibirNum0();
    delay(500);
    seteSegmentos.limpar();
    delay(2000);
}

byte numero = 0;
void loop() {
    seteSegmentos.exibir(numero++);

    if (numero == 10) {
    numero = 0;
    }
    
    delay(1000);
}