//6SHWINT - MIDTERM PAROL PROJECT
//Group 1:
//Castro, Aubrey
//Dacquil, Kristine
//Masbang, Coleen
//NW - 301
//09-15-2024
#include <FastLED.h>
// Pin definitions
const int rgbPinR = 46;
const int rgbPinG = 47;
const int rgbPinB = 48;
int orangePins[] = {2, 5, 13};
int purplePins[] = {3, 10, 30, 31, 32, 33, 34, 35, 36, 37};
int redPins[] = {4, 9, 22, 23, 24, 25, 26, 27, 28, 29};
int bluePins[] = {6, 11, 38, 39, 40, 41, 42, 43, 44, 45};
int greenPin = 7;
int pinkPins[] = {8, 12};
// Time interval based on 166 BPM (roughly 361 milliseconds per beat)
int beatInterval = 361;
// Helper function to turn on an array of pins together
void turnOnPins(int pins[], int size) {
for (int i = 0; i < size; i++) {
digitalWrite(pins[i], HIGH);
}
}
// Helper function to turn off an array of pins together
void turnOffPins(int pins[], int size) {
for (int i = 0; i < size; i++) {
digitalWrite(pins[i], LOW);
}
}
// RGB Blink function
void blinkRGB() {
digitalWrite(rgbPinR, HIGH);
digitalWrite(rgbPinG, HIGH);
digitalWrite(rgbPinB, HIGH);
delay(beatInterval / 2);
digitalWrite(rgbPinR, LOW);
digitalWrite(rgbPinG, LOW);
digitalWrite(rgbPinB, LOW);
delay(beatInterval / 2);
}
// RGB Fade function
void fadeRGB() {
for (int i = 0; i <= 255; i++) {
analogWrite(rgbPinR, i);
analogWrite(rgbPinG, i);
analogWrite(rgbPinB, i);
delay(5);
}
for (int i = 255; i >= 0; i--) {
analogWrite(rgbPinR, i);
analogWrite(rgbPinG, i);
analogWrite(rgbPinB, i);
delay(5);
}
}
// Setup
void setup() {
// Set all pins as outputs
for (int i = 0; i < sizeof(orangePins) / sizeof(orangePins[0]); i++) {
pinMode(orangePins[i], OUTPUT);
}
for (int i = 0; i < sizeof(purplePins) / sizeof(purplePins[0]); i++) {
pinMode(purplePins[i], OUTPUT);
}
for (int i = 0; i < sizeof(redPins) / sizeof(redPins[0]); i++) {
pinMode(redPins[i], OUTPUT);
}
for (int i = 0; i < sizeof(bluePins) / sizeof(bluePins[0]); i++) {
pinMode(bluePins[i], OUTPUT);
}
pinMode(greenPin, OUTPUT);
for (int i = 0; i < sizeof(pinkPins) / sizeof(pinkPins[0]); i++) {
pinMode(pinkPins[i], OUTPUT);
}
pinMode(rgbPinR, OUTPUT);
pinMode(rgbPinG, OUTPUT);
pinMode(rgbPinB, OUTPUT);
}
// Loop
void loop() {
// RGB effects
blinkRGB();
fadeRGB();
// Turn on all Blue pins together with pins 6 and 11
turnOnPins(bluePins, sizeof(bluePins) / sizeof(bluePins[0]));
digitalWrite(6, HIGH);
digitalWrite(11, HIGH);
delay(beatInterval);
turnOffPins(bluePins, sizeof(bluePins) / sizeof(bluePins[0]));
digitalWrite(6, LOW);
digitalWrite(11, LOW);
// Turn on all Purple pins together with pins 3 and 10
turnOnPins(purplePins, sizeof(purplePins) / sizeof(purplePins[0]));
digitalWrite(3, HIGH);
digitalWrite(10, HIGH);
delay(beatInterval);
turnOffPins(purplePins, sizeof(purplePins) / sizeof(purplePins[0]));
digitalWrite(3, LOW);
digitalWrite(10, LOW);
// Turn on all Red pins together with pins 4 and 9
turnOnPins(redPins, sizeof(redPins) / sizeof(redPins[0]));
digitalWrite(4, HIGH);
digitalWrite(9, HIGH);
delay(beatInterval);
turnOffPins(redPins, sizeof(redPins) / sizeof(redPins[0]));
digitalWrite(4, LOW);
digitalWrite(9, LOW);
// Turn on all Orange pins together
turnOnPins(orangePins, sizeof(orangePins) / sizeof(orangePins[0]));
delay(beatInterval * 2);
turnOffPins(orangePins, sizeof(orangePins) / sizeof(orangePins[0]));
// Turn on Green pin and both Pink pins together
digitalWrite(greenPin, HIGH);
turnOnPins(pinkPins, sizeof(pinkPins) / sizeof(pinkPins[0]));
delay(beatInterval);
digitalWrite(greenPin, LOW);
turnOffPins(pinkPins, sizeof(pinkPins) / sizeof(pinkPins[0]));
// Random combination effect: Select random combinations of Orange and Pink pins with groups
int randomIndex;
randomIndex = random(0, 3);
digitalWrite(orangePins[randomIndex], HIGH);
randomIndex = random(0, 2);
digitalWrite(pinkPins[randomIndex], HIGH);
// Delay to match the beat
delay(beatInterval);
// Turn off the randomly selected pins
digitalWrite(orangePins[randomIndex], LOW);
digitalWrite(pinkPins[randomIndex], LOW);
}