Unit 14: Nothing is logical

 

 

 

Code for Sketch One: 


#include 

// Define pin numbers
const int greenButtonPin = 13;
const int redButtonPin = 11;
const int blueButtonPin = 9;
const int ledPin = 12;  // Added semicolon

// TM1637 display pins
const int CLK = 6;
const int DIO = 7;

// Initialize display
GyverTM1637 display(CLK, DIO);

// Initialize variables
int displayNumber = 0;
int lastGreenButtonState = LOW;

void setup() {
    // Set button pins as input with internal pull-up resistors
    pinMode(greenButtonPin, INPUT_PULLUP);
    pinMode(redButtonPin, INPUT_PULLUP);
    pinMode(blueButtonPin, INPUT_PULLUP);
    
    // Set LED pin as output
    pinMode(ledPin, OUTPUT);
    
    // Initialize the display
    display.clear();
    display.brightness(7); // Set brightness level (0-7)
    display.displayInt(displayNumber); // Display initial number
}

void loop() {
    // Read button states (active low)
    int greenButtonState = !digitalRead(greenButtonPin);
    int redButtonState = !digitalRead(redButtonPin);
    int blueButtonState = !digitalRead(blueButtonPin);
    
    // Check if green button is pressed
    if (greenButtonState == HIGH && lastGreenButtonState == LOW) {
        displayNumber = (displayNumber + 1) % 8;  // Cycle through 0 to 7
        display.displayInt(displayNumber);
    }
    lastGreenButtonState = greenButtonState;
    
    // Determine LED state based on display number and button states
    switch (displayNumber) {
        case 0: // Default state - Nothing happening
            digitalWrite(ledPin, LOW);
            break;
        case 1: // AND Gate
            if (redButtonState == HIGH && blueButtonState == HIGH) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
        case 2: // NAND Gate
            if (!(redButtonState == HIGH && blueButtonState == HIGH)) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
        case 3: // NOR Gate
            if (redButtonState == LOW && blueButtonState == LOW) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
        case 4: // OR Gate
            if (redButtonState == HIGH || blueButtonState == HIGH) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
        case 5: // XNOR Gate
            if ((redButtonState == LOW && blueButtonState == LOW) || (redButtonState == HIGH && blueButtonState == HIGH)) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
        case 6: // XOR Gate
            if ((redButtonState == HIGH && blueButtonState == LOW) || (redButtonState == LOW && blueButtonState == HIGH)) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
        case 7: // NOT Gate
            if (redButtonState == LOW) {
                digitalWrite(ledPin, HIGH);
            } else {
                digitalWrite(ledPin, LOW);
            }
            break;
    }
}

 

Notes: