Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Danilo Almeida

Ajuda: botão + led + MikroC

Posts recomendados

Olá pessoal . bom to tentando fazer um programa no MikroC mais não sei como fazer :(

tem que funcionar da seguinte forma , ao pressionar o botão que esta no RA1 o led1 (Rb0) deve acender. apos 3 segundos o led2 (Rb1) deve acender também e ficar os 2 acesos, depois ao pressionar novamente o botão por 4 segundos os led's devem apagar ! :unsure:

tentei de algumas formas mais sem sucesso!

se aguem puder me ajudar .

post-391650-13884956433159_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste seu programa para facilitar.Mas a gosso modo

Declara variaveis;

Inicializa os porticos;

Loop infinito

testa o botão

if(porta.fx==1)

{porta.fx=1

}

aciona uma flag

testa o desligamento

fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

o codigo é o mais basico possivel :looka:

void main (){

CMCON=7 ;

VRCON=0 ;

TRISA=0b11111111; //defini portas de entrada e saida no portA

TRISB=0b00000000; //defini portas de entrada e saida do portB

PORTA=0; // iniciei portA como desativado

PORTB=0; //iniciei portB como desativado

while(1){ //iniciei o laço de repetição ,condição infinitamente verdadeira

if(porta.f1) // se o port RA1 for a 1

portb.f0=1; // então RB0 vai a zero

delay_ms(500);

portb.f1=1;

}

}

mais infelizmente não consegui fazer funcionar :help:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posso fazer..mais vai demorar um pouco(faz tempo que nao programo),...ele e bem simples..aguarde minha edicao.


void fin0 () {
while(1){
if(botao_1==1) {
led1=255;
delay_ms(3000);
led2=255;
fin1();
}
void fin1() {
while(1){
if(botao_1==1){
delay_ms(4);
if(botao_1==1){
led1=0;
led2=0
fin0
}
}

void main(){
while(1){
fin0();
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá angelo , muito obrigado pela ajuda!

bom...

eu não consegui fazer funcionar ainda, o led acende os 2 na sequencia certinho , mais eles não apaga . o codigo fico assim

void main() {

CMCON=7; //comparadores Desativados

TRISA = 0B00000110; //Defini portas de entrada e de saida

TRISB = 0B00000000; //Defini portas de entrada e de saida

PORTA = 0B00000000; // Defini o estado logico das portas

PORTB = 0B00000000; //Defini o estado logico das portas

while(1){

if(porta.f1==1) {

portb.f0 = 255;

delay_ms(1000);

portb.f1 = 255;

}

if(porta.f1==1) {

delay_ms(2000);

if(porta.f1==1){

portb.f0=0;

portb.f1=0; }

}

}

}

eu não entendi no seu codigo o " void fin0 () " o que é esse negocio de fin0 ?

eu to usando o mikroC pro. para compilar

---------------------------------------------------------------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá angelo , muito obrigado pela ajuda!

bom...

eu não consegui fazer funcionar ainda, o led acende os 2 na sequencia certinho , mais eles não apaga . o codigo fico assim

void main() {

CMCON=7; //comparadores Desativados

TRISA = 0B00000110; //Defini portas de entrada e de saida

TRISB = 0B00000000; //Defini portas de entrada e de saida

PORTA = 0B00000000; // Defini o estado logico das portas

PORTB = 0B00000000; //Defini o estado logico das portas

while(1){

if(porta.f1==1) {

portb.f0 = 255;

delay_ms(1000);

portb.f1 = 255;

}

if(porta.f1==1) {

delay_ms(2000);

if(porta.f1==1){

portb.f0=0;

portb.f1=0; }

}

}

}

eu não entendi no seu codigo o " void fin0 () " o que é esse negocio de fin0 ?

eu to usando o mikroC pro. para compilar

---------------------------------------------------------------------------------------------

Tenta assim

int status;

void main (void)

TRISA = 0b00000010; //Defini portas de entrada e de saida

TRISB = 0b00000000; //Defini portas de entrada e de saida

PORTA = 0b00000000; // Defini o estado logico das portas

PORTB = 0b00000000; //Defini o estado logico das portas

while(1){

if(porta.f1==1 && status==0)

{

portb.f0 = 1;

delay_ms(3000);

portb.f1 = 1;

status=1;

}

if(porta.f1==1 && status==1)

{delay_ms(4000)

if(porta.f1==1 && status==1)

{

portb=0x00;

status=0;

}

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que complicar:



int flag; //flag auxiliar

Void main() {

flag = 0;
CMCON = 0x07; //desabilita comparadores
TRISB = 0b0000000 ;// Portb como saida
TRISA = 0x01 ; //RA1 como entrada digital
OPTION_REG = 128 ; //desabilita pull-ups
PORTB = 0;
while (1){
if (PORTA.f1 == 1) { //PORTA 1 = 1?
PORTB.f0 = 1; //acende led 1
delay_ms(3000); //aguarda 3s
PORTB.f1 = 1; //acende led2
do{
if (PORTA.f1 == 1){ //porta1 esta pressionado?
delay_ms(4000); //espera 4s.
if (PORTA.f1 == 1){ //pressionado?
flag = 1;
}
}
}
while (!flag);
flag =0; //reseta flag
PORTB = 0; //apaga leds
}
}
}

Veja se ajuda!

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Daniel ., muito obrigado pela atenção .

Mais o seu codigo num ta nem compilando , o compilador acusa um erro na linha int status; .

felipe. agradeço você também pela atenção. mais o seu codigo esta conpilando mais fica os 2 led acesos , e o bõtão nem atua para nada , deve ter algum erro que não consegui resolver também . tirei até os resistores de pull-ups para testar mais mesmo assim nada ,

queria entender como funciona esse negocio de flag.

os fusiveis estão desta forma .

post-391650-13884956471871_thumb.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente o problema deve ser nas portas..no botao..porque dois codigos nao funcionaram..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo,

Desculpe, havia um errinho no codigo, faça o teste agora(o mesmo codigo do meu post anterior acabei de editar) e veja o que acontece.

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Angelo, não tem problema no circuito , até porque como relatei o programa que você fez, fuinciona o começo só não termina! ele acende o primeiro led espera 1 segundo acende o outro led, só que não esta apagando , mais não sei se montei o programa certinho como você explico ,

_________________________________________________________________

Felipe, o programa fazendo a mesma coisa , já inicia acendendo os 2 leds sem nem clicar na chave .

Compartilhar este post


Link para o post
Compartilhar em outros sites

Danilo,

Estranho, aqui roda normalmente, de qualquer forma editei mais um possivel problema, veja se resolve.

Simule o código no debugador antes de mandar para o proteus.

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá Felipe , Dessa vez funciono :bandeira:

só que tem um pequeno probleminha , a ideia é de quando pressinar o botão para desligar os led se apagar em 4 segundos e só ligar novamente se soltar e apertar o botão novamente!

ele esta reiniciando , ou seja o primeiro led nem chega a apagar.

eu coloquei o break; depois da ultima linha do programa , ae ele funciona perfeito, acende e apaga , mais com o break; ele só funciona uma vez !

obrigado pela paciencia, é que to tentando aqui também de varias forma e nada, coisa simples que ta me dando uma dor de cabeça danada aff's :cool:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ai Danilo. As vezes voce toma remedio por causa de dor de cabeca de circuito e o problema e simples! :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz, num fala não , putz , são noites e noites de sono perdidas estudando microcontrolador , mais faz parte . eu gosto ! é viciante esse trem !

e até agora nada de conseguir parar o programa, affs

mais eu ainda consigo ! rs

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
Entre para seguir isso  





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

×
×
  • Criar novo...