Bem-vindo, Visitante
Nome do utilizador: Senha:
Eletronica Digital, Microcontroladores, Robótica e Automação

TÓPICO: Arduino pantalla TM1637

Arduino pantalla TM1637 25 Jan. 2021 23:15 #1

Hola tengo este circuito de Arduino que es un termómetro , con el display TM1637 quiero modificar el 4 dígito del display para que me marque una C de temperatura , les pongo el código me pueden decir como se modifica o que linea tengo que modificar gracias . Les pongo la foto del display como se ve.
el codigo es el siguiente.

#include <TM1637Display.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Module connection pins (Digital Pins)
#define CLK 4
#define DIO 3
#define ONE_WIRE_BUS 2

const uint8_t SEG_ERR[] = {
0x0, 0x0,
SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol
SEG_A | SEG_F | SEG_E | SEG_D, // C
};

TM1637Display display(CLK, DIO);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
display.setBrightness(0x02);
sensors.begin();
if (sensors.getDS18Count() == 0)
display.setSegments(SEG_ERR);
else
sensors.setResolution(12);
}

void loop() {
if (sensors.getDS18Count() != 0) {
sensors.requestTemperatures();
double temp = sensors.getTempCByIndex(0);
display.showNumberDecEx(temp * 100, 0b01000000, false);
}
delay(1000);
}
Anexos:
Última Edição: 25 Jan. 2021 23:18 por voltios220.

Arduino pantalla TM1637 26 Jan. 2021 10:18 #2

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1559
Cada digito terá segmentos (ABCDEFG), o que se pretende é que o último tenha ligado o C.
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,  // Circulo
  SEG_A | SEG_D | SEG_E | SEG_F   // C
};

Assim, o nosso código para os dígitos
// Cria objeto para TM1637Display:
TM1637Display display = TM1637Display(CLK, DIO);
// Cria linha de elementos (array) a ON:
const uint8_t data[] = {0xff, 0xff, 0xff, 0xff};
// Cria linha de elementos (array) a OFF:
const uint8_t blank[] = {0x00, 0x00, 0x00, 0x00};
// Podemos selecionar e fixar cada uma dos segementos:
// Neste exemplo vai aparecer a palavra "dOnE"
const uint8_t done[] = {
  SEG_B | SEG_C | SEG_D | SEG_E | SEG_G,           // d
  SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F,   // O
  SEG_C | SEG_E | SEG_G,                           // n
  SEG_A | SEG_D | SEG_E | SEG_F | SEG_G            // E
};
// Cria o simbolo "ºC" grau celsius:
const uint8_t celsius[] = {
  SEG_A | SEG_B | SEG_F | SEG_G,  // Circulo
  SEG_A | SEG_D | SEG_E | SEG_F   // Letra C
};

// Cria o simbolo "C", Celsiu:
const uint8_t celsiu[] = {
  SEG_A | SEG_D | SEG_E | SEG_F   // Letra C
};



void setup() {
  // Limpa o display:
  display.clear();
  delay(1000);
}
void loop() {
  // Define o Brilho:
  display.setBrightness(7);
  // Liga todos os segmentos:
  display.setSegments(data);
  delay(1000);
  display.clear();
  delay(1000);
  // Mostra contagem:
  int i;
  for (i = 0; i < 101; i++) {
    display.showNumberDec(i);
    delay(50);
  }
  delay(1000);
  display.clear();
  delay(1000);
  // Mostra o número em posições diferentes duas vezes:
  int j;
  for (j = 0; j < 2; j++) {
    for (i = 0; i < 4; i++) {
      display.showNumberDec(i, false, 1, i);
      delay(500);
      display.clear();
    }
  }
  
  delay(1000);
  display.clear();
  delay(1000);
  // Define brilho (0-7):
  int k;
  for (k = 0; k < 8; k++) {
    display.setBrightness(k);
    display.setSegments(data);
    delay(500);
  }
  delay(1000);
  display.clear();
  delay(1000);
  // Mostra 1234 com o ponto de separação:
  display.showNumberDecEx(1234, 0b11100000, false, 4, 0);
  delay(1000);
  display.clear();
  delay(1000);
  int temperature = 24;
  display.showNumberDec(temperature, false, 2, 0);
  display.setSegments(celsius, 2, 2);
  delay(1000);
  display.clear();
  delay(1000);
  display.setSegments(done);
  while(1);
}

Este exemplo pode facilmente ser adaptado para o código com o ds18b20

No final do código apenas temos de modificar a última rotina
void loop() {
if (sensors.getDS18Count() != 0) {
sensors.requestTemperatures();
double temp = sensors.getTempCByIndex(0);
display.showNumberDecEx(temp * 100, 0b01000000, false);
}
delay(1000);
} 

Os digitos são definidos por

Para o display com "." PONTO de separação:

0b10000000 - 0.000
0b01000000 - 00.00
0b00100000 - 000.0
0b11100000 - 0.0.0.0

Com ":" DOIS PONTOS:

0b01000000 - 00:00

Com "." PONTO e ":" DOIS PONTOS:

0b11100000 - 0.0:0.0

Para e temos de definir a variável Celsiu que coloca a letra C no final
void loop() {
if (sensors.getDS18Count() != 0) {
sensors.requestTemperatures();
double temp = sensors.getTempCByIndex(0);
display.showNumberDecEx(temp * 100, 0b01000000, 3, 0);
display.setSegments(celsiu, 3, 1);
}
delay(1000);
} 

Definição do display é dado por:

setSegments(segments[ ], length, position)

Definição dos valores

showNumberDec(number, leading_zeros, length, position)

Assim, apenas temos de definir a letra C "Celsiu" e alterar a saída do display
Última Edição: 26 Jan. 2021 10:45 por Rui.

Arduino pantalla TM1637 26 Jan. 2021 17:41 #3

gracias por contestarme , no consiguió poner la letra C en el ultimo digito , pienso que estoy haciendo algo mal .Según entendí copie esto al sketch display.showNumberDecEx(temp * 100, 0b01000000, 3, 0);
display.setSegments(celsiu, 3, 1); y me da este error.
Me dice que temp was not declared in this cope
Anexos:
Última Edição: 26 Jan. 2021 17:42 por voltios220.

Pesquisar Esquemas | Dicas Defeito | Equivalência Componentes | Modelo v Chassis | Service Mode |
Enviar Esquema