Good Morning All,
I'm working on a project that has two parts, a MASTER side and a SLAVE side. The MASTER side had a reed switch that when opened, an LED on the SLAVE side changes from green to red. Works just fine.
On the SLAVE side there is a button that when pressed, a relay on the MASTER side closes for a quarter of a second. This also works just fine. The problem is when the reed switch is open and a signal is being sent to the SLAVE, the push button still kind of works but not as I expect it would. If I press the button, the relay clicks a few times if at all. Sometimes I need to press it a few times to get it to work.
What I think I need to do in my code is somehow stop everything at both the MASTER and SLAVE when the button is pressed so the signal can get from the SLAVE to the MASTER uninterrupted. Below is my code and a video of what's happening. Thank you in advance.
VIDEO
Garage Door Opener Issues
MASTER CODE
#include <SoftwareSerial.h>
#define redLed A0
#define greenLed A1
#define blueLed A2
SoftwareSerial mySerial(3, 2); // Rx | Tx
#define GarSwitch 4
#define relay 5
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
mySerial.begin(38400);
pinMode(GarSwitch, INPUT_PULLUP);
pinMode(relay, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
digitalWrite(redLed, LOW);
digitalWrite(greenLed, LOW);
digitalWrite(blueLed, LOW);
}
void loop() {
// Sending
int Garage = digitalRead(GarSwitch);
if (Garage == HIGH) {
mySerial.print('a');
}
// Receiving
if (mySerial.available())
Serial.write(mySerial.read());
if (mySerial.read() == 'b') {
digitalWrite(relay, LOW);
delay(30);
} else {
digitalWrite(relay, HIGH);
}
}
SLAVE CODE
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2); // Rx | Tx
#define redLed 7
#define greenLed 6
#define blueLed 5
#define Button 4
#define pwrLed A0
void setup()
{
Serial.begin(115200);
mySerial.begin(38400);
pinMode(pwrLed, OUTPUT);
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
pinMode(Button, INPUT_PULLUP);
digitalWrite(pwrLed, HIGH);
}
void loop()
{
// Receiving
if (mySerial.available())
Serial.write(mySerial.read());
if (mySerial.read() == 'a')
{
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
delay(25);
}
else
{
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
}
// Sending
int button = digitalRead(Button);
if (button == LOW)
{
mySerial.print('b');
digitalWrite(greenLed, LOW);
digitalWrite(redLed, LOW);
digitalWrite(blueLed, HIGH);
} else {
digitalWrite(blueLed, LOW);
digitalWrite(greenLed,LOW);
digitalWrite(redLed, LOW);
}
}