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
Tags:
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por