Ir ao conteúdo
  • Cadastre-se

Ajuda: botão + led + MikroC


Danilo Almeida

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

Link para o comentário
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:

Link para o comentário
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();
}
}

Link para o comentário
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

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

Link para o comentário
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;

}

}

Link para o comentário
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.

Link para o comentário
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

Link para o comentário
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 .

Link para o comentário
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:

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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