Bom dia feras !

Seguinte estou modificando um projeto encontrado na net chamado Temporizador no qual coloquei o ajuste pelo controle remoto. O problema e quando ele esta fazendo a contagem regressiva eu não consigo parar se caso eu coloquei um tempo errado, tenho que esperar ele termina a contagem ate zero para poder fazer qualquer função, tipo que fica preso no loop de contagem.Pensei em fazer um reset com transistor para assim pode reiniciar os codigo. Oque vc acham ?

Exibições: 344

Anexos

Responder esta

Respostas a este tópico

Boa tarde AFS,

no seu código o port star e stop estão definidos como mesmo port;

int start = A1;
int stop = A1;

RV

Boa tarde RV;

int stop não esta ligado a nada, apenas tava testando esqueci deletar.

Você pode fazer uma descrição explicando o que este código faz, ou o que vc espera que ele faça?

E como pretende usá-lo?

RV

Ele e um temporizador, no qual ele era ajustado por quatro botão sendo ele ( Ajusta segundo, minuto, hora e o start para começa a contar.

Eu peguei este código e modifiquei ele para controlar por controle remoto através do IRremote, então funcionou todas as funções consigo ajustar o valo que eu quero.

O problema esta aqui. Vamos supor que uma pessoa pega um carrinho para andar no qual eu ajustei 30 min o temporizador, e esta pessoa não quis usar todo o tempo. Eu nao consigo para o temporizador para colocar novos valores para outra pessoa ate que o temporizador ZERE tudo.

AFS, acho que vc não entendeu o que eu perguntei.

vou dar um exemplo para você se orientar na resposta.

Apos ligar o arduino,

Ele apresenta informações no LCD

Em seguida faço o seguinte.....

Se eu apertar x ele faz y

Se eu quiser ajustar faço o seguinte:

Uso um CR para ajustar..............

OK

Boa noite AFS,

fiz algumas alterações no seu programa.

Inclui a tecla de stop no port A2.

E coloquei uma rotina para parar a contagem decrescente.

Ao apertar o stop para a contagem

E ela só reinicia se vc enviar novamente o IR teclaStart

RV

Programa2.0.ino

Boa noite RV;

Infelizmente ele não ta funcionando o temporizador fica pulando  os segundos. Muito estranho este código: 

No código tem A1 para referencia pois nem uso o pino A1 para funcionar.

Vou ver se crio um simulador no 123Circuit e repasso pra sr ter uma ideia melhor acho que não to conseguindo explicar.

Grato pela gentileza.

Boa noite RV;

Fiz o projeto no simulador segue o link abaixo ( Simulador do projeto), assim fica mais fácil para sr entender o projeto. So preciso criar um botao que zere o tempo para mim colocar novos valores. Obrigado !

Simulador do projeto

Bom dia AFS,

este simulador pede senha.

RV

Bom dia RV,

Exatamente precisa registrar-se uma conta, não precisa pagar nada. Mas pense na plataforma show de bola, da para simular vários projetos virtuais. Site foi desenvolvido para Autodesk e super confiável. 

Abraço !

Ola,

pelo que eu entendi, a forma como você desenvolveu o código tem como objetivo, um loop que bloqueia a execução do código em cada segmento do código, no caso, 3.

1. while (digitalRead(start) != 0); // enquanto não começar, permite alterar o tempo do temporizador

2. while (segundostotal > 0) // enquanto não acabar a contagem, continua contando

3. while (1) // enquanto "infinito", mostrar a mensagem (e do jeito que está, é um 2.1)

Em primeiro, gostaria de colocar um alerta que não é muito recomendável e nem efetivamente prático usar este esquema, pois, caso você queira evoluir/crescer seu código, irá dificultar em alguns momentos.

De qualquer forma, analisando o código, alguns problemas e soluções são:

1. Ao iniciar o código, o primeiro "while" não está funcionando com aparenta ser a intenção, pois ele entra uma vez e continua o código (o que acredito que não era a intenção). Para funcionar como um loop, teria que ser "while (digitalRead(start) == 0)". E dentro do código, colocar "start = 0;" no lugar de "start != 0;

2. E no outro "while", para sair vc precisará adicionar uma condição:

if (digitalRead(Btn8) != 0) { exit(0) } por exemplo...

Mas, como sugestão, não use while, que bloqueia e dificulta. Use algo como uma variável de controle e switch case

switch (controle)
{
case 1:
// codigo para alterar o tempo ou chamada de função
break;

case 2:

// código para contagem ou chamada de função
break;

case 3:

//código de finalização ou chamada de função
break;

case 3:

//código de cancelamento ou chamada de função
break;

default
// outros códigos ou chamada de função

}

Boa tarde RT;

Venho por meio desta resposta agradecer pela ajuda importante que sr proporcionou ao meu projeto, e pelas dicas  valiosas para futuros projetos.

Grande Abraço.

ARFS;

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço