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