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

TÓPICO: Arduino Termómetro TM1637

Arduino Termómetro TM1637 30 Nov. 2020 21:28 #1

Hola tengo este circuito de Arduino que muestra la temperatura con el display TM1637 y el sensor DS18B20 , el 3 digito del display muestra los grados , como se puede modificar el programa para que marque los decimales , yo quiero que ponga 25.3 , le pongo las líneas del cogido , haber si alguien me dice como se programa para que el 3 digito marque el decimal .

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

#define ONE_WIRE_BUS 8 //Digital Pin to connect the DS18B20 Sensor

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);
DeviceAddress sensor1;

TM1637Display display(2,3);

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

unsigned int temperature = 0;
byte PreviousValue = 0;

void setup()
{
sensors.begin();
display.setBrightness(7); // set display to maximum brightness

if (!sensors.getAddress(sensor1, 0))
{
Serial.println("Sensor not found!");
}
}

void loop()
{
//Request sensor data
sensors.requestTemperatures();
int tempC = sensors.getTempC(sensor1); //Read temperature of DS18B20 Sensor

if(tempC != PreviousValue)
{
PreviousValue = tempC;
display.setSegments(DEGREES); //Display the Variable value
display.showNumberDec(tempC,false,2,0);
delay(2000);
}
}
Anexos:

Arduino Termómetro TM1637 30 Nov. 2020 22:35 #2

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1558
esta parte do código define os display são 4
const uint8_t DEGREES[] = {
0x0, 0x0,
SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol
SEG_A | SEG_F | SEG_E | SEG_D, // C
};
0x0 e 0x0 --->são os dois primeiros
SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol -->acende os leds ABGF da imagem seguinte
SEG_A | SEG_F | SEG_E | SEG_D, // C --> acende os leds AFED da imagem seguinte


Primeiro alteramos este código para
const uint8_t DEGREES[] = {
0x0, 0x0, 0x0,
SEG_A | SEG_B | SEG_G | SEG_F, // Degree Symbol
};


no final temos a referencia do que vai para os digitos
display.showNumberDec(tempC,false,2,0);

Isto faz com que apareçam dois dígitos e nós precisamos de 2,1
basta alterar para
display.showNumberDec(tempC,false,3,0);

Fez esta pergunta no forum do arduino em Feb 17 e ninguém respondeu

Função showNumberDec()

Esta função serve para mostrar valores no display seguindo os seguintes parâmetros:

1º parâmetro: Número do tipo inteiro. Valores de 0 até 9999;

2º parâmetro: Verdadeiro ou falso. Serve para exibir zeros à esquerda pra valores até 999. O valor padrão é falso.

3º parâmetro: Opcional. Corresponde ao número de dígitos a serem exibidos

4º parâmetro: Opcional. Posição do dígito menos significativo (0 mais à esquerda, 3 - mais à direita).

shownumberdec.png


Pode por isso testar com várias opções
O problema aqui é a ,(virgula).
Se for 25,4 colocamos o valor 254 e acendemos o ponto de forma permanente. Mas, neste caso o TM1637 é para relógio, apenas tem os pinos centrais não existindo o "ponto" ou "virgula", por isso, nunca vai conseguir fazer o termometro com o TM1637


tm1637.png




TM1637, aqui fica o datasheet

Ficheiro anexado:

Nome do Ficheiro: robojax-TM1637_display_manual.pdf
Tamanho do Ficheiro: 316 KB
Última Edição: 30 Nov. 2020 23:01 por Rui. Motivo: correção

Termómetro Arduino TM1637 01 Dez. 2020 08:04 #3

gracias por toda la información , ya voy entendiendo un poco como trabaja el display tm1637 , modifique las líneas que usted me mando , lo cargue el código y ahora marca 19 º , el 3 digito no se enciende , lo del punto me da igual , yo quiero que salga como usted dice
Si es 25.4 ponemos el valor 254 eso como se hace para que lea el decimal del sensor ds18b20 ,ese valor donde tengo que ponerlo , me podría ayudar

Termómetro Arduino TM1637 01 Dez. 2020 12:11 #4

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1558
quando se lê a temperatura do sensor
sensors.requestTemperatures();
int tempC = sensors.getTempC(sensor1); //Read temperature of DS18B20 Sensor


int --> significa o valor inteiro sem casas decimais,
ler ... int ---> Arduino

Antes de testar outro código, remova int do código original e experimente

...código com erro removido

Vários exemplos de como conseguir valores com casas decimais
lastminuteengineers.com/multiple-ds18b20-arduino-tutorial/

forum.arduino.cc/index.php?topic=604912.0

neste sensor o numero de casa decimais é definido "resolution"
   Serial.println(dsTemp, 1);  //1-digit precision
  //Serial.println(dsTemp, 2);  //2-digit precision
  //Serial.println(dsTemp, 3);  //3-digit precision
  //Serial.println(dsTemp, 4);  //4-digit precision

No link acima tem um processo para definir o número de casas decimais
void loop(void)
{
  sensors.setResolution(9);  //before each measurement, set resolution
  //sensors.setResolution(10);
  //sensors.setResolution(11);
  //sensors.setResolution(12);
  sensors.requestTemperatures();  // Temp conversion command; waiting here until comversion is done
  dsTemp = sensors.getTempCByIndex(0);  //read temp data from Sensor #0 and convert to celsius float
 
  Serial.println(dsTemp, 1);  //1-digit precision
  //Serial.println(dsTemp, 2);  //2-digit precision
  //Serial.println(dsTemp, 3);  //3-digit precision
  //Serial.println(dsTemp, 4);  //4-digit precision
  delay(1000);    //sample temperature at 1-sec interval
}

Neste ciclo terád e alterar a variável dsTemp para TempC
Última Edição: 01 Dez. 2020 14:35 por Rui. Motivo: alteração de informação incorreta

Termómetro Arduino TM1637 01 Dez. 2020 13:57 #5

Hola al modificar el código me dice "temp"was not declared in this scope , como lo puedo solucionar .Le mando las fotos .
Anexos:

Termómetro Arduino TM1637 01 Dez. 2020 14:32 #6

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1558
opppps!!! erro meu
neste caso o int é de "integer" e define a variável, tem de ser usado

tem de usar os exemplo que estão no link
forum.arduino.cc/index.php?topic=604912.0

e definir a resolution
Os seguintes utilizadores Agradeceram: voltios220

Termómetro Arduino TM1637 03 Dez. 2020 07:34 #7

Hola encontré este código por internet para activar el decimal , esto como lo puedo adaptar al código que puse arriba.
// Programa general donde hacemos un Contador de 0 a 99
void loop(){

int unidades = 0;
int decenas =0;

while (decenas&amp;lt;=9){
while(unidades&amp;lt;=9){
Decimal(decenas, unidades, 10);
//10+10 milis por turno
unidades++;
}
unidades = 0;
decenas++;
}
decenas=0;
}

Termómetro Arduino TM1637 03 Dez. 2020 11:23 #8

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1558
Este ciclo(loop) apenas tem unidades e dezenas, não tem decimais

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