Código de Pesquisa

Usando mais dois displays LED de 4 dígitos TM1637 com Arduino

Usando mais dois displays LED de 4 dígitos TM1637 com Arduino

Você já precisou mostrar dois valores diferentes ao mesmo tempo em seu projeto Arduino? Talvez você esteja construindo uma estação meteorológica que precisa exibir tanto a temperatura quanto a umidade, ou um monitor de fonte de alimentação que mostra tensão e corrente simultaneamente. Usar dois displays LED de 4 dígitos TM1637 é uma solução simples e econômica. Este guia mostrará como conectar e programar dois desses displays populares usando uma única placa Arduino, dando a você a capacidade de exibir informações independentes em cada tela. Você pode usar essa técnica para uma variedade de projetos, como:

  • Construindo um voltímetro de canal duplo para monitorar duas fontes de energia separadas.
  • Criando um cronômetro de contagem regressiva e um contador de voltas para o seu próximo projeto de corrida.
  • Exibindo a hora atual em um display e a temperatura ambiente no outro.
  • Fazendo um placar para jogos de dois jogadores.

Neste tutorial, nós iremos conectar dois módulos TM1637 a um Arduino Uno e executar um esboço de demonstração que mostra valores diferentes em cada display. O TM1637 utiliza uma interface de dois fios (CLK e DIO), o que significa que adicionar um segundo display requer apenas dois pinos digitais adicionais em seu Arduino. Vamos começar! (no vídeo às 00:00)

Hardware Requerido

  • Arduino Uno (ou qualquer placa compatível)
  • 2x módulos de display LED de 7 segmentos de 4 dígitos TM1637
  • Fios de jumper
  • Placa de ensaio (opcional, mas útil para protótipos)

Manual de Fiação

Conectar os displays é simples. O módulo TM1637 tem quatro pinos: VCC, GND, DIO (dados) e CLK (clock). Ambos os displays compartilham as conexões de 5V e GND do Arduino, mas cada um precisa de pinos dedicados para DIO e CLK. Isso permite que o Arduino os controle de forma independente. (no vídeo às 01:26)

Aqui está o diagrama de fiação para o projeto:

Para o primeiro display (o módulo azul maior no vídeo), faça as seguintes conexões:

  • VCCpara Arduino5V
  • GNDpara ArduinoGND
  • DIOpara pino digital Arduino11
  • CLKpara o pino digital do Arduino10

Para o segundo display (o módulo menor), conecte-o da seguinte forma:

  • VCCpara Arduino5V
  • GNDpara ArduinoGND
  • DIOpara pino digital do Arduino6
  • CLKpara o pino digital do Arduino5

Lembre-se, o código e a biblioteca funcionam da mesma forma para os módulos TM1637 maiores e menores. (no vídeo às 01:00)

Explicação do Código

O código usa oTM1637Displaybiblioteca, que você precisará instalar. Você pode fazer isso acessandoEsboço > Incluir Biblioteca > Gerenciar Bibliotecasno Arduino IDE e procurando por "TM1637". O código define os pinos para cada display e cria dois objetos para controlá-los. Vamos olhar as partes principais que você precisará configurar para seu próprio uso. (no vídeo às 02:31)

Primeiro, as definições dos pinos para cada módulo de display. Você precisará alterar isso para corresponder à sua fiação:

// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6

// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11

Próximo, oTEST_DELAYa variável controla por quanto tempo cada sequência de teste é exibida. Você pode ajustar isso para acelerar ou desacelerar a demonstração:

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   5000

A parte principal do código utiliza oshowNumberDec()função. Esta função tem quatro argumentos: o número a ser exibido, se deve preencher os dígitos iniciais vazios com zeros, quantos dígitos usar e a posição inicial do número na exibição. Por exemplo,display1.showNumberDec(23, false, 2, 0)mostrará o número "23" começando na posição 0. Alterando o último argumento para 1, 2 ou 3, você pode mover o número pelo display. (no vídeo às 05:23)

Para adicionar um terceiro display, você simplesmente copiaria o bloco de código de um display, trocaria todos os "2" por "3" e atribuiria dois novos pinos para as conexões CLK e DIO do novo módulo. (no vídeo às 03:58)

