Falaí galera blz?!

Estou desenvolvendo um programa para controle de um ar condicionado artesanal...

Já esta tudo funcionado direitinho, mas, eu tô com um problema:

Fiz um menu pra poder chamar e programar meu ar condc. mas, quando chamo uma função "x" por exemplo, a função "y" deixa de executar o que foi programado...

Gostaria de saber se tem como, mesmo chamando outra função, manter aquela primeira executando o que se espera dela...

KKKK... Eu fui claro?

Segue o código...

Obs.:  O código ainda vai ser retificado, tem muita melhoria ainda a ser feita...

Abraços!!!

// bilbliotecas auxiliares
#include <LiquidCrystal_I2C.h>
#include <Arduino.h>
#include <IRremote.h>
#include <Wire.h>
#include <Limits.h>

//Mapeamento de Hardware
#define fan       13
#define butUp     12
#define butDown   11
#define butP      10
#define incPin    10
#define button2   10
#define button1    9
#define butM       9
#define decPin     9
#define button1    9
#define buttonPin  8
#define Lamp1      4
#define Lamp2      2
#define ledPin     3
#define sensor     A0
#define sensorTemp A0
#define ligado     6
#define desligado  7
 
//protótipo das funções auxiliares
void changeMenu();
void dispMenu();
void data_hora();
void changetemp();
void lights();
void Incremento();
void program();

//Varáveis Globais

    int tempPin = 0;
    int valorSensorTemp = 0;
    int valorTemp = INT_MAX;
    int Soma = 1;
    int conta = 0;
    int val = 0;
    int incButton = LOW;
    int decButton = LOW;
    int segundo,minuto, hora, dia, mes,ano;
    unsigned long UtlTime;
    byte maxC = 0, minC = 100, maxF = 0, minF = 212;
    char menu = 0x01;
    char set1 = 0x00, set2 = 0x00;
    boolean t_butUp, t_butDown, t_butP, t_butM;
    unsigned int debounceDelay_button = 100;          // Tempo de debounce do Botao
    unsigned int Flagbutton2;                         // Variavel que identifica o "status" do botao
    unsigned int Flagbutton1;                         // Variavel que identifica o "status" do botao
 

