4 entradas · 1 salida

Ejercicio de tabla de verdad a partir de un sistema real: barrera automática de un parking.

Entrega en tu sitio

Crea en EMP la carpeta 3_barrera_coches con un index.html (tabla, función lógica y programa). No uses una carpeta genérica tareas.

Enunciado · Barrera de acceso

En la entrada de un parking subterráneo hay una barrera automática. El controlador lógico decide si la barrera debe abrirse o permanecer cerrada.

El sistema dispone de 4 señales de entrada (0 o 1) y 1 salida hacia el motor:

Condiciones de funcionamiento (seguridad incluida):

Función lógica pedida:

F = (A · B · C) + (D · C)

Completa la tabla de verdad (16 filas). Puedes pulsar cada celda de F para conmutar 0/1 en clase, o usar el botón para ver la solución.

Entradas A · Detector B · Ticket C · Fotocélula D · Vigilante Control F · Motor Barrera: 1 = abrir · 0 = cerrada
Dec Acoche Bticket Clibre Dmanual Fabrir

Pulsa cada celda de F para explicar fila a fila. El botón aplica o quita la solución según F = C·(A·B + D).

Programa Arduino · barrera de acceso

Mismo cableado que puertasLogicas: entradas en 28, 26, 24, 22 y salidas en LEDs del array O[].

Ambos LEDs deben coincidir en todas las combinaciones de A, B, C, D.

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 · función sacada de la tabla (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 · misma función simplificada
  F_simplificada = C * (A * B + D);
  digitalWrite(O[1], F_simplificada);

  mostrarEntradasEnMonitor();
}

void mostrarEntradasEnMonitor() {
  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);
}