Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- The code on the master
- -----------------------------
- #include "Wire.h"
- setup add Wire.begin();
- // Master write data to the Slave, send multiple data to the slave
- void write_to_slave(int slave_number, int desirable_temp, boolean mode) // Master write to Slave ,send data to Slave
- {
- Wire.beginTransmission(slave_number); // start data transmission to device #slave_number
- Wire.write(desirable_temp); // sends one byte
- Wire.write(mode); // sends one byte
- Wire.endTransmission(); // stop transmitting
- }
- // Master reader form Slave device <number>,room[x][i]
- // Master receive data from the Slave
- void read_form_slave(int device,int room_number)
- {
- Wire.requestFrom(device,4); //request 4 bytes from device <number>
- while(Wire.available()) // slave may send less than requested
- {
- for(int i=0;i<4;i++)
- {
- int t;
- t = Wire.read(); // receive a byte as character
- room[room_number].room_temperature=t; // Use my own class, you can change for other variable
- t = Wire.read();
- room[room_number].user_temperature=t;
- t = Wire.read();
- room[room_number].motor_damper_status=t;
- t = Wire.read();
- room[room_number].thermostat_power_status=t;
- }
- }
- }
- The code on the slave - Send multiple data to the master
- --------------------------------
- The code on the Slave
- -------------------------------
- #define Slave_Address 2
- add on the setup
- Wire.begin(Slave_Address); // join i2c bus with address #2
- Wire.onRequest(requestEvent); // register event Slave sender to Master
- Wire.onReceive(receiveEvent); // register event Slave receiver from Master
- //Slave sende multiple data to Master
- void requestEvent()
- {
- uint8_t Buffer[4];
- Buffer[0]=room[0]; //room temperature
- Buffer[1]=room[1]; //Desirable room temperature
- Buffer[2]=room[2]; //damper status OPEN/CLOSE
- Buffer[3]=room[3]; //power ON/OFF
- Wire.write(Buffer,4);
- }
- //Slave receiver from Master
- void receiveEvent(int howMany)
- {
- while (Wire.available() > 0)
- {
- int x = Wire.read(); // receive byte as an integer
- uint8_t m = Wire.read(); // receive boolean true or false
- Serial.print("the data receive is: ");
- Serial.println(x); // print the integer
- temp_by_user=x; //receive desirable user temp for the room when user change in master
- mode=m; // boolean variable
- }
- }
Add Comment
Please, Sign In to add comment