Ir ao conteúdo
  • Cadastre-se

patoassado2

Membro Júnior
  • Posts

    15
  • Cadastrado em

  • Última visita

posts postados por patoassado2

  1. nesse ultimo quando você aperta o botao o programa esta lendo
    if(botao==1){
    x++;
    }
    entao como você demorou mais de um décimo de segundo pra apertar o botao o programa ja leu essas linhas de codigo pelo menos centenas de vezes por isso o x já vai direto pro 6000 e aciona o led, pra isso q serve o filtro de ruido do botão, é tipo um delay q você bota no programa

    no penultimo você fez um filtro de ruido pro botão...
    while(botao==1){
        delay_ms(20);

     

    esse gp3 tb ta como entrada, liga um resistor de 10k no terra igual fez com o botao

     

    sei gp0 tb ta como entrada... coloca como saída ou bota um resistor também, ou não vai funcionar direito

  2. Se puder mostra o esquema elétrico, to vendo q ta em um oscilador rc entao não deve ser arduino, dependendo da ligação pode dar pau também, tipo se não colocar resistor nas entradas ligados no terra (de uns 3 a uns 15 k devem servir, 10k eh o habitual ).
    Tem o timer0 q da pra usar a interrupção dele(quando ele estoura) pra contar tempo(colocando valor inicial no timer e definindo quantas linhas de código contam uma unidade do timer nas config da pra contar qualquer valor de tempo) , a interrupção para o programa e leva a execução dos ciclos pra um endereço no começo da memória(linha 4) e de lá você faz o que quiser
    o byte tris=0x85 n seria byte tris=0x85h ? ou não precisa do h?
    to sem meus componentes aqui, pior q eu tenho esse pic kkkk mas to em outra cidade....

  3. Deixa int entao, e troca os true e false por 0 e 1, da na mesma

    #include <12F675.h>
    #device adc=8
    #use delay(clock=4000000)
    #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT
    #use fast_io(A)
    //#end if
    #ZERO_RAM

    #byte tris=0x85

    #bit  led     = 0x5.4 //pino 3
    #bit  botao   = 0x5.0 //pino 7

    int tempo;
    int flag_led_piscou;
    int flag_botao_acionou;

    void main() {
     
       tris=0b001101; //gp0 como entrada
       tempo=0;
       flag_led_piscou= 0;
       flag_botao_acionou= 0;

       while(true){
       tempo=0;
       if(botao==1){
        flag_botao_acionou=1;
            tempo=0;
    }
       while(flag_botao_acionou==1 && flag_led_piscou==0 && botao==0){
            delay_ms(1);
            tempo++;
            if (tempo==5000){
                led=1;
                delay_ms(500);    //led aceso
                led=0;
                flag_led_piscou=1;
                flag_botao_acionou=0;
                tempo=0;
                    }
                }
         flag_led_piscou=0;
             flag_botao_acionou=0;
      }
    }

  4. Se não der desisto, (por hj kkk)

     

    #include <12F675.h>
    #device adc=8
    #use delay(clock=4000000)
    #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT
    #use fast_io(A)
    //#end if
    #ZERO_RAM

    #byte tris=0x85

    #bit  led     = 0x5.4 //pino 3
    #bit  botao   = 0x5.0 //pino 7

    int tempo;
    bool flag_led_piscou;
    bool flag_botao_acionou;

    void main() {
     
       tris=0b001101; //gp0 como entrada
       tempo=0;
       flag_led_piscou= false;
       flag_botao_acionou= false;

       while(true){
       tempo=0;
       if(botao==1){
        flag_botao_acionou=true;
            tempo=0;
    }
       while(flag_botao_acionou==true && flag_led_piscou==false && botao==0){
            delay_ms(1);
            tempo++;
            if (tempo==5000){
                led=1;
                delay_ms(500);    //led aceso
                led=0;
                flag_led_piscou=true;
                flag_botao_acionou=false;
                tempo=0;
                    }
                }
         flag_led_piscou=false;
         flag_botao_acionou=false;
      }
    }

  5. ainda não entendi porque ele liga imediatamente ao abrir o botão , vou dar mais uma olhada aqui

    naooo, é so int mesmo aff ausheuhasea
    copiei o seu codigo pra modificar, acho que não existe int1
    colocou flag_led_piscou=0; dps q saiu do while(botao==0 && flag_led_piscou==0)?
    não precisa ser essa flag, pode ser algum comando q saia do while, eu n conheço muito essa linguagem
     

  6. achei outro erro meu.... dps q sair do while coloca a flag em 0 de novo kkkkk

     

    #use fast_io(A)
    //#end if
    #ZERO_RAM

    #byte tris=0x85

    #bit  led     = 0x5.4 //pino 3
    #bit  botao   = 0x5.0 //pino 7

    int tempo;
    int1 flag_led_piscou;

    void main() {
     
       tris=0b001101; //gp0 como entrada
       tempo=0;

       flag_led_piscou=0;
     
       while(true){
         
       if(botao==1){
          delay_ms(100);    // filtro de ruído
          while(botao==0 && flag_led_piscou==0){
            delay_ms(1);
            tempo++;
            if (tempo==5000){
                led=1;
                delay_ms(500);    //led aceso
                led=0;
                flag_led_piscou=1;  // poderia ser um return ou sei la
                    }
                }
        tempo=0;
        led=0;
        flag_led_piscou=0;   //af q put$ria
            }
     
      }
    }

  7. ve se as interrupções do microcontrolador estão desativadas


    saquei... perae vou arrumar aqui com uma flag...

    #include <12F675.h>
    #device adc=8
    #use delay(clock=4000000)
    #fuses NOWDT,INTRC_IO, NOCPD, NOPROTECT, NOMCLR, PUT, BROWNOUT
    #use fast_io(A)
    #endif
    #ZERO_RAM

    #byte tris=0x85

    #bit  led     = 0x5.4 //pino 3
    #bit  botao   = 0x5.0 //pino 7

    int tempo;

    void main() {
     
       tris=0b001101; //gp0 como entrada
       tempo=0;

       flag_led_piscou=0;
     
       while(true){
         
       if(botao==1){
          delay_ms(100);    // filtro de ruído
          while(botao==0 && flag_led_piscou==0){
            delay_ms(1);
            tempo++;
            if (tempo==5000){
                led=1;
                delay_ms(500);    //led aceso
                led=0;
                flag_led_piscou=1;  // poderia ser um return ou sei la
                    }
                }
        tempo=0;
        rele=0;   
            }
     
      }
    }

  8.  

    if(botao==1){
        delay_ms(100);    // filtro de ruído
        while(botão==0){
            delay_ms(1);
            x++;
            if (x == 5000){
                Gp4=1;
                delay_ms(500);    //led aceso
                Gp4=0;
                    }
                }
        x=0;
        Gp4=0;
            
            }



    não sei se ta certo tenta ai kkkk, n lembro como escreve em c++....
    porém quando o led estiver aceso não detectará botao... não sei configurar interrupção do timer do pic no c++ pra interromper o led também...

  9. Tenta algo mais genérico que inclusive já tem pronto, como programas que simulam protocolos de comunicação de máquina mesmo (os mais genéricos, tipo i2c) que já tem placas prontas para comprar que se comunicam com arduino, e existem programas para fazer comunicação com seu PC através do usb, eu acho q seria mais interessante. Poderia pegar os dados deste programa no PC e mandar para qualquer lugar, inclusive para um banco de dados na nuvem, é mais fácil do que simular alguma maquina que já está até com os resistores perfeitamente dimensionados com oscilador próprio, nunca fica preciso sem aqueles algoritmos de aproximação e outras artimanhas que só se da conta que existe na prática.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!