Ir ao conteúdo
  • Cadastre-se
Maninho Steinberg

linguagem C - problema com o programa para um pic16f628a

Recommended Posts

[table][/table]olá pessoal!

me esbarrei em um problema, que pra mim tá difícil, com um programinha basico em C.

A ideia é simples, no FILTRO1 quando o BOTAO1 for pressionado ele vai para o FILTRO2, e no FILTRO2 eu queria que o pic esperasse alguns segundos

até o botão ser pressionado e se ele não for pressionado vai para LIBERA1 em vez de LIBERA2

se alguem puder me ajudar...

 

[tr][td]
filtro1:           while(1)
 
 
           {
                    if ( botao1 == 0x00 )  
 
                       {
                       goto filtro2;
                       }
           }
 
 filtro2:           while(1)
 
 ledazul = 0x01;             /// led acende pra indicar que estamos nessa parte do programa
           {
                    if ( botao1 == 0x00 )
                       {
                       goto libera2;
                       }
                  
           }
 [/td][/tr]
     

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sei nada de PIC não, porém si puder usar switch e menos esses arcaicos gotos...

#include <stdio.h>#include <time.h>          //nao sei si time funciona com pics porem é para ter uma ideia#define PRESSIONADO 0x00   //supondo que 0x00 equivale a pressionado (nao entendo muito de microcontroladores XD) Nao seria PRESSIONADO quando botao1 for 0x01???#define TIME 500enum FILTRO{FILTRO1=1, FILTRO2};int main () {    int caso = 1; //iniciamos no filtro 1    clock_t inicio;    clock_t tempoTranscurrido;    float segundos=0;        while ( 1 ){        switch(caso){             case FILTRO1: //no FILTRO1...                printf("F1\n");                 //averiguar si botao1 foi pressionado aqui                                if ( botao1 == PRESSIONADO ){ //...quando o BOTAO1 for pressionado...                    caso = 2; //...ele vai para o FILTRO2,...                }                 break;                             case FILTRO2: //...e no FILTRO2...                 printf("F2.\n");                inicio       = clock();                while ( 1 ){                    //averiguar si botao1 foi pressionado aqui                    if ( segundos < 5 || botao1 != PRESSIONADO ){                        tempoTranscurrido = clock(); //isso le o tempo pasado acho que em milisegundos                        segundos = (float)(tempoTranscurrido - inicio) / CLOCKS_PER_SEC; //esse calculo guarda em segundos o tempo que passo em cada iteraçao do loop                                        }else if (botao1 == PRESSIONADO){                        caso = 3; //vamos para libera2 que vc nao deu mais detalhes sobre o que faz                        break;                    }else{                        caso = 1; // si nao acontece uma das duas açoes anteriores em 5 segundos voltamos para FILTRO1                        break;                    }                }                break;                            case LEBERA2:                //TADAH!!                break;                            default:                //IMPORTANTE CASO POR DEFAULT!!                break;        }//FIN SWITCH    }        return 0;}

Essa seria a ideia, claro que não posso provar ela já que não sei o programa nem as libs que você esta usando para comprovar teclas, esse cod é só para expor uma ideia, na real as libs sei que são outras e não essas que eu coloquei aí, mas por ignorância da minha parte sobre o tema de PICs deixo ele assim, fique com o conceito somente, si tiver duvidas pergunte. E si não nem ligue para o que eu falei, passa batido. kkkk.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara valeu a dica.. mas esse <time> não funciona em pic eu acho!

mas eu entendi, a ideia é essa que eu preciso... se tiver como me da uma luz de como fazer de outra forma(que seja compativel com o PIC eu agradeceria muito!

>PIC16F628A<

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tem que investigar qual é o header que você precisa para usar timers em pic. Eu também não sei qual é a que você está utilizando para os botões. Talvez si você postar todo o código podemos te ajudar mais.

E qual são os programas que você esta usando também. O código que eu te passei não posso testar ele por que não tenho acesso as mesmas libs que você esta usando. Entendeu? Dar más informação sobre programas, livrarias, compartir el projeto.

Em pic não sei muito o sistema que se usa para programar, porém esses gotos são horríveis para meus olhos, porém como eu falei, pic é outro mundo, e eu não tenho ideia de nada em pic. Si você quiser trocar uma ideia melhor você pode me add no skype, la me chamo igual.

Sorte.

Compartilhar este post


Link para o post
Compartilhar em outros sites
#define BOTAO_START RA0_bit#define LED RB7_bit#define LED_AZUL RB6_bit#define LED_VERDE RB5_bitvoid main (){CMCON = 0X07;TRISB = 0X00;TRISA = 0X03;PORTA = 0X03;PORTB = 0X00;INICIO: //AQUI COMEÇA A LOGICA{LED = 0x01;delay_ms(100);LED = 0x00;delay_ms(100);LED = 0x01; // O LED VAI PISCAR PRA MOSTRAR QUE COMEÇAMOSdelay_ms(100);LED = 0x00;delay_ms(100);LED = 0x01;}FILTRO_1: //INICIA O FILTRO 1{while(1){if(BOTAO_START ==0x00) // SE O BOTAO START FOR PRESSIONADO PELA PRIMEIRA VEZ, VAI PARA FILTRO 2goto FILTRO_2;}}FILTRO_2: //INICIA O FILTRO 2{while(1){if(BOTAO_START ==0x00) // SE O BOTAO START FOR PRESSIONADO NOVAMENTE DENTRO DE 10segundos, VAI PARA LIBERA_2.????????? // E SE NADA ACONTECER EM 10SEG, VAI PARA LIBERA_1}}LIERA_1: {while(1){LED_AZUL=0x01; //LED AZUL ACENDEdelay_ms(500);}}LIBERA_2: {while(1){LED_VERDE=0x01; //LED VERDE ACENDEdelay_ms(500);}}}

email: maninhosteinberg@outlook.com 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×