good day all.
I have been playing around with Arduino for a while but I am not a programmer but work with electronics. I have managed to write this sketch with great struggle and was hoping there would be someone able and willing to help me to add debounce to the 5 buttons i have as input_pullup in the sketch.
I am using an Arduino Nano, HC05 Bluetooth module, some relay modules(different ones was all i had available) and momentary push buttons(hardware).
this sketch works perfectly well until i have noise from a different appliance that is not part of this circuit. any and all help would be greatly appreciated.
// define the GPIO connected with Relays and switches
#define Kitchen 2 //D2
#define Seating 3 //D3
#define Bathroom 4 //D4
#define Ambient 5 //D5
#define AwningL 6 //D6
#define AwningIn 7 //D7
#define AwningOut 8 //D8
#define StepOut 9 //D9
#define StepIn 10 //D10
#define SwitchPin1 A0 //A0
#define SwitchPin2 A1 //A1
#define SwitchPin3 A2 //A2
#define SwitchPin4 A3 //A3
#define SwitchPin5 A4 //A4
int toggleState_1 = 1; //Define integer to remember the toggle state for relay 1
int toggleState_2 = 1; //Define integer to remember the toggle state for relay 2
int toggleState_3 = 1; //Define integer to remember the toggle state for relay 3
int toggleState_4 = 1; //Define integer to remember the toggle state for relay 4
int toggleState_5 = 1; //Define integer to remember the toggle state for relay 5
char bt_data; // variable for storing bluetooth data
void relayOnOff(int relay) {
switch (relay) {
case 1:
if (toggleState_1 == 1) {
digitalWrite(Kitchen, LOW); // turn on relay 1
toggleState_1 = 0;
Serial.println("Kitchen Lights ON");
} else {
digitalWrite(Kitchen, HIGH); // turn off relay 1
toggleState_1 = 1;
Serial.println("Kitchen Lights OFF");
}
delay(100);
break;
case 2:
if (toggleState_2 == 1) {
digitalWrite(Seating, LOW); // turn on relay 2
toggleState_2 = 0;
Serial.println("Seating Lights ON");
} else {
digitalWrite(Seating, HIGH); // turn off relay 2
toggleState_2 = 1;
Serial.println("Seating Lights OFF");
}
delay(100);
break;
case 3:
if (toggleState_3 == 1) {
digitalWrite(Bathroom, LOW); // turn on relay 3
toggleState_3 = 0;
Serial.println("Bathroom Lights ON");
} else {
digitalWrite(Bathroom, HIGH); // turn off relay 3
toggleState_3 = 1;
Serial.println("Bathroom Lights OFF");
}
delay(100);
break;
case 4:
if (toggleState_4 == 1) {
digitalWrite(Ambient, LOW); // turn on relay 4
toggleState_4 = 0;
Serial.println("Ambient Lights ON");
} else {
digitalWrite(Ambient, HIGH); // turn off relay 4
toggleState_4 = 1;
Serial.println("Ambient Lights OFF");
}
delay(100);
break;
case 5:
if (toggleState_5 == 1) {
digitalWrite(AwningL, LOW); // turn on relay 5
toggleState_5 = 0;
Serial.println("Awning Light ON");
} else {
digitalWrite(AwningL, HIGH); // turn off relay 5
toggleState_5 = 1;
Serial.println("Awning Light OFF");
}
delay(100);
break;
default: break;
}
}
void without_internet() {
//Manual Switch Control
if (digitalRead(SwitchPin1) == LOW) {
delay(200);
relayOnOff(1);
} else if (digitalRead(SwitchPin2) == LOW) {
delay(200);
relayOnOff(2);
} else if (digitalRead(SwitchPin3) == LOW) {
delay(200);
relayOnOff(3);
} else if (digitalRead(SwitchPin4) == LOW) {
delay(200);
relayOnOff(4);
} else if (digitalRead(SwitchPin5) == LOW) {
delay(200);
relayOnOff(5);
}
}
void all_Switch_ON() {
digitalWrite(Kitchen, LOW);
toggleState_1 = 0;
delay(100);
digitalWrite(Seating, LOW);
toggleState_2 = 0;
delay(100);
digitalWrite(Bathroom, LOW);
toggleState_3 = 0;
delay(100);
digitalWrite(Ambient, LOW);
toggleState_4 = 0;
delay(100);
digitalWrite(AwningL, LOW);
toggleState_5 = 0;
delay(100);
}
void all_Switch_OFF() {
digitalWrite(Kitchen, HIGH);
toggleState_1 = 1;
delay(100);
digitalWrite(Seating, HIGH);
toggleState_2 = 1;
delay(100);
digitalWrite(Bathroom, HIGH);
toggleState_3 = 1;
delay(100);
digitalWrite(Ambient, HIGH);
toggleState_4 = 1;
delay(100);
digitalWrite(AwningL, HIGH);
toggleState_5 = 1;
delay(100);
}
void Bluetooth_handle() {
bt_data = Serial.read();
// Serial.println(bt_data);
delay(20);
switch (bt_data) {
case 'A':
digitalWrite(Kitchen, LOW);
toggleState_1 = 0;
break; // if 'A' received Turn on Relay1
case 'a':
digitalWrite(Kitchen, HIGH);
toggleState_1 = 1;
break; // if 'a' received Turn off Relay1
case 'B':
digitalWrite(Seating, LOW);
toggleState_2 = 0;
break; // if 'B' received Turn on Relay2
case 'b':
digitalWrite(Seating, HIGH);
toggleState_2 = 1;
break; // if 'b' received Turn off Relay2
case 'C':
digitalWrite(Bathroom, LOW);
toggleState_3 = 0;
break; // if 'C' received Turn on Relay3
case 'c':
digitalWrite(Bathroom, HIGH);
toggleState_3 = 1;
break; // if 'c' received Turn off Relay3
case 'D':
digitalWrite(Ambient, LOW);
toggleState_4 = 0;
break; // if 'D' received Turn on Relay4
case 'd':
digitalWrite(Ambient, HIGH);
toggleState_4 = 1;
break; // if 'd' received Turn off Relay4
case 'E':
digitalWrite(AwningL, LOW);
toggleState_5 = 0;
break; // if 'E' received Turn on Relay5
case 'e':
digitalWrite(AwningL, HIGH);
toggleState_5 = 1;
break; // if 'e' received Turn off Relay5
case 'F':
digitalWrite(AwningIn, LOW);
delay(200);
digitalWrite(AwningIn,HIGH);
break; // if 'F' received Turn on Relay6 for 0.2s
case 'G':
digitalWrite(AwningOut, HIGH);
delay(200);
digitalWrite(AwningOut,LOW);
break; // if 'G' received Turn on Relay7 for 0.2s
case 'H':
digitalWrite(StepOut, LOW);
delay(1000);
digitalWrite(StepOut,HIGH);
break; // if 'H' received Turn on Relay8 for 1s
case 'I':
digitalWrite(StepIn, LOW);
delay(1000); // if 'I' received Turn on Relay9 for 1s
digitalWrite(StepIn,HIGH);
break;
case 'Z': all_Switch_ON(); break; // if 'Z' received Turn on all Relays
case 'z': all_Switch_OFF(); break; // if 'z' received Turn off all Relays
default: break;
}
}
void setup() {
Serial.begin(9600);
Serial.println("The device started, now you can pair it with bluetooth!");
delay(5000);
pinMode(Kitchen, OUTPUT);
pinMode(Seating, OUTPUT);
pinMode(Bathroom, OUTPUT);
pinMode(Ambient, OUTPUT);
pinMode(AwningL, OUTPUT);
pinMode(AwningIn, OUTPUT);
pinMode(AwningOut, OUTPUT);
pinMode(StepOut, OUTPUT);
pinMode(StepIn, OUTPUT);
// pinMode(wifiLed, OUTPUT);
pinMode(SwitchPin1, INPUT_PULLUP);
pinMode(SwitchPin2, INPUT_PULLUP);
pinMode(SwitchPin3, INPUT_PULLUP);
pinMode(SwitchPin4, INPUT_PULLUP);
pinMode(SwitchPin5, INPUT_PULLUP);
//During Starting all Relays should TURN OFF
digitalWrite(Kitchen, toggleState_1);
digitalWrite(Seating, toggleState_2);
digitalWrite(Bathroom, toggleState_3);
digitalWrite(Ambient, toggleState_4);
digitalWrite(AwningL, toggleState_5);
digitalWrite(AwningIn, HIGH);
digitalWrite(AwningOut, LOW);
digitalWrite(StepOut, HIGH);
digitalWrite(StepIn, HIGH);
delay(200);
}
void loop() {
without_internet();
if (Serial.available()) {
Bluetooth_handle();
}
}