//Hardwarw do LCD
LiquidCrystal_I2C disp(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Configurações iniciais
void setup()              
{
      pinMode(fan, OUTPUT);  
      pinMode(button1, INPUT_PULLUP);
      pinMode(button2, INPUT_PULLUP);
      pinMode(incPin, INPUT);
      pinMode(decPin, INPUT);
      pinMode(ledPin, OUTPUT);
      analogWrite(ledPin, 0);
  digitalWrite(Lamp1, LOW);
  digitalWrite(Lamp2, LOW);
  //setup do relógio:
UtlTime=0;   
minuto=0;   
hora=0;   
dia=0;   
mes=0;   
ano=0;   
Serial.begin(9600);   
disp.begin(16, 2);      

disp.setCursor(0,0);   
disp.print(" Tecnologia ");   
disp.setCursor(0,1);   
disp.print(" ArECO ");   
delay (2000);

//Configura o minuto   
disp.clear();   
disp.setCursor(0,0);   
disp.print("Minuto: ");   
Serial.print("\nEntre Minuto:");  
while(minuto==0)   {     
if (Serial.available() > 0)     
{       
minuto= Serial.parseInt();     
}   
}   
disp.print(minuto);   
delay(1000);

//Configura a hora   
disp.clear();   
disp.setCursor(0,0);   
disp.print("Hora: ");   
Serial.print("\nEntre Hora:");
while(hora==0)   
{     
if (Serial.available() > 0)     
{       
hora= Serial.parseInt();     
}   
}   
disp.print(hora);   
delay(1000);   

//Configura o Dia   
disp.clear();   
disp.setCursor(0,0);   
disp.print("Dia: ");   
Serial.print("\nEntre Dia:");   
while(dia==0)   
{     
if (Serial.available() > 0)     
{       
dia= Serial.parseInt();     
}   
}   
disp.print(dia);   
delay(1000);   

//Configura o mês   
disp.clear();   
disp.setCursor(0,0);   
disp.print("Mes: ");   
Serial.print("\nEntre Mes:");  
while(mes==0)   
{     
if (Serial.available() > 0)     
{       
mes= Serial.parseInt();     
}   
}   
disp.print(mes);   
delay(1000);   

//Configura o Ano   
disp.clear();   
disp.setCursor(0,0);   
disp.print("Ano: ");   
Serial.print("\nEntre ano:");   
while(ano==0)   
{     
if (Serial.available() > 0)     
{       
ano= Serial.parseInt();     
}   
}   
disp.print(ano);   
delay(1000);   

disp.clear();// end setup relógio

  disp.begin(16,2);
  disp.clear();
  analogReference(INTERNAL);
  disp.backlight();
 
  for (char i=8; i<13; i++)pinMode(i, INPUT_PULLUP);
 
  pinMode(Lamp1, OUTPUT);
  pinMode(Lamp2, OUTPUT);
 
  t_butUp   = 0x00;
  t_butDown = 0x00;
  t_butP    = 0x00;
  t_butM    = 0x00;
 
} //end setup

//loop infinito
void loop()
{
    changeMenu();
    dispMenu();
   

    
}//end loop

//desenvolvimento das funções auxiliares
void changeMenu()                              //modifica o menu atual
{
  if (!digitalRead(butUp))  t_butUp   = 0x01;  //Botão Up pressionado? seta flag
  if (!digitalRead(butDown))t_butDown = 0x01;  //Botão Down pressionado? Seta flag
 
  if (digitalRead(butUp) && t_butUp)   //Botão Up solto flag setada?
    {                                          //Sim...
    t_butUp = 0x00;                            //Limpa flag
    
    disp.clear();                           
    menu++;
    
    if (menu > 0x05) menu = 0x01;

  } //end butUp
 
 
    if (digitalRead(butDown) && t_butDown)
  {
    t_butDown = 0x00;
    
    disp.clear();
    menu--;
    
    if (menu < 0x01) menu = 0x05;
    
  } //end butDown
}//end changeMenu

  void dispMenu()
  {
    switch(menu)
    {
      case 0x01:
            data_hora();
            
            break;
      case 0x02:
            changetemp();
            
            break;
      case 0x03:
            lights();
      
            break;
      case 0x04:
            incremento();
      
            break;           
      case 0x05:
            program();
      
            break;
    }//end switch menu
  }//end dispMenu
 

  void data_hora()
{
    if(millis()-UtlTime<0)   
{     
UtlTime=millis();   
}   
else   
{     
segundo=int((millis()-UtlTime)/1000);   
}   
if(segundo>59)   
{     
segundo=0;     
minuto++;     
UtlTime=millis();     
if(minuto>59)     
{       
hora++;       
minuto=0;       
if(hora>23)       
{         
dia++;         
hora=0;         
if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12)         
{           
if(dia>31)           
{             
dia=1;             
mes++;             
if(mes>12)             
{               
ano++;               
mes=1;             
}           
}         
}         
else if(mes==2)         
{           
if(ano%400==0)           
{             
if(dia>29)             
{               
dia=1;               
mes++;             
}           
}           
else if((ano%4==0)&&(ano%100!=0))           
{             
if(dia>29)             
{              
dia=1;               
mes++;             
}           
}           
else           
{             
if(dia>28)             
{               
dia=1;               
mes++;             
}           
}         
}         
else         
{           
if(dia>30)           
{             
dia=1;             
mes++;           
}         
}       
}     
}   
}    

Serial.print(dia);   
Serial.print("/");   
Serial.print(mes);   
Serial.print("/");   
Serial.print(ano);   
Serial.println();      

disp.setCursor(0,0);   
disp.print("Data ");   
disp.print(dia);   
disp.print("/");   
disp.print(mes);   
disp.print("/");   
disp.print(ano);   

Serial.print(hora);   
Serial.print(":");   
Serial.print(minuto);   
Serial.print(":");   
Serial.print(segundo);   
Serial.print("\n");   
Serial.println();      

disp.setCursor(0,1);   
disp.print("Hora ");   
disp.print(hora);   
disp.print(":");   
disp.print(minuto);   
disp.print(":");   
disp.print(segundo);

    
}//end data_hora

   void changetemp()
   {
     disp.setCursor(0,0); // Define o cursor na posição de início
     int sensor = analogRead(0); // Lê a temperatura do sensor
     disp.setCursor(0,0);
     int temp = sensor * 0.07; // Converte para Celsius
     disp.print(temp);
     disp.write(B11011111); // Símbolo de grau
     disp.print("C ");
     if (temp > maxC) {
     maxC = temp;
  }
  if (temp < minC) {
    minC = temp;
  }
  disp.setCursor(0, 1);
  disp.print("H=");
  disp.print(maxC);
  disp.write(B11011111);
  disp.print("C L=");
  disp.print(minC);
  disp.write(B11011111);
  disp.print("C ");
     
   } //end temperatura()
   
   void lights()
   {
     
     disp.setCursor(0,0);
     disp.print("Acionar Lampadas");
     
     if(!digitalRead(butP))  t_butP = 0x01;
     if(!digitalRead(butM))  t_butM = 0x01;
     
     if(digitalRead(butP) && t_butP)
     {
       t_butP = 0x00;
       
       set1++;
       
       if(set1 > 2) set1 = 0x01;
       
       switch(set1)
       {
           case 0x01:
                 disp.setCursor(0,1);
                 disp.print ("L1 on");
                 digitalWrite(Lamp1, HIGH);
                 break;
           case 0x02:
                 disp.setCursor(0,1);
                 disp.print("L1off");
                 digitalWrite(Lamp1, LOW);
                 break;
                 
       } //end switch set1
       
     }//end butP
     
     if(digitalRead(butM) && t_butM)
     {
       t_butM = 0x00;
       
       set2++;
       
       if(set2 > 2) set2 = 0x01;
       
       switch(set2)
       {
         case 0x01:
               disp.setCursor(8,1);
               disp.print ("L2 on");
               digitalWrite(Lamp2, HIGH);
               break;
         case 0x02:
               disp.setCursor(8,1);
               disp.print("L2off");
               digitalWrite(Lamp2, LOW);
               break;
       }//end switch set1
       
     }//end butM
     
   }//end lights
   
   void incremento()
   {
     
 
incButton = digitalRead(incPin);
decButton = digitalRead(decPin);
if (incButton == HIGH)
{
if(val==255)val=255;
else val++;
}
if(decButton == HIGH)
{
if(val==0)val=0;
else val=val-1;
}
delay(50);
analogWrite(ledPin, val);

     disp.setCursor(0,0);   
     disp.print(" Regul. de velocidade");   
     disp.setCursor(0,1);   
     disp.print("  ");   
     delay (10);
     
}//end incremento
void program()

   {{
   
  /*Para evitar as grandes variações de leitura do componente
  LM35 são feitas 6 leitura é o menor valor lido prevalece*/
 
 
  valorTemp  = INT_MAX; // Inicializando a variável com o maior valor int possível
  for (int i = 1; i <= 6; i++) { // Lendo o valor do sensor de temperatura
 
    valorSensorTemp = analogRead(sensorTemp);  
    
    valorSensorTemp *= 0.07; // Transforma o valor lido do sensor de temperatura em graus... //Celsius aproximados
   
     
     if (valorSensorTemp < valorTemp) {     // Mantendo sempre a menor temperatura lida
      valorTemp = valorSensorTemp;
    }
 
   delay(100);
  }  
   
    if(valorTemp > conta) // Indica condição para acionamento do cooler
    {
    
      digitalWrite(fan, LOW); // Quando condição verdadeira, liga o cooler
      digitalWrite(ligado, HIGH);
      digitalWrite(desligado, LOW);
    }
    else
    {
    
     digitalWrite(fan, HIGH);
     digitalWrite(desligado, HIGH);
     digitalWrite(ligado, LOW);
    }
    delay(10);
   
  // Exibindo valor da leitura do sensor de temperatura no display LCD
  disp.clear();  // Limpa o display do LCD    
  disp.print("Temperatura:");  // Imprime a string no display do LCD                
  disp.print(valorTemp);
  disp.write(B11011111); // Símbolo de graus Celsius
  disp.print("C");
 
  delay(50); // Aguarda 2 segundos
}
   
      delay(debounceDelay_button);                // espere um tempo
      if(!digitalRead(button1))                   // se continua apertado
      {
         if   (Soma == 1)                         // Se for 1  
           conta++;                               // incrementa
         else                                     // E se for 0
           conta--;                               // Decrementa
         delayMicroseconds(1);                    // Espera 1 us só
       }
       
   
      delay(debounceDelay_button);                // espere um tempo
      if(!digitalRead(button2))                   // se continua apertado
      {
        Flagbutton2 = !Flagbutton2;               // Inverte estado do botão
        if   (Flagbutton2 == 1)                  // Se for 1  
        {
          Soma = 1;                              // Operação soma
          disp.begin(16, 2);
          disp.print("++Temperatura");      
        }
        else                                     // E se for 0
        {
          Soma = 0;                                // Operação subtração
          disp.begin(16, 2);
          disp.print("--Temperatura");
        }    
        while(!digitalRead(button2))              // Espera pela liberação do switch
        delayMicroseconds(1);                     // Espera 1 us só
       
    }  
   disp.setCursor(0, 1);
   disp.print(conta);
   disp.print("                ");        
   
}
         
     
   


 

Exibições: 546

Responder esta

Respostas a este tópico

Oi BF, boa tarde.

Recomendações: 

Remova o código da área de texto do seu tópico;

Anexo- como aquivo;

e leia : http://labdegaragem.com/forum/topics/sugest-o-de-como-postar

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço