// #include <SPI.h>
// #include <Wire.h>
// #include <Adafruit_GFX.h>
// #include <Adafruit_SSD1306.h>
// #define SCREEN_WIDTH 128
// #define SCREEN_HEIGHT 64
// #define OLED_RESET -1
// #define SCREEN_ADDRESS 0x3C
// Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// #define LOGO_HEIGHT 16
// #define LOGO_WIDTH 16
// const int buttonPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// const char* functions[] = {"C", "D", "NOT", "A", "B", "+", "(", ")", ".", "'", "NOT"};
// void setup() {
// Serial.begin(9600);
// if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
// Serial.println(F("SSD1306 allocation failed"));
// for(;;);
// }
// display.display();
// delay(100);
// display.clearDisplay();
// display.setTextSize(1);
// display.setTextColor(SSD1306_WHITE);
// testdrawstyles();
// for (int i=0;i<11;i++) pinMode(buttonPins[i], INPUT_PULLUP);
// }
// void loop() {
// readButton();
// }
// void testdrawstyles(void) {
// display.clearDisplay();
// display.setCursor(0,0); display.println(F("Hello, world!"));
// display.display();
// }
// int x=0;
// void readButton()
// {
// for (int i = 0; i < 11; i++) {
// if (digitalRead(buttonPins[i]) == LOW) { // Button pressed
// Serial.print(functions[i]);
// display.setCursor(x,20); display.print(functions[i]);
// display.display();
// while(digitalRead(buttonPins[i]) == LOW);
// delay(300);
// x+=10;
// }
// }
// }
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int buttonPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
const char* functions[] = {"C", "D", "'", "A", "B", "+", "(", ")", ".", "'", "NOT"};
String equation = "";
void setup() {
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.display();
delay(100);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0);
display.println(F("Boolean Simplifier"));
display.display();
for (int i = 0; i < 11; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
}
void loop() {
readButton();
}
int x = 0;
void readButton() {
for (int i = 0; i < 11; i++) {
if (digitalRead(buttonPins[i]) == LOW) { // Button pressed
Serial.print(functions[i]);
equation += functions[i];
display.setCursor(x, 20);
display.print(functions[i]);
display.display();
while (digitalRead(buttonPins[i]) == LOW);
delay(300);
x += 10;
}
}
}
void simplifyEquation() {
// Example equation to simplify: \overline{A}B + AB + \overline{A}\overline{B}C
// Populate the K-map manually for this example
int kMap[4][2] = {
{0, 1}, // 00: A=0, B=0 -> C=0, C=1
{1, 1}, // 01: A=0, B=1 -> C=0, C=1
{0, 0}, // 10: A=1, B=0 -> C=0, C=1
{1, 1} // 11: A=1, B=1 -> C=0, C=1
};
// Display the K-map
display.clearDisplay();
display.setCursor(0, 0);
display.println("K-map:");
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 2; j++) {
display.print(kMap[i][j]);
display.print(" ");
}
display.println();
}
display.display();
delay(2000);
// Simplified equation (manually simplified for this example)
String simplifiedEquation = "B + A'C";
display.clearDisplay();
display.setCursor(0, 0);
display.println("Simplified:");
display.setCursor(0, 20);
display.print(simplifiedEquation);
display.display();
}