//////////////////////////////////// IO Mapping Physical ////////////////////////////////////
const int buttonPin1 = 7;
const int buttonPin2 = 8;
const int buttonPin3 = 9;
const int relayPin1 = 10;
const int relayPin2 = 11;
const int relayPin3 = 12;
const int relayPin4 = 13;
const int ledPin1 = 0; //led in 0 but can't use serial if in that pin
const int ledPin2 = 1; //led in 1 but can't use serial if in that pin
const int ledPin3 = 2;
const int ledPin4 = 3;
const int potPin = A1;
//////////////////////////////////// local variables ////////////////////////////////////
int buttonState1;
int buttonState2;
int buttonState3;
int lastButtonState1 = 0;
int lastbuttonState2 = 0;
int lastButtonState3 = 0;
int ledState1;
int ledState2;
int ledState3;
int ledState4;
int ledTrigger2 = 0;
int ledTrigger3 = 0;
int ledTrigger4 = 0;
int lastLedTrigger2 = 0;
int lastLedTrigger3 = 0;
int lastLedTrigger4 = 0;
int dailyTrigger = 0;
int lastDailyTrigger = 0;
int dailyScheduleActive = 0;
//////////////////////////////////// Timer Variables ////////////////////////////////////
unsigned long dailyTimer = 10000; //24 * 60ul * 60ul * 1000ul;
unsigned long dailyTimerStart;
unsigned long startTime1;
unsigned long startTime2;
unsigned long startTime3;
unsigned long startTime4;
unsigned long minValue = 1000UL; // 1 seconds in milliseconds (scaled to 0V)
unsigned long maxValue = 10000UL; // 10 seconds in milliseconds (scaled to 5V)
//////////////////////////////////// Void Setup ////////////////////////////////////
void setup() {
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(potPin, INPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(relayPin4, OUTPUT);
}
//////////////////////////////////// Void Loop ////////////////////////////////////
void loop()
{
buttonState3 = digitalRead(buttonPin3);
if (buttonState3 == HIGH)
{
if (lastDailyTrigger == 0)
{
dailyScheduleActive = 1;
dailyTimerStart = millis();
}
lastDailyTrigger = buttonState3;
if (millis() - dailyTimerStart <= dailyTimer)
{
dailyTrigger = HIGH;
}
}
int potValue = analogRead(potPin); // Read potentiometer value (0 to 1023)
unsigned long mappedValue = map(potValue, 0, 1023, minValue, maxValue); //Scale Raw Value to Min/Max
delay(100); //Delay for Stability
buttonState2 = digitalRead(buttonPin2); //Check For Button Press
if (buttonState2 == HIGH) //If Button Pressed
{
mappedValue = 0; // set Timer to 0 secs essentailly skipping current relay
}
delay(50); //Delay for stability
buttonState1 = digitalRead(buttonPin1); //Check For Button Press
if (buttonState1 == HIGH || dailyTrigger == HIGH) //If Button Pressed
{
if (lastButtonState1 == 0) // lastButtonState starts as zero so this statement is true
{
ledState1 = 1; //turn ledState from 0 to 1
startTime1 = millis(); //start On Timer
}
}
lastButtonState1 = buttonState1; //lastButtonState is zero but buttonState is high so lastButtonState is now 1
if (ledState1) //ledState is 1 now so this statement is true
{
if (millis() - startTime1 <= mappedValue)
//Until the startTime reaches above the interval time the loop will choose this if statement rather than the else which turns off // the LED
{
digitalWrite(ledPin1, HIGH); //turns on the LED
digitalWrite(relayPin1, HIGH);
}
else
{
digitalWrite(ledPin1, LOW); //turns off LED and resets the ledState
ledState1 = 0;
ledTrigger2 = 1;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LED 2 Sequence
if (ledTrigger2 == 1)
{
if (lastLedTrigger2 == 0)
{
ledState2 = 1;
startTime2 = millis();
}
lastLedTrigger2 = ledTrigger2;
if (ledState2 == 1)
{
if (millis() - startTime2 <= mappedValue)
{
digitalWrite(ledPin2, HIGH);
digitalWrite(relayPin2, HIGH);
}
else
{
digitalWrite(ledPin2, LOW);
digitalWrite(relayPin2, LOW);
ledState2 = 0;
ledTrigger2 = 0;
lastLedTrigger2 = 0;
ledTrigger3 = 1;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// LED 3 sequence
if (ledTrigger3 == 1)
{
if (lastLedTrigger3 == 0)
{
ledState3 = 1;
startTime3 = millis();
}
lastLedTrigger3 = ledTrigger3;
if (millis() - startTime3 <= mappedValue)
{
digitalWrite(ledPin3, HIGH);
digitalWrite(relayPin3, HIGH);
}
else
{
digitalWrite(ledPin3, LOW);
digitalWrite(relayPin3, LOW);
ledState3 = 0 ;
ledTrigger3 = 0;
lastLedTrigger3 = 0;
ledTrigger4 = 1;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
// LED 4 sequence
if (ledTrigger4 == 1)
{
if (lastLedTrigger4 == 0)
{
ledState4 = 1;
startTime4 = millis();
}
lastLedTrigger4 = ledTrigger4;
if (millis() - startTime4 <= mappedValue)
{
digitalWrite(ledPin4, HIGH);
digitalWrite(relayPin4, HIGH);
}
else
{
digitalWrite(ledPin4, LOW);
digitalWrite(relayPin4, LOW);
ledState4 = 0;
lastLedTrigger4 = 0;
ledTrigger4 = 0;
}
}
}