const int pinA = 12;  // Pines de entrada a, b, c, d
const int pinB = 14;
const int pinC = 27;
const int pinD = 26;

const int pinR = 16;  // Pines de salida r, v, a_out
const int pinV = 17;
const int pinAOut = 4;

void setup() {
  // Se definen los pines para a, b, c, d como input y riego, ventilador y alarma como salidas (output)
  pinMode(pinA, INPUT_PULLUP);  
  pinMode(pinB, INPUT_PULLUP);
  pinMode(pinC, INPUT_PULLUP);
  pinMode(pinD, INPUT_PULLUP);
  
  pinMode(pinR, OUTPUT);
  pinMode(pinV, OUTPUT);
  pinMode(pinAOut, OUTPUT);

  // Las salidas empiezan apagadas
  digitalWrite(pinR, LOW);
  digitalWrite(pinV, LOW);
  digitalWrite(pinAOut, LOW);
}

void loop() {
  // Lee el estado de los pins de entrada
  int a = !digitalRead(pinA);
  int b = !digitalRead(pinB);
  int c = !digitalRead(pinC);
  int d = !digitalRead(pinD);

  // Se definen las expresiones booleanas de la tabla de verdad
  int r = !a & b;
  int v = a & c | b | c & d;
  int a_out = a & b & c | a & b & d | b & !c & d;

  // Se otorga un estado dependiendo la lectura de pines
  digitalWrite(pinR, r);
  digitalWrite(pinV, v);
  digitalWrite(pinAOut, a_out);
}