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();
}