annotate src/main.cpp @ 0:1e69eae27ed0

add code
author Dennis <dennis@denniscm.com>
date Fri, 25 Aug 2023 17:23:11 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
1 #include <Arduino.h>
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
2 #include <LiquidCrystal.h>
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
3
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
4 const int pinLogicMain = 8;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
5 const int pinLogicSecondary = 9;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
6 const int pinNextGate = 10;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
7 const int pinEnter = 11;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
8 const int pinLed = 12;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
9
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
10 int stateLogicMain = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
11 int stateLogicSecondary = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
12 int stateNextGate = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
13 int stateEnter = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
14 int stateLed = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
15
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
16 int logicModeEnabled = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
17
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
18 #define GATES_SIZE 7
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
19 const char* gates[GATES_SIZE] = {"AND", "OR", "NOT", "NAND", "NOR", "XOR", "XNOR"};
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
20 int gateSelected = -1;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
21
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
22 const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
23 LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
24
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
25 void setup()
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
26 {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
27 Serial.begin(9600);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
28
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
29 pinMode(pinLogicMain, INPUT);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
30 pinMode(pinLogicSecondary, INPUT);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
31 pinMode(pinNextGate, INPUT);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
32 pinMode(pinEnter, INPUT);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
33 pinMode(pinLed, OUTPUT);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
34
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
35 lcd.begin(16, 2);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
36 lcd.print("Select gate");
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
37 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
38
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
39 void ledControl(int enabled)
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
40 {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
41 if (enabled) {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
42 digitalWrite(pinLed, HIGH);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
43 } else {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
44 digitalWrite(pinLed, LOW);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
45 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
46 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
47
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
48 void loop()
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
49 {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
50 stateLogicMain = digitalRead(pinLogicMain);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
51 stateLogicSecondary = digitalRead(pinLogicSecondary);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
52 stateNextGate = digitalRead(pinNextGate);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
53 stateEnter = digitalRead(pinEnter);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
54 stateLed = digitalRead(pinLed);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
55
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
56 if (stateNextGate == HIGH) {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
57 logicModeEnabled = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
58
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
59 if (gateSelected + 1 < GATES_SIZE) {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
60 gateSelected++;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
61 } else {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
62 gateSelected = 0;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
63 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
64
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
65 lcd.clear();
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
66
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
67 char msg[16];
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
68 sprintf(msg, "%i -> %s", gateSelected, gates[gateSelected]);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
69 lcd.setCursor(0, 0);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
70 lcd.print(msg);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
71 delay(500);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
72 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
73
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
74 if (stateEnter == HIGH && logicModeEnabled == 0) {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
75 logicModeEnabled = 1;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
76 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
77
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
78 if (logicModeEnabled == 1) {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
79 lcd.setCursor(0, 1);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
80 lcd.print("Enabled");
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
81 lcd.setCursor(0, 0);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
82
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
83 switch (gateSelected) {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
84 case 0:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
85 ledControl(stateLogicMain && stateLogicSecondary);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
86 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
87 case 1:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
88 ledControl(stateLogicMain || stateLogicSecondary);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
89 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
90 case 2:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
91 ledControl(!stateLogicMain);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
92 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
93 case 3:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
94 ledControl(!(stateLogicMain && stateLogicSecondary));
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
95 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
96 case 4:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
97 ledControl(!(stateLogicMain || stateLogicSecondary));
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
98 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
99 case 5:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
100 ledControl(stateLogicMain != stateLogicSecondary);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
101 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
102 case 6:
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
103 ledControl(stateLogicMain == stateLogicSecondary);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
104 break;
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
105 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
106 } else {
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
107 digitalWrite(pinLed, LOW);
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
108 }
1e69eae27ed0 add code
Dennis <dennis@denniscm.com>
parents:
diff changeset
109 }