Porte Logiche

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.

Hardware Richiesto

  • Arduino or Genuino Board [1]
  • Potenziometro [1]
  • Pulsante [2]
  • Led [3]
  • Resistenza (220 ohm) [3]
  • Resistenza (1000 ohm) [2]
  • Circuito

    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.





    Vedi circuito

    Legenda dei pin

  • D2 - Digital Input Pulsante (B[0])
  • D3 - Analog Output Led (L[0])
  • D4 - Digital Input Pulsante (B[1])
  • D5 - Analog Output Led (L[1])
  • D6 - Analog Output Led (L[2])
  • A0 - Analog Input Potenziometro
  • 5V - Alimentazione
  • GND - Massa


  • Legenda dei colori

  • Nero - GND
  • Blu - Digital Input
  • Arangione - Analog Output
  • Marrone - +3.3V
  • Rosso - +5V
  • Grigio - Extra
  • Verde - Digital Output
  • Bianco - Extra
  • Giallo - Analog Input
  • Codice Sorgente

    Istanzia dei pin

    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);
    }
    			

    Scelta della porta logica

    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";
    }
    			

    Calcolo dell'uscita della porta

    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

    Problematiche

    -

    Soluzioni

    -