noam76

Master Slave I2C

Oct 22nd, 2017
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.32 KB | None | 0 0
  1. The code on the master
  2. -----------------------------
  3. #include "Wire.h"
  4.  
  5. setup add Wire.begin();
  6.  
  7. // Master write data to the Slave, send multiple data to the slave
  8. void write_to_slave(int slave_number, int desirable_temp, boolean mode) // Master write to Slave ,send data to Slave
  9. {
  10.   Wire.beginTransmission(slave_number); // start data transmission to device #slave_number
  11.   Wire.write(desirable_temp); // sends one byte
  12.   Wire.write(mode); // sends one byte
  13.   Wire.endTransmission();    // stop transmitting
  14. }
  15.  
  16.  // Master reader form Slave device <number>,room[x][i]
  17. // Master receive data from the Slave
  18. void read_form_slave(int device,int room_number)
  19. {
  20.  Wire.requestFrom(device,4);    //request 4 bytes from device <number>
  21.  while(Wire.available())    // slave may send less than requested
  22.  {
  23.   for(int i=0;i<4;i++)
  24.   {
  25.    int t;
  26.    t = Wire.read(); // receive a byte as character
  27.    room[room_number].room_temperature=t; // Use my own class, you can change for other variable
  28.    t = Wire.read();
  29.    room[room_number].user_temperature=t;
  30.    t = Wire.read();
  31.    room[room_number].motor_damper_status=t;
  32.    t = Wire.read();
  33.    room[room_number].thermostat_power_status=t;
  34.   }
  35.  }
  36. }
  37.  
  38. The code on the slave - Send multiple data to the master
  39.  
  40. --------------------------------
  41. The code on the Slave
  42. -------------------------------
  43. #define Slave_Address 2
  44.  
  45. add on the setup
  46.  Wire.begin(Slave_Address);                // join i2c bus with address #2
  47.  Wire.onRequest(requestEvent); // register event Slave sender to Master
  48.  Wire.onReceive(receiveEvent); // register event Slave receiver from Master
  49.  
  50. //Slave sende multiple data to Master
  51. void requestEvent()
  52. {
  53.   uint8_t Buffer[4];
  54.   Buffer[0]=room[0]; //room temperature
  55.   Buffer[1]=room[1]; //Desirable room temperature
  56.   Buffer[2]=room[2]; //damper status OPEN/CLOSE
  57.   Buffer[3]=room[3]; //power ON/OFF
  58.   Wire.write(Buffer,4);
  59. }
  60.  
  61. //Slave receiver from Master
  62. void receiveEvent(int howMany)
  63. {
  64.   while (Wire.available() > 0)
  65.   {
  66.   int x = Wire.read();    // receive byte as an integer
  67.   uint8_t m = Wire.read(); // receive boolean true or false
  68.   Serial.print("the data receive is: ");
  69.   Serial.println(x);  // print the integer
  70.   temp_by_user=x; //receive desirable user temp for the room when user change in master
  71.   mode=m; // boolean variable
  72.   }
  73. }
Add Comment
Please, Sign In to add comment