// DEFINE ALL PINS TO COMPONENTS
// LED PINS + BRIGHTNESSES
const int LED_YELLOW_PIN = 5; int YELLOW_BRIGHTNESS = 0;
const int LED_BLUE_PIN = 6; int BLUE_BRIGHTNESS = 0;
const int LED_GREEN_PIN = 9; int GREEN_BRIGHTNESS = 0;
const int LED_RED_PIN = 10; int RED_BRIGHTNESS = 0;
// POT_PIN
#define potValue analogRead(POT_PIN)
const int POT_PIN = A0;
// LED brightness
int POT_INPUT_VALUE = 0;
int POT_INPUT_PREV_VALUE = 0;
int LED_BRIGHTNESS = 0;
int time = 0;
void setup() {
// ESTABLISH PIN MODES
pinMode(LED_YELLOW_PIN, OUTPUT);
pinMode(LED_BLUE_PIN, OUTPUT);
pinMode(LED_GREEN_PIN, OUTPUT);
pinMode(LED_RED_PIN, OUTPUT);
// CREATE TIME-STAMP
time = millis();
// READ POTENTIOMETER. MAP IT TO PMW VALUE AND SAVE TO VARIABLE
POT_INPUT_VALUE = potValue;
POT_INPUT_PREV_VALUE = potValue;
// ENABLE SERIAL MONITOR FOR DEBUGGING
Serial.begin(9600);
}
// ------ PRINT VALUES TO SCREEN --------
void displayValues() {
Serial.print("Sensor: ");
Serial.println(POT_INPUT_VALUE);
Serial.print("PWM Output: ");
Serial.println(LED_BRIGHTNESS);
}
// -------- OUTPUT TO LED'S --------
void outputLED() {
analogWrite(LED_YELLOW_PIN, YELLOW_BRIGHTNESS);
analogWrite(LED_RED_PIN, RED_BRIGHTNESS);
analogWrite(LED_GREEN_PIN, GREEN_BRIGHTNESS);
analogWrite(LED_BLUE_PIN, BLUE_BRIGHTNESS);
}
// -------- UPDATE EACH INDIVIDUAL LED'S BRIGHTNESS BASED ON THE POT WHILE MAKING WAVE PATTERN --------
void updateValues() {
LED_BRIGHTNESS = map(POT_INPUT_VALUE, 0, 1023, 0, 255);
YELLOW_BRIGHTNESS = LED_BRIGHTNESS;
RED_BRIGHTNESS = LED_BRIGHTNESS;
GREEN_BRIGHTNESS = LED_BRIGHTNESS;
BLUE_BRIGHTNESS = LED_BRIGHTNESS;
}
// ------------------- POT VALUE HAS CHANGED. UPDATE LED'S GRADUALLY IN WAVY PATTERN ----------------
void changingValues() {
// LED'S GRADUATE UP
if (potValue > POT_INPUT_PREV_VALUE){
Serial.println("ADJUST +"); // DEBUGGING
// STARTING WITH THE RED LED, GRADUALLY ADJUST EACH LED BRIGTHNESS IN A WAVE-LIKE PATTERN (LEFT TO RIGHT)
for(int i = LED_BRIGHTNESS; i <= map(potValue, 0, 1023, 0, 255); i+= 6){
Serial.print("PWM: "); // DEBUGGING
Serial.println(i); // DEBUGGING
delay(50);
analogWrite(LED_RED_PIN, i);
delay(50);
analogWrite(LED_GREEN_PIN, i);
delay(50);
analogWrite(LED_BLUE_PIN, i);
delay(50);
analogWrite(LED_YELLOW_PIN, i);
delay(50);
}
}
else if (potValue < POT_INPUT_PREV_VALUE){
Serial.println("ADJUST -"); // DEBUGGING
// STARTING WITH THE YELLOW LED, GRADUALLY ADJUST EACH LED BRIGTHNESS IN A WAVE-LIKE PATTERN (RIGHT TO LEFT)
for(int i = LED_BRIGHTNESS; i >= map(potValue, 0, 1023, 0, 255); i-= 6){
Serial.print("PWM: "); // DEBUGGING
Serial.println(i); // DEBUGGING
delay(50);
analogWrite(LED_YELLOW_PIN, i);
delay(50);
analogWrite(LED_BLUE_PIN, i);
delay(50);
analogWrite(LED_GREEN_PIN, i);
delay(50);
analogWrite(LED_RED_PIN, i);
delay(50);
}
}
Serial.println("--function end--"); // DEBUGGING
LED_BRIGHTNESS = map(potValue, 0, 1023, 0, 255);
outputLED();
}
// ===================================================================================================
// ======================================= MAIN LOOP ===============================================
void loop() {
time = millis(); // TIME STAMP FOR ALLOWING USER ADJUSTMENT TIME
delay(10);
// CHECK FOR POT CHANGES WITHIN TIME LIMIT TO ALLOW USER TIME TO ADJUST FURTHER
while(abs(potValue - POT_INPUT_VALUE) > 5 && millis() - time < 100){
Serial.print("---- Start Loop Time: "); // DEBUGGING
Serial.println(millis());
Serial.print("Current Value: ");
Serial.println(potValue);
Serial.print("Prev Value ");
Serial.println(POT_INPUT_VALUE);
}
Serial.println("--OUT--- "); // DEBUGGING
Serial.print("Time: "); // DEBUGGING
Serial.println(millis()); // DEBUGGING
// IF VALUE DIFFERENCE IS LARGE ENOUGH GO TO changingValues()
if(abs(potValue - POT_INPUT_VALUE) > 12){
// POT_INPUT_VALUE = potValue; // UPDATE POT INPUT VARIABLE
changingValues(); // CALL FUNCTION THAT GRADUATES LED CHANGING IN WAVY PATTERN
}
// UPDATE POT VALUE
POT_INPUT_VALUE = potValue; // UPDATE POT INPUT VARIABLE
//displayValues(); // DEBUGGING
updateValues();
outputLED();
}