Entradas: A, B, C, D (Número binario de 4 bits, donde A=MSB y D=LSB) | Salidas: nPrimos, nPares, nImpares
| Entradas | Valor Decimal | Salidas | |||||
|---|---|---|---|---|---|---|---|
| A | B | C | D | nPrimos (Pin 13) | nPares (Pin 12) | nImpares (Pin 11) | |
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 2 | 1 | 1 | 0 |
| 0 | 0 | 1 | 1 | 3 | 1 | 0 | 1 |
| 0 | 1 | 0 | 0 | 4 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 5 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 6 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 7 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 8 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 9 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 10 | 0 | 1 | 0 |
| 1 | 0 | 1 | 1 | 11 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 12 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 | 13 | 1 | 0 | 1 |
| 1 | 1 | 1 | 0 | 14 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 15 | 0 | 0 | 1 |
1. Número Primo:
2. Número Par:
3. Número Impar:
const int leds[] = {13,12,11,10,9,8,7,6,5};
const int entradas[] = {28,26,24,22};
const int numeroLeds = sizeof(leds) / sizeof(leds[0]);
const int numeroEntradas = sizeof(entradas) / sizeof(entradas[0]);
bool A, B, C, D, nPrimos, nPares, nImpares;
void setup()
{
Serial.begin(115200);
for(int i = 0; i < numeroLeds; i++){
pinMode(leds[i], OUTPUT);
}
for(int i = 0; i < numeroEntradas; i++){
pinMode(entradas[i], INPUT);
}
}
void loop()
{
A = digitalRead(entradas[0]); // Leo estado Pin 28
B = digitalRead(entradas[1]); // Leo estado Pin 26
C = digitalRead(entradas[2]); // Leo estado Pin 24
D = digitalRead(entradas[3]); // Leo estado Pin 22
// Funciones
nPrimos = (!A && !B && C && !D) ||
(!A && !B && C && D) ||
(!A && B && !C && D) ||
(!A && B && C && D) ||
(A && !B && C && D) ||
(A && B && !C && D);
// Misma función con + y * : nPrimos = !A*!B*C*!D + !A*!B*C*D + !A*B*!C*D + !A*B*C*D + A*!B*C*D + A*B*!C*D;
// Función Simplificada (Karnaugh): nImpares = nPrimos = !A*!B*C + !B*C*D + !A*B*D + B*!C*D;
nPares = !A*!B*!C*!D + !A*!B*C*!D + !A*B*!C*!D + !A*B*C*!D + A*!B*!C*!D + A*!B*C*!D + A*B*!C*!D + A*B*C*!D;
// También se puede hacer con (nPares = !A) o (nPares = A^B^C^D)
nImpares = !A*!B*!C*!D + !A*!B*C*!D + !A*B*!C*!D + !A*B*C*!D + A*!B*!C*!D + A*!B*C*!D + A*B*!C*!D + A*B*C*!D;
// También se puede hacer con (nImpares = !nPares), (nImpares = A) o (nImpares = !(A^B^C^D))
// Salidas
digitalWrite(leds[0], nPrimos); // Salida Nº Primo en Pin 13
digitalWrite(leds[1], nPares); // Salida Nº Par en Pin 12
digitalWrite(leds[2], nImpares); // Salida Nº Impar en Pin 11
}