1

I'm doing synchronization blinking with three XBee module and Arduino Uno, the first is master, second is slave/master and the other one is a slave.

The master is going to give the command for both slave/master and slave to blinking, and when the master is switch off, the slave/master will taking over his job giving the command to blinking.

But the slave/master didn't go so well because of the coding didn't right.

Can anyone take a look at my coding and show me what is wrong with my coding.

Master Coding =

#include <SoftwareSerial.h>
#define Dout 2
#define Din 3
//#define LED 9
SoftwareSerial XBee(Dout, Din);

//char XBee_message;
int MasterSignalSent = 0;

const long interval = 2500;
unsigned long previousMillis = 0;   




void setup() {

Serial.begin(9600);
XBee.begin(9600);
pinMode(13, OUTPUT);

}

void loop(){

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    Serial.println(currentMillis);
    previousMillis = currentMillis;
      {
        delay(1500);
        SendMasterSignal();//+
        MasterSignalSent = 1;
        delay(1000);
        SendSyncSignal();//-
        BlinkLed();
        MasterSignalSent = 0;
        
    }
}
}
void SendMasterSignal()
  {
 Serial.println("SendingMasterSignal. . .");  
  XBee.write('+');
  }

void SendSyncSignal()
  {
  Serial.println("SendingSyncSignal. . .");  
  XBee.write('-');
  }

void BlinkLed()
  {
    digitalWrite(13, HIGH);
    delay(250);
    digitalWrite(13, LOW);
    //delay(2200);
  }

Slave/Master Coding =

#include <SoftwareSerial.h>
#define Dout  2
#define Din   3
SoftwareSerial XBee (Dout, Din);
const long interval = 2500;
unsigned long previousMillis = 0;   
int MasterSignalReceived = 0;
int ReceiveSyncSignal = 0;
int MasterSignalSent = 0;
char XBee_signal;

void setup() {

Serial.begin(9600);
XBee.begin(9600);
pinMode(13, OUTPUT);  

}

void loop() {

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {

      previousMillis = currentMillis;

     while(XBee.available()){
      XBee_signal = XBee.read();
      Serial.println(XBee_signal);
      delay(1500);
        
        if (MasterSignalReceived == 0)
        {
        BecomeMaster();
        }
        
        else if (MasterSignalReceived == 1)
        {
           if (XBee_signal = '-'){
                 BlinkLed();
                 (MasterSignalReceived = 0);
           }
          else{
             digitalWrite(13, LOW);
           }
        }
 }   
}
}
void BecomeMaster()
{
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    Serial.println(currentMillis);
    previousMillis = currentMillis;
      {
        delay(1500);
        SendMasterSignal();
        MasterSignalSent = 1;
        delay(2500);
        SendSyncSignal();
        BlinkLed();
        MasterSignalSent = 0;
        
    }
}
}

void SendMasterSignal()
  {
  XBee.write('+');
  Serial.println("SendMasterSignalDone");
  }

void SendSyncSignal()
  {
  XBee.write('-');
  Serial.println("SendSyncSignalDone");
  }

void BlinkLed()
  {
    digitalWrite(13, HIGH);
    delay(1000);
    digitalWrite(13, LOW);
    
  }

The slave is waiting for the command to blinking but the slave/master didn't send any command as the coding write when the master switches off.

0 Answers0