TENHO UM TRABALHO DE ESCOLA PRA FAZER QUE FUNCIONA ASSIM:
Existe um sistema de reservatório composto de uma válvula de entrada P, duas bombas (acionadas por M1 e M2), um alarme A, e quatro sensores de nível (S1, S2, S3, S4). As condições de funcionamento são as seguintes: se o nível for S1, então fecha-se a válvula P; Se o nível for inferior a S2, então abre-se a válvula P; Nível acima de S2, M1 e M2 bombeiam; Nível abaixo de S2, somente M1 bombeia; Nível abaixo de S3 soa o alarme A; e Nível abaixo de S4, nenhuma das bombas deverá funcionar.
EU CONSEGUI FAZER O CODIGO QUE SEGUE ABAIXO, MAS TENHO DUVIDAS SE É POSSIVEL SIMPLIFICAR ESSE CODIGO. OBRIGADO A QUEM PUDER ME AJUDAR.
// OS NUMEROS NA FRENTE REPRESENTAM OS PINOS DO ARDUINO
// VARIAVEIS QUE REPRESENTAM OS SENSORES
int chaveA = 2; // SENSOR S1
int chaveB = 3; // SENSOR S2
int chaveC = 4; // SENSOR S3
int chaveD = 5; // SENSOR S4
// VARIAVEIS QUE REPRESENTAM O NIVEL QUE ESTÁ O TANQUE
// OS LEDS FORAM ADICIONADOS PARA REPRESENTAR VISUALMENTE O NIVEL DO TANQUE
int ledA = 6; // LED ACESO NO NIVEL DE S1
int ledB = 7; // LED ACESO NO NIVEL DE S2
int ledC = 8; // LED ACESO NO NIVEL DE S3
int ledD = 9; // LED ACESO NO NIVEL DE S4
int motorA = 10; // MOTOR 1
int motorB = 11; // MOTOR 2
int valvula = 12; // VALVULA P
int alarme = 13; // ALARME
// VARIAVEIS QUE ARMAZENAM QUAIS CHAVES ESTÃO ACIONADAS
int nivelA; // TODAS CHAVES ACIONADAS
int nivelB; // CHAVES B,C,D ACIONADAS
int nivelC; // CHAVES C,D ACIONADAS
int nivelD; // CHAVE D ACIONADA
int nivelvazio; // NENHUMA CHAVE ACIONADA
void setup()
{
pinMode(chaveA, INPUT); // ENTRADAS
pinMode(chaveB, INPUT);
pinMode(chaveC, INPUT);
pinMode(chaveD, INPUT);
pinMode(ledA, OUTPUT); // SAIDAS
pinMode(ledB, OUTPUT);
pinMode(ledC, OUTPUT);
pinMode(ledD, OUTPUT);
pinMode(motorA, OUTPUT);
pinMode(motorB, OUTPUT);
pinMode(valvula, OUTPUT);
pinMode(alarme, OUTPUT);
}
void loop()
{
// SE O TANQUE ESTIVER VAZIO
if (chaveA == LOW && chaveB == LOW && chaveC == LOW && chaveD == LOW)nivelvazio=1;
if(nivelvazio == 1)
{
digitalWrite(ledA, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledC, LOW);
digitalWrite(ledD, LOW);
digitalWrite(motorA, LOW);
digitalWrite(motorB, LOW);
digitalWrite(valvula, HIGH);
digitalWrite(alarme, HIGH);
}
// SE O TANQUE ESTIVER EM S4
if (chaveA == LOW && chaveB == LOW && chaveC == LOW && chaveD == HIGH)nivelD=1;
if(nivelD == 1)
{
digitalWrite(ledA, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledC, LOW);
digitalWrite(ledD, HIGH);
digitalWrite(motorA, HIGH);
digitalWrite(motorB, LOW);
digitalWrite(valvula, HIGH);
digitalWrite(alarme, HIGH);
}
// SE O TANQUE ESTIVER EM S3
if (chaveA == LOW && chaveB == LOW && chaveC == HIGH && chaveD == HIGH)nivelC=1;
if(nivelC == 1)
{
digitalWrite(ledA, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledC, HIGH);
digitalWrite(ledD, HIGH);
digitalWrite(motorA, HIGH);
digitalWrite(motorB, LOW);
digitalWrite(valvula, HIGH);
digitalWrite(alarme, LOW);
}
// SE O TANQUE ESTIVER EM S2
if (chaveA == LOW && chaveB == HIGH && chaveC == HIGH && chaveD == HIGH)nivelB=1;
if(nivelB == 1)
{
digitalWrite(ledA, LOW);
digitalWrite(ledB, HIGH);
digitalWrite(ledC, HIGH);
digitalWrite(ledD, HIGH);
digitalWrite(motorA, LOW);
digitalWrite(motorB, LOW);
digitalWrite(valvula, LOW);
digitalWrite(alarme, LOW);
// SE O TANQUE ESTIVER EM S1
if (chaveA == LOW && chaveB == LOW && chaveC == LOW && chaveD == LOW)nivelA=1;
if(nivelA == 1)
{
digitalWrite(ledA, HIGH);
digitalWrite(ledB, HIGH);
digitalWrite(ledC, HIGH);
digitalWrite(ledD, HIGH);
digitalWrite(motorA, HIGH);
digitalWrite(motorB, HIGH);
digitalWrite(valvula, LOW);
digitalWrite(alarme, LOW);
}
// SE O TANQUE ESTIVER EM OUTRA CONDIÇÃO
else
{
digitalWrite(ledA, LOW);
digitalWrite(ledB, LOW);
digitalWrite(ledC, LOW);
digitalWrite(ledD, LOW);
digitalWrite(motorA, LOW);
digitalWrite(motorB, LOW);
digitalWrite(valvula, LOW);
digitalWrite(alarme, HIGH);
}
}
}