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

TÓPICO: Reloj - Fecha - Termómetro con DS18B20, DS1307, 4 dígitos LED .

Reloj - Fecha - Termómetro con DS18B20, DS1307, 4 dígitos LED . 01 Dez. 2021 14:24 #1

Hola como puedo modificar el codigo de este circuito para que me pueda mostrar la temperatura con el numero decimal.
Anexos:
Última Edição: 01 Dez. 2021 14:24 por voltios220.

Reloj - Fecha - Termómetro con DS18B20, DS1307, 4 dígitos LED . 01 Dez. 2021 14:54 #2

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1558
Hola,

Esse código é relógio + termómetro, precisa do termómetro apenas ou de ambos?

Veja este código se for apenas para medir temperatura
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;
const int ledPin = 13;// LED connected to digital pin 13
const int latchPin = 8;// Pin connected to ST_CP of 74HC595
const int clockPin = 9;// Pin connected to SH_CP of 74HC595
const int dataPin = 10;// Pin connected to DS of 74HC595
const int digitPins[4] = {3,4,5,6}; //pins to control the 4 common anode pins of display
const byte digit[12] = //seven segment digit bits + blank + minus
{
B00111111, //0
B00000110, //1
B01011011, //2
B01001111, //3
B01100110, //4
B01101101, //5
B01111101, //6
B00000111, //7
B01111111, //8
B01101111, //9
B00000000, //Blank
B01000000 //-
};
int digitBuffer[4] = {
1};
int digitScan = 0;
int soft_scaler = 0;
float tempC, tempF;
int tmp;
boolean sign = false;
void setup() {
TCCR2A = 0;
TCCR2B = (1<<CS21);
TIMSK2 = (1<<TOIE2);
TCNT2 = 0;
pinMode(ledPin, OUTPUT);
for(int i=0;i<4;i++)
{
pinMode(digitPins[i],OUTPUT);
}
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
sensors.begin();
sensors.getAddress(insideThermometer, 0);
}
ISR(TIMER2_OVF_vect) {
soft_scaler++;
if(soft_scaler==15)
{
refreshDisplay();
soft_scaler = 0;
}
};
void refreshDisplay()
{
for(byte k=0;k<4;k++)
{
digitalWrite(digitPins[k], LOW);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, B11111111);
digitalWrite(latchPin, HIGH);
delayMicroseconds(50);
digitalWrite(digitPins[digitScan], HIGH);
digitalWrite(latchPin, LOW);
if(digitScan==1)
{
shiftOut(dataPin, clockPin, MSBFIRST, ~(digit[digitBuffer[digitScan]] | B10000000)); 
}
else
{
shiftOut(dataPin, clockPin, MSBFIRST, ~digit[digitBuffer[digitScan]]);
}
digitalWrite(latchPin, HIGH);
digitScan++;
if(digitScan>3) digitScan=0;
}
void loop()
{
digitalWrite(ledPin, HIGH);
sensors.requestTemperatures();
tempC = sensors.getTempC(insideThermometer);
tmp = int(tempC*10);
if (tempC < 0){
sign = true;
tmp = abs(tmp);
}
else{
sign = false;
}
if (int(tmp)/1000 == 0){
digitBuffer[3] = 10;
if (sign){
digitBuffer[3] = 11;
}
}
else{
digitBuffer[3] = int(tmp)/1000;
}
if (int(tmp)/1000 == 0 && (int(tmp)%1000)/100 == 0) {
digitBuffer[2] = 10;
if (sign){
digitBuffer[2] = 11;
digitBuffer[3] = 10;
}
}
else{
digitBuffer[2] = (int(tmp)%1000)/100;
}
digitBuffer[1] = (int(tmp)%100)/10;
digitBuffer[0] = (int(tmp)%100)%10;
digitalWrite(ledPin, LOW);
delay(500);
}

Fonte: how2electronics.com/ds18b20-thermometer-arduino-segment-display/
Última Edição: 01 Dez. 2021 14:57 por Rui.

Reloj - Fecha - Termómetro con DS18B20, DS1307, 4 dígitos LED . 01 Dez. 2021 21:37 #3

Le mando el video con lo que hace , yo quiero que cuando muestre la temperatura sea con el decimal ejemplo 17,5C .
Anexos:
Última Edição: 01 Dez. 2021 21:44 por voltios220.

Reloj - Fecha - Termómetro con DS18B20, DS1307, 4 dígitos LED . 01 Dez. 2021 22:37 #4

  • Rui
  • Avatar de Rui
  • DESLIGADO
  • membro há mais de 17 anos top5 em número de mensagens
  • pt  
  • Mensagens: 6410
  • Agradecimentos 1558
Deverá remover a conversão da temperatura em número inteiro
alterar linha (498):
t1 = temp1;  //Convert the temperature to int for display
Para:
//t1 = temp1;  //Convert the temperature to int for display

alterar o código para do display de linha (504)
 if (t1 >= 10)
    {
      data[0] = (t1 / 10);                  //Calculate and store temperature 10s value
      data[1] = (t1 % 10);                  //Calculate and store temperature 1s value.
      data[2] = 10;                        //Degree symbol
      data[3] = 11;                        //Letter C for Celcius
    }

para:
 if (t1 >= 10)
    {
      data[0] = (t1 / 10);  //Calcula e grava temperatura décimas
      data[1] = (t1 % 10);  //Calcula e grava temperatura unidad.
      data[2] = 15;        //em branco
      data[3] = (t1 / 100);   //centésimas
    }

Fazer as alterações para as outras condições temperaturas negativas linha (522)

O data[2] deve ter o código para o ponto desse display alfanumérico, adicionar o ponto na definição linha (18) DP1 ou DP2
byte digits[21] = {  //Bit pattern for 7 segment display
  // -ABCDEFG            Segments labelled as per datasheet for Kingbright DA56-11EW dual common anode LED display module.
  B10000001,  // 0     1 represents segment OFF, 0 is ON
  B11001111,  // 1     the MSB is not used.
  B10010010,  // 2
  B10000110,  // 3
  B11001100,  // 4
  B10100100,  // 5
  B10100000,  // 6
  B10001111,  // 7
  B10000000,  // 8
  B10000100,  // 9
  B10011100,  // Degree symbol
  B10110001,  // Letter C
  B11111110,  // - Symbol
  B10011111,  //  Letter E
  B11100011,   // u
  B11111111,   // Blank (OFF)
  B11110000,   // t
  B11101010,   // n
  B11000010,   // d
  B11100010,   // a
  B11111110,   // -
};

teremos de adicionar o DP1 e DP2, assim,

B00000001 //DP1

se adicionarmos no fim será o digito 22 podemos então colocar o ponto em vez do espaço alterando a condição da linha
data[2] = 15;        //em branco
para
data[2] = 22;        //com o ponto dp
Última Edição: 02 Dez. 2021 19:45 por Rui. Motivo: correção

Reloj - Fecha - Termómetro con DS18B20, DS1307, 4 dígitos LED . 02 Dez. 2021 07:56 #5

Muchas gracias por su información ya lo tengo solucionado.

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