diff src/main.cpp @ 0:1e69eae27ed0

add code
author Dennis <dennis@denniscm.com>
date Fri, 25 Aug 2023 17:23:11 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.cpp	Fri Aug 25 17:23:11 2023 +0100
@@ -0,0 +1,109 @@
+#include <Arduino.h>
+#include <LiquidCrystal.h>
+
+const int pinLogicMain = 8;
+const int pinLogicSecondary = 9;
+const int pinNextGate = 10;
+const int pinEnter = 11;
+const int pinLed = 12;
+
+int stateLogicMain = 0;
+int stateLogicSecondary = 0;
+int stateNextGate = 0;
+int stateEnter = 0;
+int stateLed = 0;
+
+int logicModeEnabled = 0;
+
+#define GATES_SIZE 7
+const char* gates[GATES_SIZE] = {"AND", "OR", "NOT", "NAND", "NOR", "XOR", "XNOR"};
+int gateSelected = -1;
+
+const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
+LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
+
+void setup()
+{
+	Serial.begin(9600);
+
+	pinMode(pinLogicMain, INPUT);
+	pinMode(pinLogicSecondary, INPUT);
+	pinMode(pinNextGate, INPUT);
+	pinMode(pinEnter, INPUT);
+	pinMode(pinLed, OUTPUT);
+	
+	lcd.begin(16, 2);
+	lcd.print("Select gate");
+}
+
+void ledControl(int enabled)
+{
+	if (enabled) {
+		digitalWrite(pinLed, HIGH);
+	} else {
+		digitalWrite(pinLed, LOW);
+	}
+}
+
+void loop()
+{
+	stateLogicMain = digitalRead(pinLogicMain);
+	stateLogicSecondary = digitalRead(pinLogicSecondary);
+	stateNextGate = digitalRead(pinNextGate);
+	stateEnter = digitalRead(pinEnter);
+	stateLed = digitalRead(pinLed);
+
+	if (stateNextGate == HIGH) {
+		logicModeEnabled = 0;
+		
+		if (gateSelected + 1 < GATES_SIZE) {
+			gateSelected++;
+		} else {
+			gateSelected = 0;
+		}
+		
+		lcd.clear();
+
+		char msg[16];
+		sprintf(msg, "%i -> %s", gateSelected, gates[gateSelected]);
+		lcd.setCursor(0, 0);
+		lcd.print(msg);
+		delay(500);
+	}
+
+	if (stateEnter == HIGH && logicModeEnabled == 0) {
+		logicModeEnabled = 1;
+	}
+
+	if (logicModeEnabled == 1) {
+		lcd.setCursor(0, 1);
+		lcd.print("Enabled");
+		lcd.setCursor(0, 0);
+
+		switch (gateSelected) {
+		case 0:
+			ledControl(stateLogicMain && stateLogicSecondary);
+			break;
+		case 1:
+			ledControl(stateLogicMain || stateLogicSecondary);
+			break;
+		case 2:
+			ledControl(!stateLogicMain);
+			break;
+		case 3:
+			ledControl(!(stateLogicMain && stateLogicSecondary));
+			break;
+		case 4:
+			ledControl(!(stateLogicMain || stateLogicSecondary));
+			break;
+		case 5:
+			ledControl(stateLogicMain != stateLogicSecondary);
+			break;
+		case 6:
+			ledControl(stateLogicMain == stateLogicSecondary);
+			break;
+		}
+	} else {
+		digitalWrite(pinLed, LOW);
+	}
+}