Go Down

Topic: Problema al unit temporizador con sensor de temperatura (Read 571 times) previous topic - next topic

EGV

Hola buena noches no se si alguien me pueda ayudar con este problema:
Ya que quiero juntar mi programa de temporizador con el del sensor de temperatura pero cuando los uno el de temperatura se queda detenido sin actualizar la lectura.









Moderador:
Código borrado porque el forero posteo 2 veces el mismo código en diferentes secciones.

EGV

Hola a todos nuevamente, quisiera saber si me pueden ayudar al unir bien dos códigos. Uno de temporizador y otro de sensor de temperatura ya que cuando los uno yo me funciona bien el temporizador pero el de temperatura se queda sin actualizar la lectura.(Igual si necesitan otra cosa de información para entenderme mas o un poco mejor favor de decirme y muchas gracias).
Code: [Select]

#include "max6675.h"
#include <LiquidCrystal.h> //Libreria del display LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Inicializamos la libreria con el numero de los pines a utilizar

float temperatura=0; //Se crea una variable flotante para almacenar la temperatura

int rele = 10;           //Rele
int buzzer = 13;           //Alarma
int ahoras = 0;            //Variable a mostrar por LCD de las horas
int aminutos = 0;          //Variable a mostrar por LCD de los minutos
int asegundos = 0;         //Variable a mostrar por LCD de los segundos
int segundostotal = 0;     //Tiempo total
int msg= 0;                //Barrera para el mensaje de bienvenida

int start = A2;            //Pulsador de arranque
int empieza = 1024;        // Variable para almacenaje del pulsador de arranque

int buth = A5;             //Pulsador de Horas
int butm = A4;             //Pulsador de Minutos
int buts = A3;             //Pulsador de segundos

int varbuth = 0;           //Variable para almacenar el valor del pulsador de horas
int varbutm = 0;           //Variable para almacenar el valor del pulsador de minutos
int varbuts = 0;           //Variable para almacenar el valor del pulsador de segundos

//Se definen los pines a usar para conectar el modulo MAX6675

int ktcSO = 7;
int ktcCS = 8;
int ktcCLK = 9;

MAX6675 ktc(ktcCLK, ktcCS, ktcSO);

void setup()
{

//activa comunicacion serial.
  Serial.begin(9600);
  delay(500);

  
   lcd.begin(20, 4);         // Configuramos el numero de columnas y filas del LCD.

   pinMode(rele, OUTPUT);  //Pin de alarma --> Salida
   pinMode(buzzer, OUTPUT);  //Pin de alarma --> Salida
   pinMode(buth, INPUT);     //Pin de pulsador de horas --> Entrada
   pinMode(butm, INPUT);     //Pin de pulsador de minutos --> Entrada
   pinMode(buts, INPUT);     //Pin de pulsador de segundos --> Entrada
   pinMode(start, INPUT);    //Pin de pulsador de arranque --> Entrada
  
   msg = 0;                  //Barrera del mensaje de bienvenida
   empieza = 1024;           //Barrera de arranque
  
   varbuth = 1;              //Barrera de horas
   varbutm = 1;              //Barrera de minutos
   varbuts = 1;              //Barrera de segundos
}

