Ir ao conteúdo
  • Cadastre-se
Magno Rubem

Como alterar o valor de uma variável com botão?

Recommended Posts

olá a todos! sou novo no forun!

sou iniciante em pic, já faço algumas pequenas coisas em c, eu uso o microc- for- pic, porém tenho uma duvida que para quem já é avançado em conhecimento de pic e linguagem c pode ser uma coisa simples, tenho uma variável  e nela acendo um led usando o IF, porém eu gostaria de adicionar um código que incrementasse +1 ou -1 a variável toda vez que eu pressionasse o botão MAIS, por exemplo suponhamos que eu inicie a varável em zero e quero que ela acenda o led em 15, assim pressiono o botão 15 vezes  para adicionar e ele só acenda quando atingir os 15, e quando pressionar o botão Menos o led desligue pois decrementa -1.

Estou usando o pic 12F675 , Ficarei grato pela ajuda de vocês 

 

 

void main()
{
  char A=15;
   CMCON  = 7 ;           // desliga os comparadores
   ANSEL = 0 ;          // Configura entrada analogica AN0
   TRISIO.F0 = 0;     // CONFIGURA O PORT COMO SAIDA
   TRISIO.F1 = 0;    // CONFIGURA O PORT COMO SAIDA
   TRISIO.F4 = 1;    // CONFIGURA O PORT COMO ENTRADA
   TRISIO.F5 = 1;    // CONFIGURA O PORT COMO ENTRADA
   GPIO = 0 ;        // Passa o estado logico 0 para a porta

   while(1)
   {
   if (A=15)
   gpio.f0=1;

}

}

 

CIRCUITO.png

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 minutos atrás, Rafael Del Pino disse:

If a==15 é o certo 

Abs

olá Rafael obrigado pela correção, realmente coloquei IF=15 , aqui no compilador eu já havia colocado correto if (a==15) e funciona perfeito o comando para acender o o LED fazendo a comparação da variável. é que na hora da postagem do tópico acabei errando.

mais na realidade a minha duvida é, como colocar um código que altere o valor das variáveis através de botões externos por exemplo  if (gpio.f4==0) // incrementa 1 a cada véz que for pressionado o botão

a++;

if (gpio.f5==0)  // decrementa 1 a cada vez que for pressionado o botão 

a--;

essa é minha duvida, pois aqui não funciona, iniciando a variável em zero quando eu pressionar o botão mais 15 vezes o LED acenda.

essa é que está sendo a minha dificuldade. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é esse compilador? 

Eu uso o mplab, eu já usei esse pic mas faz tempo, porém lembro que pra comparar uma entrada eu usava GPIO1==0. É algo assim, não lembro direito. Mas é no mplab. 

No datasheet tem essa informação 

Posta o código completo 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então eu uso o MICROC- FOR PIC

O CODIGO COMPLETO 

 

void main()
{
  char A==15;
   CMCON  = 7 ;           // desliga os comparadores
   ANSEL = 0 ;          // Configura entrada analogica AN0
   TRISIO.F0 = 0;     // CONFIGURA O PORT COMO SAIDA
   TRISIO.F1 = 0;    // CONFIGURA O PORT COMO SAIDA
   TRISIO.F4 = 1;    // CONFIGURA O PORT COMO ENTRADA
   TRISIO.F5 = 1;    // CONFIGURA O PORT COMO ENTRADA
   GPIO = 0 ;        // Passa o estado logico 0 para a porta

   while(1)
   {
   if (A=15)
   gpio.f0=1;
   {
   if (gpio.f4=0)
   A++;
   {
   if (gpio.f5=0)
   A--;

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Spoiler

kkkkkk

não,

na realidade o que ele quer é totalmente diferente de mim,

no meu caso eu quero incrementar +1 a uma variável toda vez que um botão for pressionado .

suponhamos que o meu programa esteja assim.

 

#define led GPIO.F0
#define s1 GPIO.F4
#define s2 GPIO.F5

int a=0;        // Aqui é a variável do tipo inteiro que declarei
void main(){
    CMCON = 7;
    TRISIO.F0 = 0;
    TRISIO.F4=1;
    TRISIO.F5=1;
    GPIO = 0;
   while(1)
     {

       if(s1 == 0){
        a++;              // incrementa 1 a variável a cada vez que o botão for pressionado
        delay_ms(300);

        }

       if(s2 == 0){
       a--;                //   decrementa 1 a variável a cada vez que o botão for pressionado
       }

       if(a == 10){    // toda vez que pressionar o s1 10 vezes o led acenda 
         led = 1;
         delay_ms(300);

if (a<10)

led=0;
       }
     }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei meu programa que eu usei esse pic.

Quando fiz, tive que deixar o registrador ANSEL = 0;

Pois é nele que seleciona se os pinos serão entradas analógicas ou digitais. Isso tudo está no datasheet.

Teu código parece certo. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok @Magno Rubem mas convenhamos que tem alguma relaçãozinha. kk

 

É isso amigo a dica do amigo @Rafael Del Pino faz sentido e seu código parece que também faz. Diga o que ocorre, o que não ocorre e o que deveria ocorrer e em qual parte do programa

 

Spoiler

Só falta você dizer que está usando led verde...!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que legal kkk, uma dúvida parecida com a minha asahushua, na vdd n é tão diferente n

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Magno Rubem  Bom trabalho! em C também sou meio iniciante, caso meu projeto funcione na prática pretendo me aprofundar na linguagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Philippe Henrique disse:

@Magno Rubem  Bom trabalho! em C também sou meio iniciante, caso meu projeto funcione na prática pretendo me aprofundar na linguagem.

olha a linguagem c é fantástica, não pense duas vezes, pode se aprofundar, as vezes encontramos pedreira até porque somos iniciantes mais nada que a persistência não resolva , logo logo vou postar aqui a solução do meu problema, to filtrando melhor para ficar com mais qualidade.

adicionado 0 minutos depois
1 hora atrás, Rafael Del Pino disse:

@Magno Rubem

Caso tenha resolvido compartilhe com o pessoal aí, como o amigo falou: mais gente pode passar por esse problema e achar a solução no seu tópico.

Abs 

, logo logo vou postar aqui a solução do meu problema, to filtrando melhor para ficar com mais qualidade.

  • Curtir 1

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

×