Bom dia pessoal, preciso criar uma programação que quando a a logica seja falsa o bloco pare de funcionar, aguem pode me ajudar? desde já Muito Obrigado,segue o programa, abraços.
int uno = 1; // entrada Modo stand bye
int run = 2; // habilita partida do gerador
int pg = 3; // aciona partida do gerador
int kc = 4; // aciona contator da compania
int kg = 5; // aciona contator do gerador
int kca = 6; // aciona contator da carga
int rs = 7; // entrada botão reset
int ffg = 8; // entrada falta de fase do gerador
int ffc = 9; // entrada falta de fase da compania
int fp = 10; // falha de partida
void setup()
{
pinMode(uno, INPUT);
pinMode(run, OUTPUT);
pinMode(pg, OUTPUT);
pinMode(kc, OUTPUT);
pinMode(kg, OUTPUT);
pinMode(kca, OUTPUT);
pinMode(rs, INPUT);
pinMode(ffg, INPUT);
pinMode(ffc, INPUT);
pinMode(fp, OUTPUT);
}
void loop()
{
int leitura1 = digitalRead(uno);
int leitura9 = digitalRead(ffc);
int leitura8 = digitalRead(ffg);
if (leitura1 == HIGH && leitura9 == HIGH && leitura8 == LOW)
{
{
delay(4000);
digitalWrite(kc, HIGH); // aciona contator da compania
delay(3000);
digitalWrite(kca, HIGH);
digitalWrite(kg, LOW);
}
}
}
Tags:
Olá Danilo.
Da forma como está feito o programa, e conforme a sua solicitação que é "parar" o programa quando a lógica for falsa, bastaria fazer um loop inifinito dentro de um "else" do "if".
Segue exemplo:
if (leitura1 == HIGH && leitura9 == HIGH && leitura8 == LOW){
delay(4000);
digitalWrite(kc, HIGH); // aciona contator da compania
delay(3000);
digitalWrite(kca, HIGH);
digitalWrite(kg, LOW);
}else{
while(1){}
}
Isso travaria seu programa, mas não é uma solução muito elegante e praticada.
Melhor que isto é você trabalhar com uma máquina de estados. Onde teriam por exemplo variáveis que te informem se o bloco deve ser executado ou não.
Não pude ajudar neste sentido pois você mandou poucas informações do que precisa fazer. Por exemplo, se o bloco deve parar de funcionar por um certo tempo, ou se ele deve voltar a funcionar dependendo de outros estados das entradas ou leituras.
Caso tenha mais informações, informe as mesmas para que eu ou outro colega possa te ajudar.
Espero ter ajudado.
T++.
Opa Daniel, vlw pelas infromações amigo, então ainda estou desenvolvendo o projeto sendo que usarei um arduino para monitorar os estados de sinal das entradas e de acordo com cada sinal(como fosse portas logicas) ele mandará um comando, sendo que preciso que quando alterar os estados os comandos ja se alterem de acordo com o estado que se encontra, se vc puder passar seu email te mostro os diagramas do projeto completo, bem bacana, segue as linhas de código que ja fiz e que precisam de melhoria, pois percebi que quando tiro o sinal da entrada está lavando um tempo pra sair o sinal de saída, isso complica por trabalhar com carga e contatores, ainda não tenho certeza se o problema é do softwares, pois estou simulando no Proteus 8.0, Obrigado pelo apoio, abraços.
int uno = 1; // entrada Modo stand bye
int run = 2; // habilita partida do gerador
int pg = 3; // aciona partida do gerador
int kc = 4; // aciona contator da compania
int kg = 5; // aciona contator do gerador
int kca = 12; // aciona contator da carga
int rs = 7; // entrada botão reset
int ffg = 8; // entrada falta de fase do gerador
int ffc = 9; // entrada falta de fase da compania
int fp = 10; // falha de partida
void setup()
{
pinMode(uno, INPUT);
pinMode(run, OUTPUT);
pinMode(pg, OUTPUT);
pinMode(kc, OUTPUT);
pinMode(kg, OUTPUT);
pinMode(kca, OUTPUT);
pinMode(rs, INPUT);
pinMode(ffg, INPUT);
pinMode(ffc, INPUT);
pinMode(fp, OUTPUT);
}
void loop()
{
int leitura1 = digitalRead(uno);
int leitura9 = digitalRead(ffc);
int leitura8 = digitalRead(ffg);
if (leitura1 == HIGH && leitura9 == HIGH && leitura8 == LOW)
{
delay(4000);
digitalWrite(kc, HIGH); // aciona contator da compania
delay(3000);
digitalWrite(kca, HIGH);
digitalWrite(kg, LOW);
}
else
{
digitalWrite(kc, LOW);
digitalWrite(kca, LOW);
}
if(leitura1 == HIGH)
{
if(leitura8 == LOW)
{
if(leitura9 == LOW)
{
digitalWrite(kc, HIGH);
delay(3000);
digitalWrite(kc, LOW);
}
}
}
}
obs: vou testar com o while, mas ainda não conheço bem esta função, abraços.
Beleza, te dou uma força no que puder. Meu email é: blogembarcado@gmail.com
Costumo fazer meus testes simulando com o Proteus também.
Uso o Simulino no Proteus, e até o momento sempre funcionou bem. ^^
T++.
vou te mandar agora e quem quiser dar uma olhadinha no projeto é só me passar o email, é bom para todos ^^, abraços.
Bom dia pessoal, aqui segue a lógica do projeto até a parte de acionar o gerador, mas o programa está dando erro quando tento chamar os códigos segue abaixo, desde já obrigado pela ajuda pessoal.
int uno = 1; // habilita modo automatico
int run = 2; // habilita partida do gerador
int pg = 3; // aciona partida do gerador
int kc = 4; // aciona contator da compania
int kg = 5; // aciona contator do gerador
int kca = 6; // aciona contator da carga
int rs = 7; // entrada botão reset
int ffg = 8; // entrada falta de fase do gerador
int ffc = 9; // entrada falta de fase da compania
int fp = 10; // falha de partida
int leitura1 = digitalRead(uno);
int leitura8 = digitalRead(ffg);
int leitura9 = digitalRead(ffc);
int leitura4 = digitalRead(kc);
//controle
void setup(){
pinMode(uno, INPUT);
pinMode(run, OUTPUT);
pinMode(pg, OUTPUT);
pinMode(kc, OUTPUT);
pinMode(kg, OUTPUT);
pinMode(kca, OUTPUT);
pinMode(rs, INPUT);
pinMode(ffg, INPUT);
pinMode(ffc, INPUT);
pinMode(fp, OUTPUT);
}
void loop()
{
if(leitura1 == HIGH && leitura8 == LOW && leitura9 == HIGH) //declaração lógica de comparação para executar a função change1
{
change1()//função declarada para executar o bloco de código
if(leitura1 == HIGH && leitura8 == LOW && leitura9 == LOW)// depois da função executada será necessario fazer outra comparação com if na sequencia
{
change2()
}
}
if(leitura1 == HIGH && (leitura8 == LOW) && (leitura9 == LOW) == (leitura4 == LOW))
{
change3()
}
}
void change1()
{//será colocado uma função aqui com delay e depois desta função necessito fazer outra comparação dentro do loop
}
void change2()
{
//aqui será colocada outra função com delay
}
void change3()
{
// aqui também ira fazer outra execução de acordo com a logica verdadeira
}
segue em anexo o hardware para simular no proteus também, abraços.
agora fiz o programa rodar melhorzinho, apenas não consigo fazer parar de rodar quando tiro o sinal da entrada 1 q deveria parar(modo automatico)
int uno = 1; // habilita modo automatico
int run = 2; // habilita partida do gerador
int pg = 3; // aciona partida do gerador
int kc = 4; // aciona contator da compania
int kg = 5; // aciona contator do gerador
int kca = 6; // aciona contator da carga
int rs = 7; // entrada botão reset
int ffg = 8; // entrada falta de fase do gerador
int ffc = 9; // entrada falta de fase da compania
int fp = 10; // falha de partida
//controle
void setup()
{
pinMode(uno, INPUT);
pinMode(run, OUTPUT);
pinMode(pg, OUTPUT);
pinMode(kc, OUTPUT);
pinMode(kg, OUTPUT);
pinMode(kca, OUTPUT);
pinMode(rs, INPUT);
pinMode(ffg, INPUT);
pinMode(ffc, INPUT);
pinMode(fp, OUTPUT);
}
void loop()
{
int leitura1 = digitalRead(uno);
int leitura8 = digitalRead(ffg);
int leitura9 = digitalRead(ffc);
int leitura4 = digitalRead(kc);
int leitura3 = digitalRead(pg);
if(leitura1 == HIGH)
{
if (leitura9 == HIGH)
{
digitalWrite(kg, LOW);
digitalWrite(pg, LOW);
digitalWrite(run, LOW);
delay(300);
digitalWrite(kc, HIGH);
delay(300);
digitalWrite(kca, HIGH);
}
else
{
if(leitura9 == LOW)
{
delay(300);
digitalWrite(kc, LOW);
delay(300);
digitalWrite(kca, LOW);
digitalWrite(run, HIGH);
delay(300);
digitalWrite(kg, HIGH);
}
}
}
}
Tentei a sugestão do nosso amigo Renyer para fazer u reset na programação se o nivel da porta 1 for baixo, mas não funcionaou ainda, ficou assim:
int uno = 1; // habilita modo automatico
int run = 2; // habilita partida do gerador
int pg = 3; // aciona partida do gerador
int kc = 4; // aciona contator da compania
int kg = 5; // aciona contator do gerador
int kca = 6; // aciona contator da carga
int rs = 7; // entrada botão reset
int ffg = 8; // entrada falta de fase do gerador
int ffc = 9; // entrada falta de fase da compania
int fp = 10; // falha de partida
//controle
void setup()
{
pinMode(uno, INPUT);
pinMode(run, OUTPUT);
pinMode(pg, OUTPUT);
pinMode(kc, OUTPUT);
pinMode(kg, OUTPUT);
pinMode(kca, OUTPUT);
pinMode(rs, INPUT);
pinMode(ffg, INPUT);
pinMode(ffc, INPUT);
pinMode(fp, OUTPUT);
}
void loop()
{
int leitura1 = digitalRead(uno);
int leitura8 = digitalRead(ffg);
int leitura9 = digitalRead(ffc);
int leitura4 = digitalRead(kc);
int leitura3 = digitalRead(pg);
if(leitura1 == HIGH)
{
if (leitura9 == HIGH)
{
digitalWrite(kg, LOW);
digitalWrite(pg, LOW);
digitalWrite(run, LOW);
delay(300);
digitalWrite(kc, HIGH);
delay(300);
digitalWrite(kca, HIGH);
}
else
{
int leitura1 = digitalRead(uno);
if(leitura9 ==LOW == leitura1)
{
delay(300);
digitalWrite(kc, LOW);
delay(300);
digitalWrite(kca, LOW);
digitalWrite(run, HIGH);
delay(300);
digitalWrite(kg, HIGH);
}
else
{
digitalWrite(rs, HIGH);
delay(300);
digitalWrite(rs, LOW);
digitalWrite(run, LOW);
digitalWrite(kg, LOW);
digitalWrite(kc, LOW);
digitalWrite(kca, LOW);
}
}
}
}
pelo q parece a porta else ja não está funcionando utilizando a lógica de comparadores =(
mas tem que fazer uma interrupção... quando clicar no botão "reset" ele deve parar TUDO que estiver fazendo e ir pra função de ler os TRES SENSORES INICIAIS...
OBS, as portas de interrupção são PADRÃO, se vc ja estiver usando elas vai ter que mudar...
abraço cara e ta QUASE LÁ...
só pra comentar aqui no tópico ^^, coloquei o reset, mas quando ligo o arduino ele ja fica marrado no reset e não sai mais
não chega a nem fazer as funções, já q a tabela verdade é a que preciso, acho q vou colocar um sinal a amis pra fazer funciona-lo
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por