#include <AceButton.h>
#include <Preferences.h>
Preferences pref;
using namespace ace_button;
// GPIO for Relay (Appliance Control)
static uint8_t relay1 = 15;
// GPIO for Relay (Fan Speed Control)
static uint8_t Speed1 = 21;
static uint8_t Speed2 = 19;
static uint8_t Speed4 = 18;
// GPIO for Fan Regulator Knob
static uint8_t fan_switch = 33;
static uint8_t s1 = 27;
static uint8_t s2 = 14;
static uint8_t s3 = 12;
static uint8_t s4 = 13;
// Flags for Fan Speed
bool speed1_flag = 1;
bool speed2_flag = 1;
bool speed3_flag = 1;
bool speed4_flag = 1;
bool speed0_flag = 1;
int FanState = 0 ;
int Slider_Value = 0;
int curr_speed = 0;
bool fan_power = 0;
ButtonConfig config5;
AceButton button5(&config5);
void handleEvent5(AceButton*, uint8_t, uint8_t);
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pref.begin("Relay_State", false);
// Set the Relays GPIOs as output mode
pinMode(relay1, OUTPUT);
//Turning All Relays Off by default
digitalWrite(relay1, LOW);
// Set the Relays GPIOs as output mode
pinMode(Speed1, OUTPUT);
pinMode(Speed2, OUTPUT);
pinMode(Speed4, OUTPUT);
//Turning All Relays Off by default
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
pinMode(fan_switch, INPUT_PULLUP);
pinMode(s1, INPUT_PULLUP);
pinMode(s2, INPUT_PULLUP);
pinMode(s3, INPUT_PULLUP);
pinMode(s4, INPUT_PULLUP);
config5.setEventHandler(button5Handler);
button5.init(fan_switch);
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
button5.check();
fan();
}
//functions for defineing manual switch
void button5Handler(AceButton* button, uint8_t eventType, uint8_t buttonState)
{
Serial.println("EVENT5");
switch (eventType)
{
case AceButton::kEventPressed:
Serial.println("kEventPressed");
if (curr_speed == 0)
{
speed_0();
}
if (curr_speed == 1)
{
speed_1();
}
if (curr_speed == 2)
{
speed_2();
}
if (curr_speed == 3)
{
speed_3();
}
if (curr_speed == 4)
{
speed_4();
}
break;
case AceButton::kEventReleased:
Serial.println("kEventReleased");
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
fan_power = 0;
break;
}
}
// function for controling fan using regulator
void fan()
{
if ( digitalRead(s1) == LOW && speed1_flag == 1)
{
speed_1();
speed1_flag = 0;
speed2_flag = 1;
speed3_flag = 1;
speed4_flag = 1;
speed0_flag = 1;
}
if (digitalRead(s2) == LOW && digitalRead(s3) == HIGH && speed2_flag == 1)
{
speed_2();
speed1_flag = 1;
speed2_flag = 0;
speed3_flag = 1;
speed4_flag = 1;
speed0_flag = 1;
}
if (digitalRead(s2) == LOW && digitalRead(s3) == LOW && speed3_flag == 1)
//if (digitalRead(s2) == HIGH && digitalRead(s3) == LOW && speed3_flag == 1)
{
speed_3();
speed1_flag = 1;
speed2_flag = 1;
speed3_flag = 0;
speed4_flag = 1;
speed0_flag = 1;
}
if (digitalRead(s4) == LOW && speed4_flag == 1)
{
speed_4();
speed1_flag = 1;
speed2_flag = 1;
speed3_flag = 1;
speed4_flag = 0;
speed0_flag = 1;
}
if (digitalRead(s1) == HIGH && digitalRead(s2) == HIGH && digitalRead(s3) == HIGH && digitalRead(s4) == HIGH && speed0_flag == 1)
{
speed_0();
speed1_flag = 1;
speed2_flag = 1;
speed3_flag = 1;
speed4_flag = 1;
speed0_flag = 0;
}
}
//functions for defineing of speeds
void speed_0()
{
//All Relays Off - Fan at speed 0
Serial.println("SPEED 0");
fan_power = 0;
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
pref.putInt("Fan", curr_speed);
}
void speed_1()
{
//Speed1 Relay On - Fan at speed 1
Serial.println("SPEED 1");
curr_speed = 1;
fan_power = 1;
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
delay(1000);
digitalWrite(Speed1, HIGH);
pref.putInt("Fan", curr_speed);
}
void speed_2()
{
//Speed2 Relay On - Fan at speed 2
Serial.println("SPEED 2");
curr_speed = 2;
fan_power = 1;
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
delay(1000);
digitalWrite(Speed2, HIGH);
pref.putInt("Fan", curr_speed);
}
void speed_3()
{
//Speed1 & Speed2 Relays On - Fan at speed 3
Serial.println("SPEED 3");
curr_speed = 3;
fan_power = 1;
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
delay(1000);
digitalWrite(Speed1, HIGH);
digitalWrite(Speed2, HIGH);
pref.putInt("Fan", curr_speed);
}
void speed_4()
{
//Speed4 Relay On - Fan at speed 4
Serial.println("SPEED 4");
curr_speed = 4;
fan_power = 1;
digitalWrite(Speed1, LOW);
digitalWrite(Speed2, LOW);
digitalWrite(Speed4, LOW);
delay(1000);
digitalWrite(Speed4, HIGH);
pref.putInt("Fan", curr_speed);
}