Il progetto consiste nell'emulare le 7 porte logice (and, nand, or, nor, not, xor e xnor).
Tramite una selezione fatta da un potenziometro, da dei pulsanti che facevano da input delle porte e dei led per visualizzare il risultato d'uscita.
I pulsanti vanno messi a PULL_DOWN con le resistenze da 1000 ohm.
I pulsanti sono l'input della porta logica simulata con l'Arduino, se premuto l'input é 1 altrimenti é 0.
I led vanno messi a PULL_DOWN con le resistenze da 220 ohm.
I due led gialli rappresentano i valori di input della porta logica simulata con l'Arduino, il led rosso ne rappresenta l'uscita.

int button_A = 2;
int button_B = 4;
int led_A = 3;
int led_B = 5;
int led_Y = 6;
void setup() {
pinMode(button_A, INPUT);
pinMode(button_B, INPUT);
pinMode(led_A,OUTPUT);
pinMode(led_B,OUTPUT);
pinMode(led_Y,OUTPUT);
Serial.begin(9600);
}
int value = analogRead(A0);
String tipoPorta = "";
int sceltaPorta = 0;
if (value >= 0 && value < 128)
{
sceltaPorta = 0;
tipoPorta = "AND";
}
else if (value >= 128 && value < 256)
{
sceltaPorta = 1;
tipoPorta = "NAND";
}
else if (value >= 256 && value < 384)
{
sceltaPorta = 2;
tipoPorta = "OR";
}
else if (value >= 384 && value < 512)
{
sceltaPorta = 3;
tipoPorta = "NOR";
}
else if (value >= 512 && value < 640)
{
sceltaPorta = 4;
tipoPorta = "NOT";
}
else if (value >= 640 && value < 768)
{
sceltaPorta = 5;
tipoPorta = "XOR";
}
else
{
sceltaPorta = 6;
tipoPorta = "XNOR";
}
bool a = digitalRead(button_A);
bool b = digitalRead(button_B);
digitalWrite(led_A, a);
digitalWrite(led_B, b);
bool y = 0;
switch(sceltaPorta)
{
case 0: // AND
y = a && b;
break;
case 1: // NAND
y = !(a && b);
break;
case 2: // OR
y = a || b;
break;
case 3: // NOR
y = !(a || b);
break;
case 4: // NOT
y = !(a);
break;
case 5: // XOR
y = (!a && b) || (a && !b);
break;
case 6: // XNOR
y = ((a && b) || !(a && b));
break;
default:
break;
}
Scarica codice completo-
-