0

I have written the following code for Arduino:

#define relay2 2
#define relay3 3
#define relay4 4
#define relay5 5
#define relay6 6
#define relay7 7
#define relay8 8
#define relay9 9
byte val;
void setup() {
 Serial.begin(9600);
 pinMode(relay2, OUTPUT);
 pinMode(relay3, OUTPUT);
 pinMode(relay4, OUTPUT);
 pinMode(relay5, OUTPUT);
 pinMode(relay6, OUTPUT);
 pinMode(relay7, OUTPUT);
 pinMode(relay8, OUTPUT);
}
void loop() {
 int a = 0;
 if (Serial.available()) {
 val = Serial.read();
 Serial.println(int(val));
 //Display received value on Serial Monitor
 //ASCII VALUES 
 if (int(val) == 49) //Turn Light1 ON 1
 digitalWrite(relay2, HIGH);
 else if (int(val) == 50) //Turn Light1 OFF 2
 digitalWrite(relay2, LOW);
 if (int(val) == 51) //Turn Light2 ON
 digitalWrite(relay3, HIGH);
 else if (int(val) == 52) //Turn Light2 OFF
 digitalWrite(relay3, LOW);
 if (int(val) == 53) //Turn Light3 ON
 digitalWrite(relay4, HIGH);
 else if (int(val) == 54) //Turn Light3 OFF
 digitalWrite(relay4, LOW);
 if (int(val) == 55) //Turn AC ON
 digitalWrite(relay5, HIGH);
 else if (int(val) == 56) //Turn AC OFF
 digitalWrite(relay5, LOW);
 if (int(val) == 57) //Lock the DOOR
 digitalWrite(relay6, HIGH);
 else if (int(val) == 48) //Unlock the DOOR
 digitalWrite(relay6, LOW);
 }
}

Now on the Android side I have written the following code:

 //Bluetooth connection code ....
 mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
 mmSocket.connect();
 mmOutputStream = mmSocket.getOutputStream();
 mmInputStream = mmSocket.getInputStream();
 int byteCount = mmInputStream.available();
 if (byteCount > 0) {
 byte[] rawBytes = new byte[byteCount];
 mmInputStream.read(rawBytes);
 String string = new String(rawBytes);
 Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
 }

Now it works perfectly when I press a button to turn the light on/off. But I want to read all relay current status (high/low) when a Bluetooth connection is made.

So basically after connecting to the Bluetooth module I want all relay status.

How can I do that?

dda
1,5951 gold badge12 silver badges17 bronze badges
asked Mar 7, 2017 at 5:13

2 Answers 2

2

It's rather undocumented, but you can actually use digitalRead(relay2); on a pin (ex relay2) that is set to OUTPUT. I discovered it accidentally, and it worked exactly as expected, so i looked it up and it's legit. This is very handy to check an output pin's hi/lo state from a non-connected part of the code.

There is a tiny performance dip compared to reading just a variable, but it usually won't be noticed. If you need top performance, wrap the digitalWrite() with your own function, and set a variable with the new state:

int myState[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
void digitalWrite2(int pin, int value){
 myState[pin] = value; // copy setting to a global array
 digitalWrite(pin, value); // apply the setting as intended
}

Now, you can instantly get all the relay states from the myState array, provided they've been set with digitalWrite2. The other advantage to an array is that you can easily persist it to SPIFFs or EEPROM as-needed and recover the relay states on the next boot.

answered Mar 7, 2017 at 21:22
0

Changing the mode of the pins would be a pain, so you might be better to store the state of the relays within you Arduino code (a bool array) as long as you know what state they start in, then send the data back over the serial connection.

Define an array of pin numbers, an array of Boolean states and rework your code to change both arrays at the same time when a number comes in.

answered Mar 7, 2017 at 13:37
1
  • Hi , Can you please explain me in brief with some demo code or can you provide some reference link ? . I am new to arduino uno family. so i am learning step by step. Commented Mar 7, 2017 at 17:46

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.