Ir ao conteúdo

Posts recomendados

Postado

Boa noite, estou tentando fazer um código de controle e não consigo, a contagem funciona como esperado sem o delay_ms (3000); mas quando coloco, a contagem fica bem superior , teria outra maneira de  dar uma pausa sem usar esse delay?  Obrigada desde já.

 


int16 minuto = 0;
int16 conta = 0;
#use delay(clock=4000000)


#INT_RA                                
//------------------------------------------------------------------------
void RA_isr(void)                         
{
  clear_interrupt(INT_RA2);
  if(input(PIN_A2))                    
  {
   conta++;
  }
} 

void main()
{
    
     set_tris_a  (0b0001100 );   
     enable_interrupts(GLOBAL);              
     enable_interrupts(INT_RA2); 
     clear_interrupt(INT_RA2);         
     output_low(pin_a0);
     output_low(pin_a1);
   
 while(TRUE)
   {
    if (conta >= 3600 ) 
    {
      conta = 0;
      minuto++;
    } 
    
      delay_ms (3000);
      
      if(input(PIN_A3))
      {
       output_low(pin_a0);
       output_low(pin_a1);               
       conta = 0;                   
       minuto=0;
       }
     
      if( minuto <= 5  )
     {
      output_high(pin_a0);               
     }
    
   if( minuto >= 5)
     {
      output_high(pin_a1);
     }
   if( minuto >= 15)
     {
      output_low(pin_a0);
      output_low(pin_a1);               
      conta = 0;                   
      minuto=0;
      }
      }
      }
    
    
  

 

  • Amei 1
Postado

@AmandaLimamanda   tem outra maneira , sim , você pode colocar um loop vazio  que vaiz ficar perdendo tempo, e colocar o valor até que seja o tanto que você queira ,  por exemplo esse:

for(int t=0; t<3; t++)           /// aqui multiplica por 3 = 3 segundo
{
  for(int f=0; f<60000; f++)
    for(int n=0; n<60000; n++);  /// aqui delay +/- 1 segundo
}

 

Postado

Boa noite. Entendo pouco de programação, seria dessa maneira? E como é definido  o valor (tempo) de "n" e "t"? E queria um tempo de 3 segundos ou mais, antes de ligar e antes de desligar. Obrigada.

 while(TRUE)
   {
    if (conta >= 3600 ) 
    {
      conta = 0;
      minuto++;
    } 
      
      for(int t=0; t<3; t++)    
     {
       if(input(PIN_A3))
      {
       output_low(pin_a0);
       output_low(pin_a1);               
       conta = 0;                   
       minuto=0;
       }
        }
         for(int n=0; n<3; n++)                 
      {
      if( minuto <= 5  )
     {
      output_high(pin_a0);               
     }
      
   if( minuto >= 5)
     {
      output_high(pin_a1);
     }
   if( minuto >= 15)
     {
      output_low(pin_a0);
      output_low(pin_a1);               
      conta = 0;                   
      minuto=0;
      }
      }
      }
      }

 

  • Curtir 1
Postado

@AmandaLimamanda    não  é desa forma não , pois esses tres loop serve para substituir o comando "delay_ms" ,  porém  vai fazer a mesma coisa , pois entendi que você não queria usar essa função "delay_ms" ,  mas para fazer uma pausa pode usar  "delay_ms" ou essa que postei , mas com resultado iguais ,  creio que se fizer uma pausa vai alterar a contagem , quer usando uma função ou outra .    e  seu código  usando essa função que postei ficaria assim :

int16 minuto = 0;
int16 conta  = 0;
#use delay(clock=4000000)
#INT_RA
//------------------------------------------------------------------------
void RA_isr(void)
{
    clear_interrupt(INT_RA2);
    if(input(PIN_A2))
    {
        conta++;
    }
}
void meu_delay( int y ) // rotina perde Tempo
{
  for(int t=0; t<y; t++)
  {
    for(int f=0; f<60000; f++)
      for(int n=0; n<6000; n++);
  }
}
void main()
{

    set_tris_a  (0b0001100 );
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RA2);
    clear_interrupt(INT_RA2);
    output_low(pin_a0);
    output_low(pin_a1);

    while(TRUE)
    {
        if (conta >= 3600 )
        {
            conta = 0;
            minuto++;
        }

        meu_delay (3); /// pausa por 3 segundos

        if(input(PIN_A3))
        {
            output_low(pin_a0);
            output_low(pin_a1);
            conta = 0;
            minuto=0;
        }

        if( minuto <= 5  )
        {
            output_high(pin_a0);
        }

        if( minuto >= 5)
        {
            output_high(pin_a1);
        }
        if( minuto >= 15)
        {
            output_low(pin_a0);
            output_low(pin_a1);
            conta = 0;
            minuto=0;
        }
    }
}

 

Postado

Boa noite. Pensei que assim daria certo, mas não tive  sucesso.


Code:

int16 minuto = 0;
int16 conta = 0;
int LG = 0;
second=0;
#use delay (clock=4000000)


#INT_RA                               
//------------------------------------------------------------------------
void RA_isr(void)                         
{
  clear_interrupt(INT_RA2);
  if(input(PIN_A2))                   
  {
   conta++;
   LG++;
  }
}

void main()
{
    
     set_tris_a  (0b0001100 );   
     enable_interrupts(GLOBAL);             
     enable_interrupts(INT_RA2);
     clear_interrupt(INT_RA2);         
     output_low(pin_a0);
     output_low(pin_a1);
  
 while(TRUE)
   {
    if (conta >= 3600 )  // passou 1 minuto
    {
      conta = 0;
      minuto++;
    }
 if (LG >= 60 )  //  passou 1 segundo
    {
    LG=0;
    second++;
      
    }
      
      ///////////// delay_ms (3000);   
    
       if((input(!PIN_A3)) && (second==3))
      {
       output_low(pin_a0);
       output_low(pin_a1);               
       conta = 0;                   
       minuto=0;
       second=o;
       LG=0;
       }
        
   /////delay_ms (3000);               
      
      if(( minuto <= 10  ) && (input(PIN_A3)) && (second==3)))
     {
      output_high(pin_a0);
      output_high(pin_a1);
     }
      
   if( minuto > 10)
     {
      output_low(pin_ao);
      output_low(pin_a1);             
      conta = 0;                   
      minuto=0;
      second=o;
      LG=0;
      }
      }
      }

 

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!