As variáveis de saída
e
deverão comandar o motor para fazer o elevador
e
, descer
e
,
e, ainda, continuar um movimento iniciado (
).
As variáveis de entrada serão os interruptores memorizadores dentro da cabine (
interligado com o botão de chamada no piso térreo e
interligado com o do piso superior), e os sensores (
e
) colocados nos pisos, para indicar a presença correta do compartimento no andar. Considere o não funcionamento do motor com qualquer das portas abertas, a desativação da chamada na chegada ao piso de destino e a devida temporização antes do início de um novo ciclo de operação.
As variáveis de entrada serão os interruptores memorizadores dentro da cabine (
Passo 1
Beleza, vamos resolver um problema de lógica booleana para controlar um elevador.
Conteúdo: Álgebra Booleana e mapas de Karnaugh (ou simplificação direta).
O que precisamos:
Conteúdo: Álgebra Booleana e mapas de Karnaugh (ou simplificação direta).
O que precisamos:
- Entender as variáveis de entrada e saída.
- Montar a função lógica que dê, simultaneamente, os quatro comandos:
• subir (M_S=1, M_D=0)
• descer (M_S=0, M_D=1)
• parar (M_S=0, M_D=0)
• continuar movimento (M_S=1, M_D=1) - Simplificar com álgebra booleana (ou Karnaugh).
Passo 2
Definindo as variáveis:
• T = botão de chamada no piso térreo (memorizado enquanto não atendido)
• S = botão de chamada no piso superior (idem)
• P_T = sensor “está no térreo?” (1 se sim)
• P_S = sensor “está no superior?” (1 se sim)
Saídas:
• M_S (manda subir)
• M_D (manda descer)
• T = botão de chamada no piso térreo (memorizado enquanto não atendido)
• S = botão de chamada no piso superior (idem)
• P_T = sensor “está no térreo?” (1 se sim)
• P_S = sensor “está no superior?” (1 se sim)
Saídas:
• M_S (manda subir)
• M_D (manda descer)
Agora, pensando em cada caso:
- Se S=1 e P_S=0 → preciso ir pra cima ⇒ quero (M_S=1, M_D=0).
- Se T=1 e P_T=0 → preciso ir pra baixo ⇒ (M_S=0, M_D=1).
- Se P_S=1 ou P_T=1 chegou no destino e zera o pedido ⇒ (M_S=0, M_D=0).
- Se T=1 e S=1 e estou entre andares (P_S=0,P_T=0) → quero “continuar” o movimento ⇒ (M_S=1, M_D=1).
- Se T=0 e S=0 → sem chamado ⇒ (M_S=0, M_D=0).
Passo 3
Vamos traduzir essas regras em funções booleanas.
Repare:
Repare:
- Sempre que S=1 e P_S=0 eu tenho M_S=1.
- Sempre que T=1 e P_T=0 eu tenho M_D=1.
- Nos demais casos (cheguei ou sem chamado) esse produto cai a zero.
Logo as expressões candidatas são:
M_S = S ⋅ ¬P_S
M_D = T ⋅ ¬P_T
Passo 4
Verificação rápida em cada cenário:
- S=0, T=0 → M_S=0⋅…=0, M_D=0⋅…=0 ⇒ parar.
- S=1,P_S=0,T=0,P_T=x → M_S=1, M_D=0 ⇒ subir.
- T=1,P_T=0,S=0,P_S=x → M_S=0, M_D=1 ⇒ descer.
- S=1,T=1,P_S=0,P_T=0 → M_S=1,M_D=1 ⇒ continuar.
- Se cheguei no destino (P_S=1 ou P_T=1) zera o termo ⇒ 0,0 ⇒ parar.
Está tudo certinho!
Resposta
M_S = S · ¬P_S
M_D = T · ¬P_T
M_D = T · ¬P_T