void loop()
{
  
     if(msg==0)             //Mostramos el mensaje de bienvenida solo una vez
     {
       lcd.setCursor(5,0);
       lcd.print("Hola");
       lcd.setCursor(6,1);
       lcd.print("AUTOCLAVE");
       lcd.setCursor(0,4);
       lcd.print("EGV");
       delay(2500);
       msg = 1;
       lcd.clear();
     }

     //Leer temperatura.
   temperatura=ktc.readCelsius();
 //temperatura=ktc.readFahrenheit();
  
   //Enviar dato de temperatura por el puerto serial.
   Serial.print("Temperatura = ");
   Serial.print(temperatura);
   Serial.println(" C");
  
   //Mostrar dato de temperatura en LCD.
   lcd.clear();
   lcd.setCursor(0, 2);
   lcd.print("Temperatura: ");
   lcd.setCursor(2, 3);
   lcd.print(temperatura);
   lcd.setCursor(9, 3);
   lcd.print("C");
  
   //Pausa de medio segundo para repetir el proceso
   delay(300);

      
    

    
     //-------------------------------------------------------------------------------------------------    
     // LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR
     // EL BOTON DE ARRANQUE
    //-------------------------------------------------------------------------------------------------+++++++++++++++
     do                  
     {

        
       varbuth = analogRead(buth);   //Leemos boton de horas
       varbutm = analogRead(butm);   //Leemos boton de minutos
       varbuts = analogRead(buts);   //Leemos boton de segundos
      
       if(varbuth == 0)              //Si el boton ha sido pulsado, aumentamos las horas en una unidad
       {
        ahoras = ahoras + 1 ;
        delay(250);
       }
      
        if(varbutm == 0)            //Si el boton ha sido pulsado, aumentamos los minutos en una unidad
       {
         aminutos = aminutos + 1;
         delay(250);
       }
      
        if(varbuts == 0)            //Si el boton ha sido pulsado, aumentamos los segundos en una unidad
       {
         asegundos = asegundos + 1;
         delay(250);
       }
            
       lcd.setCursor(0,0);
       lcd.print("Elige el tiempo: ");  //Muestra mensaje y las HH:MM:SS que vayamos aumentando
      
       lcd.setCursor(6,1);    

      if (ahoras < 10) lcd.print("0");    // Si las horas son menor que 10, pone un "0" delante.
       lcd.print(ahoras);                 // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
       lcd.print(":");

      if (aminutos < 10) lcd.print("0");  // Si los minutos son menor que 10, pone un "0" delante.
       lcd.print(aminutos);               // Sin este codigo, se muestra asi: H:M:S  (H:1:S)

       lcd.print(":");
      if (asegundos < 10) lcd.print("0"); // Si los segundos son menor que 10, pone un "0" delante.
       lcd.print(asegundos);              // Sin este codigo, se muestra asi: H:M:S  (H:M:1)
      
       empieza = analogRead(start);   //Lee el boton de arranque
      
       if (empieza == 0)              //Si el boton de arranque, fue pulsado...
       {
        segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60);  //Convierte el tiempo elegido en segundos!!
       }
            
     } while(empieza != 0);  // Se repite el menu de elegir tiempo hasta que pulsemos el boton de arranque.
      
      //-------------------------------------------------------------------------------------------------
      // UNA VEZ PULSADO EL BOTON DE ARRANQUE Y ACUMULADO EL TIEMPO, ENTRA EN EL SIGUIENTE WHILE
      // Y NO FINALIZA HASTA TERMINAR LA CUENTA.
      //-------------------------------------------------------------------------------------------------
  
      while (segundostotal > 0)
      {
        delay (1000);          //Descontamos en periodos de 1 segundo
        segundostotal--;    
  
        ahoras = ((segundostotal / 60)/ 60);   //Convertimos los segundos totales en horas
        aminutos = (segundostotal / 60) % 60;  //Convertimos los segundos totales en minutos
        asegundos = segundostotal % 60;        //Convertimos los segundos totales en periodos de 60 segundos

        lcd.setCursor(0,0);
        lcd.print("Tiempo restante:");        //Mostramos mensaje de tiempo restante
 
        lcd.setCursor(6,1);
        if (ahoras < 10) lcd.print("0");     // Si las horas son menor que 10, pone un "0" delante.
        lcd.print(ahoras);                   // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
        lcd.print(":");

        if (aminutos < 10) lcd.print("0");   // Si los minutos son menor que 10, pone un "0" delante.
        lcd.print(aminutos);                 // Sin este codigo, se muestra asi: H:M:S  (H:1:S)

        lcd.print(":");
        if (asegundos < 10) lcd.print("0");  // si el valor de segundo esta por debajo de 9 (unidad) antepone un cero
        lcd.print(asegundos);                // Sin este codigo, se muestra asi: H:M:S  (H:M:1)
      
          if (segundostotal == 0)            //Si finaliza el tiempo
          {          
             while(1)                        //Bucle infinito mostrando mensaje y haciendo parpadear un led
             {              
                  lcd.clear();
                  lcd.setCursor(7,0);
                  lcd.print("Tiempo");
                  lcd.setCursor(5,1);
                  lcd.print("Finalizado");
                  lcd.setCursor(6,2);
                  lcd.print("RGV");
                  lcd.setCursor(17,3);
                  lcd.print("EGV");
              
                 digitalWrite(buzzer, HIGH);
                 delay(200);
                 digitalWrite(buzzer, LOW);
                 delay(200);

                 digitalWrite(rele, HIGH);
                
                
             }    
          }
     }    
}

Kike_GL

Hola EGV, debes editar tu mensaje y poner todo el codigo entre las etiquetas adecuadas. Lee las normas.

Si quieres que funcione mas de un loop() debes retirar el bucle infinito

Code: [Select]

//Bucle infinito mostrando mensaje y haciendo parpadear un led
while(1){             
   lcd.clear();
   lcd.setCursor(7,0);
   lcd.print("Tiempo");
   lcd.setCursor(5,1);
   lcd.print("Finalizado");
   lcd.setCursor(6,2);
   lcd.print("RGB");
   lcd.setCursor(17,3);
   lcd.print("EGV");
           
   digitalWrite(buzzer, HIGH);
   delay(200);
   digitalWrite(buzzer, LOW);
   delay(200);
   digitalWrite(rele, HIGH);
}   
Saludos, Kike_GL

surbyte

Que manera de reinicidir en las faltas a las normas!
Va tu 3er doble posteo.
Tienes un dia de baneo.

Go Up