// ---------------------------
// LED pin assignments
// ---------------------------
const int aled = 4; // RED (top-left)
const int bled = 2; // GREEN (top-right)
const int cled = A3; // BLUE (bottom-left)
const int dled = A5; // YELLOW(bottom-right)
// Array of LED pins in the order A B C D
int leds[4] = { aled, bled, cled, dled };
// ---------------------------
// Active-low LED functions
// (because you wired 5V → LED → R → PIN)
// ---------------------------
void ledOn(int pin) {
digitalWrite(pin, LOW); // pin LOW = LED ON
}
void ledOff(int pin) {
digitalWrite(pin, HIGH); // pin HIGH = LED OFF
}
// Display a 4-bit number like 1010 on the serial monitor
void print4bit(int value) {
for (int bit = 3; bit >= 0; bit--) {
Serial.print((value >> bit) & 1);
}
Serial.println();
}
// Light LEDs according to a 4-bit pattern (ABCD)
void showPattern(int pattern) {
for (int i = 0; i < 4; i++) {
int bit = (pattern >> (3 - i)) & 1; // get bit 3→0
if (bit == 1)
ledOn(leds[i]);
else
ledOff(leds[i]);
}
}
void setup() {
Serial.begin(9600);
// Set LED pins as OUTPUT and turn them off
for (int i = 0; i < 4; i++) {
pinMode(leds[i], OUTPUT);
ledOff(leds[i]);
}
randomSeed(analogRead(A0)); // randomness
}
void loop() {
// Example: generate 4 actions
const int ACTION_COUNT = 4;
int actions[ACTION_COUNT];
Serial.println("Generated pattern:");
for (int i = 0; i < ACTION_COUNT; i++) {
// Allowed patterns (no diagonals, no singles)
int validActions[5] = {
0b1100, // A + B
0b0011, // C + D
0b1111, // all 4
0b1010, // A + C (vertical left)
0b0101 // B + D (vertical right)
};
actions[i] = validActions[random(0, 5)];
print4bit(actions[i]); // show in Serial
}
Serial.println("Showing pattern...");
for (int i = 0; i < ACTION_COUNT; i++) {
showPattern(actions[i]); // turn LEDs on
delay(500);
// turn them all off between flashes
for (int j = 0; j < 4; j++) ledOff(leds[j]);
delay(300);
}
Serial.println("---- NEW ROUND ----\n");
delay(1500);
}