Build Sheets

Source

Escape_Game_Final_FuelMix.ino

#include <Adafruit_NeoPixel.h>

// Define the number of LEDs per ring
#define NUM_LEDS 12
#define NUM_FUELS 3

// Define the pins for the NeoPixel rings
#define PIN_RING_RED    3
#define PIN_RING_GREEN  4
#define PIN_RING_BLUE   5

// Define the pins for the potentiometers
#define POT_PIN_RED     A0
#define POT_PIN_GREEN   A1
#define POT_PIN_BLUE    A2

// Create NeoPixel objects for each ring
Adafruit_NeoPixel ringRed = Adafruit_NeoPixel(NUM_LEDS, PIN_RING_RED, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel ringGreen = Adafruit_NeoPixel(NUM_LEDS, PIN_RING_GREEN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel ringBlue = Adafruit_NeoPixel(NUM_LEDS, PIN_RING_BLUE, NEO_GRB + NEO_KHZ800);

const byte relayPin = 11;
byte switchPin = 12;
int numLedsRed;
int numLedsGreen;
int numLedsBlue;
int potValueRed;
int potValueGreen;
int potValueBlue;

// Has the puzzle been solved?
bool isSolved = false;
bool relayTriggered = false;
//const byte solution[3] = [3,6,8];

void checkSolution() {
 if (numLedsRed == 6 && numLedsGreen == 3 && numLedsBlue ==8 && relayTriggered == false){
    isSolved = true;
    Serial.println("solved");
    digitalWrite(relayPin, HIGH);
    delay(200);
    digitalWrite(relayPin, LOW);
    relayTriggered = true;
      if (isSolved == true){
        delay(3000);
        ringRed.clear();
        ringGreen.clear();
        ringBlue.clear();
      };

  };
  isSolved = false;
}

void setup() {
  Serial.begin(9600);
  
  // Initialize the NeoPixel rings
  ringRed.begin();
  ringGreen.begin();
  ringBlue.begin();

  // Set the brightness (optional)
  ringRed.setBrightness(50);
  ringGreen.setBrightness(50);
  ringBlue.setBrightness(50);

  // Clear the rings
  ringRed.show();
  ringGreen.show();
  ringBlue.show();

  pinMode(switchPin, INPUT_PULLUP);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, LOW);

}

void loop() {
  // Read the potentiometer values
  potValueRed = analogRead(POT_PIN_RED);
  potValueGreen = analogRead(POT_PIN_GREEN);
  potValueBlue = analogRead(POT_PIN_BLUE);

  // Map the potentiometer values to the number of LEDs (1 to 12)
  numLedsRed = map(potValueRed, 0, 1023, 1, NUM_LEDS);
  Serial.println(numLedsRed);
  numLedsGreen = map(potValueGreen, 0, 1023, 1, NUM_LEDS);
  Serial.println(numLedsGreen);
  numLedsBlue = map(potValueBlue, 0, 1023, 1, NUM_LEDS);
  Serial.println(numLedsBlue);


  // Update the rings with the mapped values
    if (digitalRead(switchPin) == LOW){
  updateRing(ringRed, numLedsRed, 255, 0, 0);  // Red ring
  updateRing(ringGreen, numLedsGreen, 0, 255, 0);  // Green ring
  updateRing(ringBlue, numLedsBlue, 0, 0, 255);  // Blue ring
  delay(50);  // Small delay to smooth out the changes
  }
  checkSolution();
}

// Function to update the NeoPixel ring
void updateRing(Adafruit_NeoPixel &ring, int numLeds, int red, int green, int blue) {
  // Clear the ring
  ring.clear();

  // Light up the specified number of LEDs
  for (int i = 0; i < numLeds; i++) {
    ring.setPixelColor(i, ring.Color(red, green, blue));
  }

  // Show the changes on the ring
  ring.show();
}