Selo de acionamento em logica C

Saudações a todos
Desde já agradeço a boa vontade e colaboração de todos em compartilhar conosco vosso conhecimento.
como eu crio um sela de acionamento na logica do arduino.
1º Se ouver um pulso de acionamento na entrada (x)
2º Acione a saida (y) e que ela permaneça ligada ate que.
3º A entrada (w) receba um pulso de acionamento.

Um sistema de acionamento em selo e um sistema que recebe um pulso de uma determinada entrada digital e apartir dai fica ligado ou comumente dizendo selado, e que só se desliga quando recebe a intervenção de outra entrada digital, resumindo liga fica ligado e só desliga quando for atuado uma nova entrada digital para romper o selo.

#define FC1Pin 8 //fim de curso 1 na porta 8
#define FC2Pin 9 //fim de curso 2 na porta 9
#define saida1 3 //saida do acionamento digital porta 3
//…
void setup()
{
pinMode(FC1Pin,INPUT_PULLUP); //seta entrada 8 com o acionamento do FC1
pinMode(FC2Pin,INPUT_PULLUP); //seta entrada 9 com o acionamento do FC2
pinMode(saida1 ,OUTPUT); //seta saida led como saida digital
}
//…
void loop(){
if(digitalRead(FC1Pin) == HIGH){ //se botão 1 for High
digitalWrite(saida1,HIGH);} //liga o led
if(digitalRead(FC2Pin) == HIGH){ //se botão 2 for High
digitalWrite(saida1,LOW); //desliga o led
}}

Bom @SNIescas, Uma boa técnica é usar um bit pra criar o selo. Isso pode ser feito até com uma variável ‘char’ ou ‘byte’ no C++ do Arduino.

No Arduino (C++) existe uma variável que pode ajuda-lo nisso, chama-se “boolean”.

Esta variável assume dois valores {true|false} e pode ser usada sem problemas para criar o selo.

Na lógica apresentada você pode inserir uma variável chamada “selo” e fazer algo do tipo.

if(digitalRead(FC1Pin) == HIGH){ //se botão 1 for High
digitalWrite(saida1,HIGH);} //liga o led
selo1 = true; // selo que indica LED ligado
}
.
.
if(digitalRead(FC2Pin) == HIGH){ //se botão 2 for High
digitalWrite(saida1,LOW); //desliga o led
selo1 = false;
}

Na logica você pode verificar o estado do selo (em qualquer momento).

if (selo1) { // selo1 indica que o LED está ligado…
// o que deve ser feito se o selo1 estiver como ‘true’
digitalWrite(saida1,LOW);} //desliga o led
selo1 = false;
}

O legal da lógica booleana é que você pode inclusive usar os operadores NOT, OR e AND para validar um determinado estado.

if (!selo1 || selo2) {
// se o selo1 for ‘false’ (negação do ‘false’=‘true’) OU o selo2 = ‘true’ faça alguma coisa…
}

Com isso eu acredito que você pode implementar uma lógica com qualquer complexidade que deseje, mas creio que o ideal é você montar uma máquina de estados (https://pt.wikipedia.org/wiki/Máquina_de_estados_finita) pra depois não ficar perdido dentro da lógica que queira implementar.

No mais espero ter ajudado e qualquer coisa grite.

Abraços.

Boa noite WagnerB muito obrigado pela atenção, muito legal seu comentario obrigado.

1 Curtida