Demonstração de Projeto Ao Vivo

Depois de carregar o código, você verá os dois displays ligarem e limparem suas telas. A demonstração então passa por uma série de testes para mostrar como cada display pode ser controlado independentemente. Primeiro, mostrará os números "23" e "34" nos dois displays. O código então cicla colocando esses números em diferentes posições no display de 4 dígitos (posição 0, 1, 2 e 3). Depois disso, exibe os números maiores "741" e "1562". Finalmente, executa um loop de contagem de 0 a 1273 em ambos os displays simultaneamente. Isso demonstra a plena funcionalidade de usar dois displays em um único projeto. (no vídeo em 05:01)

Capítulos

  • [00:00] Introdução ao uso de dois displays TM1637
  • Conectando os displays ao Arduino
  • [02:31] Explicando o código
  • [05:01] Demonstração dos displays em ação

Imagens

Usando mais dois displays LED de 4 dígitos TM1637
Usando mais dois displays LED de 4 dígitos TM1637
168-Using two more TM1637 4-digit LED displays
Idioma: C++
/*
 * Original code from https://github.com/avishorp/TM1637
 * Modified for Robojax video on October 28, 2018 at 15:05
 * This is an Arduino sketch to use two or more TM1637 seven-segment LED displays
 * 
 * Watch video instruction for this code:https://youtu.be/27KjMfPH1dk
 * 
 * by Ahmad Shamshiri, in Ajax, Ontario, Canada
 * 
 *  display2.showNumberDec(23, true, 2,1);
 *  showNumberDec(arg1, arg2, arg3, arg4);
 *  arg1 is the number to be displayed
 *  arg2 can be 'true' or 'false' and if true it fills empty spots with data[]
 *  arg4 position of starting number on the display can be either 0, 1, 2 or 3
 */
#include <Arduino.h>
#include <TM1637Display.h>

// Module 1 connection pins (Digital Pins)
#define CLK1 5
#define DIO1 6

// Module 2 connection pins (Digital Pins)
#define CLK2 10
#define DIO2 11

// The amount of time (in milliseconds) between tests
#define TEST_DELAY   5000


TM1637Display display1(CLK1, DIO1);// define display 1 object
TM1637Display display2(CLK2, DIO2);// define display 1 object

   uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 };  // all segments clear    
   
void setup()
{
  // Robojax.com two or more TM1637 Display 20181029  
  display1.setBrightness(0x0f);// set brightness of display 1
  display2.setBrightness(0x0f);// set brightness of display 1  

 
  display1.setSegments(data);// fill display 1 with whatever data[] array has
  display2.setSegments(data);// // fill display 2 with whatever data[] array has  
// Robojax.com two or more TM1637 Display 20181029  
}

void loop()
{
 // Robojax.com two or more TM1637 Display 20181029
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,0);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,0);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
  
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,1);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,1);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,2);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,2);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds
/////////////////////////////////////////////////
  display1.setSegments(data); // fill(clear) display with data[] array    
  display1.showNumberDec(23, false, 2,3);

  display2.setSegments(data);// fill(clear) display with data[] array
  display2.showNumberDec(34, false, 2,3);
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds    
/////////////////////////////////////////////////
  display1.setSegments(data);// fill(clear) display with data[] array
  display1.showNumberDec(741);// display 1

  display2.setSegments(data);// fill(clear) display with data[] array  
  display2.showNumberDec(1562);// display 2
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds

// Robojax.com two or more TM1637 Display 20181029 
/////////////////////////////////////////////////
   display1.setSegments(data);// fill(clear) display 1 with data[] array
   display2.setSegments(data);// fill(clear) display 2 with data[] array   
  for(int i=0; i<=1273; i++)
  {
    display1.showNumberDec(i);// display from 0 to 1273 to display 1
    display2.showNumberDec(i);// display from 0 to 1273 to display 2    
  }
  delay(TEST_DELAY);// wait for TEST_DELAY milliseconds


// Robojax.com two or more TM1637 Display 20181029
  
}// loop end

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Bibliotecas do Arduino (zip)

Arquivo Fritzing

Manual do Usuário