Boa tarde amigos!!!!

Pra variar, tenho dúvidas (rs).

Estou tentando rascunhar uma lógica que eu tente ligar um gerador 5 vezes, caso o mesmo não parta me retorna um alarme de falha.

Não sei qual comando eu usaria, visto que, estaria colocando essa lógica em um case (switch), que vcs já me ensinaram em outro tópico.

Aproveitando, fiz um padrão para testar meus programas no Arduino (Proteus 8).

Assim fica mais fácil simular (Abram o arquivo Simulador Arduino)

 

Muito Obrigado a todos

Leonardo Egidio

Exibições: 719

Anexos

Responder esta

Respostas a este tópico

Leonardo, 

rescrevi o código, e mudei algumas regras de 1 e 0.

Veja se este te atende.

Rui

int CH0 = 3; // ponto que confirma que o gerador partiu
int CH1 = 4; // Botao que dara as cinco tentativas na partida, caso nao consiga, aciona LED8 (falha na partida)
int CH2 = 5; // Botao para "resetar" contadora de falhas

int LED7 = 7;//gerador rodando
int LED8 = 8;//Led falha na partida do gerador

int leitura0 ;
int leitura1 ;
int leitura2 ;
unsigned int falhou = 0; // Variavel indicar que nao partiu.

void setup()
{
pinMode(CH0, INPUT);
pinMode(CH1, INPUT);
pinMode(CH2, INPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
}
void loop()
{
leitura1 = digitalRead(CH1); // 0 se botao de partida foi acionado 1 nao acionado
leitura2 = digitalRead(CH2); // 0 se botao de reset foi acionado 1 nao acionado

if (leitura2 == 0) falhou = 0; // Reset contador de falhas

if (leitura1 == 0) // faça se partida foi acionado
{
if(falhou <5) // faça se não falhou 5 vezes
{
digitalWrite(LED7,HIGH); // liga gerador
delay(200); // tempo para ligar o switch que indica partida
leitura0 = digitalRead(CH0); // 1 nao ligou, 0 ligou.
if (leitura0 == 1) // Faça se não ligou
{
falhou++; // Se falhou incrementa contador de falhas
digitalWrite(LED8, HIGH); // Se falhou acende Indicador de falha
}
else
{
falhou = 0; // Se partiu zera o contador
digitalWrite(LED8, LOW); // Se partiu apaga indicador de falha
}
}
}
}

Rui bom dia

Estou simulando seu programa e o logo que alimenta o circuito (Proteus), já parte o gerador.

Estou "fuçando" no  seu código (que por sinal está bem detalhado e fica mais facil o entendimento) para ver se acho onde está o problema para tentar entendeu mais sobre o código. Se não conseguir eu posto de novo.

Muito obrigado pela força que voce está dando a pessoas que queiram aprender..

Grande abraço

Fiz umas mudanças na sua explicação, pois tenho mais facilidade com switch/case.

Mas o código está meio inconstante, pois as vezes ele dá a falha em menos de 5 tentativas e as vezes nem dá sinal de falha (LED8)

Segue o código:

int CH0 = 3; // ponto que confirma que o gerador partiu
int CH1 = 4; // Botao que dara as cinco tentativas na partida, caso nao consiga, aciona LED8 (falha na partida)
int LED7 = 7;//gerador rodando
int LED8 = 8;//Led falha na partida do gerador
int LED9 = 9;//comando normal
int LED10 = 10;//sinaliza tentativas ciclo de tentativas
int leitura0 ;
int leitura1 ;
unsigned int falhou = 0; // Variavel indicar que nao partiu.
byte comando = 0;//tipo de comando dos leds
void setup()
{
pinMode(CH0, INPUT);
pinMode(CH1, INPUT);
pinMode(LED7, OUTPUT);
pinMode(LED8, OUTPUT);
pinMode(LED9, OUTPUT);
pinMode(LED10, OUTPUT);
}
void loop()
{
leitura0 = digitalRead(CH0); // gerador partiu? Sim ou não
leitura1 = digitalRead(CH1); // pulso 5 Tentativas

if (leitura0 == LOW && leitura1 == LOW)
{
comando = 0;//não faz nada só acende LED9
}
else if (leitura0 == LOW && leitura1 == HIGH && falhou <5)
{
delay(1000);
comando = 1;//5 tentativas
}
else if (leitura0 == HIGH && leitura1 == LOW)
{
comando = 0;//não faz nada só acende LED9
}
else if (leitura0 == LOW && leitura1 == HIGH && falhou >5)
{
comando = 2;//falha acende LED8
}
else if (leitura0 == HIGH && leitura1 == HIGH )
{
comando = 3;//partiu gerador e zerou contador
}
switch (comando)
{
case 0://não faz nada só acende LED9
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED9, HIGH);
digitalWrite(LED10, LOW);
break;

case 1://5 tentativas
digitalWrite(LED7, LOW);
digitalWrite(LED8, LOW);
digitalWrite(LED9, LOW);
digitalWrite(LED10, HIGH);
falhou++;
break;

case 2://falha
digitalWrite(LED7, LOW);
digitalWrite(LED8, HIGH);
digitalWrite(LED9, LOW);
digitalWrite(LED10, LOW);
break;

case 3://partiu gerador e zerou contador
delay(1000);
digitalWrite(LED7, HIGH);
digitalWrite(LED8, LOW);
digitalWrite(LED9, LOW);
digitalWrite(LED10, LOW);
falhou = 0;
break;

}
}

Leonardo, montado aqui no meu arduino, funcionou legal.

Será que não é problema no Proteus?\

Monte num arduino com chavinhas e LEDs e teste.

Rui

Rui bom dia

Esta semana estarei testando no arduino e, caso esteja funcionando colocarei o tópico como concluido.

Agradeço imensamente a ajuda.

Abraços.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço