I found that I cannot push button to make the led light when there is serial.read() or mySerial.read() there.
#mySerial is software serial
I want to do this:
Board A push button and send sign to Board B
Board B get the sign and flash orange light
Board B wait for the button push
if Board B button is push, green/red light will turn on and signal will send to Board A
Board A receive signal and turn on the green/red light too.
Aduino board A (Push button to send signal and then wait for the signal from Board B)
#include <SoftwareSerial.h>
#define callButton 8
#define greenLight 13
#define redLight 7
int val;
SoftwareSerial mySerial(2, 3); //RX, TX
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(callButton, INPUT_PULLUP);
pinMode(greenLight, OUTPUT);
digitalWrite(greenLight, LOW);
digitalWrite(redLight, LOW);
}
void loop() {
if (mySerial.available() > 0)
{
mySerial.listen();
val = mySerial.read();
if (digitalRead(callButton) == LOW)
{
mySerial.write(200);
pinMode(callButton, INPUT_PULLUP);
delay(500);
}
if (val == 100)
{
digitalWrite(greenLight, HIGH);
delay(250);
}
if (val == 50)
{
digitalWrite(redLight, HIGH);
delay(250);
}
if (val == 70)
{
digitalWrite(redLight, LOW);
digitalWrite(greenLight, LOW);
delay(250);
}
}
}
Aduino board B (receive signal from board A and then push button to reply)
#define greenLight 13
#define orangeLight 12
#define redLight 11
#define greenButton 7
#define redButton 4
#define resetButton 8
#include <SoftwareSerial.h>
int val;
SoftwareSerial mySerial(2, 3); //RX, TX
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(greenLight, OUTPUT);
digitalWrite(greenLight, LOW);
pinMode(orangeLight, OUTPUT);
digitalWrite(orangeLight, LOW);
pinMode(redLight, OUTPUT);
digitalWrite(redLight, LOW);
pinMode(redButton, INPUT_PULLUP);
pinMode(greenButton, INPUT_PULLUP);
pinMode(resetButton, INPUT_PULLUP);
}
void loop() {
if (mySerial.available() > 0)
{
val = mySerial.read();
if (val == 200)
{
for(int i = 0; i < 20; i++)
{
digitalWrite(orangeLight, !digitalRead(orangeLight));
delay(300);
}
mySerial.end();
}
if (digitalRead(greenButton) == LOW)
{
digitalWrite(greenLight, HIGH);
mySerial.write(100);
delay(100);
}
if (digitalRead(redButton) == LOW)
{
digitalWrite(redLight, HIGH);
mySerial.write(50);
delay(100);
}
if (digitalRead(resetButton) == LOW)
{
digitalWrite(redLight, LOW);
digitalWrite(greenLight, LOW);
digitalWrite(orangeLight, LOW);
mySerial.write(70);
delay(100);
}
}
}