← Volver a EMP

← TAREAS DE EMP

Barrera de acceso

Solución de la tarea · 4 entradas (A B C D) · 1 salida F (abrir barrera).

Entradas: A coche · B ticket · C fotocélula libre · D pulsador vigilante.

Condiciones: abrir si (coche y ticket y paso libre) o (vigilante y paso libre). Si C=0, nunca abrir.

Función sin factorizar: F = (A·B·C) + (D·C)

Función simplificada: F = C·(A·B + D)

Tabla de verdad (solución)

DecABCDF

Función desde la tabla (SOP, sin simplificar)

Minterms con F=1: 3, 7, 11, 14, 15

F = Ā·B̄·C·D + Ā·B·C·D + A·B̄·C·D + A·B·C·D̄ + A·B·C·D

Programa Arduino

const int O[] = { 13, 12, 11, 10, 9, 8, 7, 6, 5 };
const int nO = 9;
const int I[] = { 28, 26, 24, 22 };
const int nI = 4;
bool A, B, C, D;
bool F_tabla;        // LED 13 · sin simplificar (SOP de la tabla)
bool F_simplificada; // LED 12 · F = C·(A·B + D)

void setup() {
  Serial.begin(9600);
  for (int i = 0; i < nO; i++) pinMode(O[i], OUTPUT);
  for (int i = 0; i < nI; i++) pinMode(I[i], INPUT);
}

void loop() {
  A = digitalRead(I[0]);  // pin 28 · detector coche
  B = digitalRead(I[1]);  // pin 26 · ticket
  C = digitalRead(I[2]);  // pin 24 · fotocélula libre
  D = digitalRead(I[3]);  // pin 22 · pulsador vigilante

  // LED 13 · minterms F=1: 3,7,11,14,15
  F_tabla = !A * !B * C * D + !A * B * C * D + A * !B * C * D +
            A * B * C * !D + A * B * C * D;
  digitalWrite(O[0], F_tabla);

  // LED 12 · simplificada
  F_simplificada = C * (A * B + D);
  digitalWrite(O[1], F_simplificada);

  Serial.print(A); Serial.print(" ");
  Serial.print(B); Serial.print(" ");
  Serial.print(C); Serial.print(" ");
  Serial.print(D);
  Serial.print(" | F13="); Serial.print(F_tabla);
  Serial.print(" F12="); Serial.println(F_simplificada);
}